реклама на сайте
подробности

 
 
> Буфер для PCI Express
doom13
сообщение Sep 2 2015, 05:59
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Приветствую.
Собираю систему для передачи данных от 10G Ethernet по PCIe в ПК (см. рисунок).
Приёмник MAC-уровня для 10G Ethernet пока моделирую Traffic Generator-ом. Прерывание от S2MM FIFO заводится в ПК и обрабатывается драйвером.
Использовал DC FIFO (для перехода между clock domains, Ethernet тактируется 156.25 МГц, PCIe - 250 МГц) и S2MM FIFO (для преобразования AXI4-Stream в AXI4).
S2MM FIFO генерирует прерывание либо по достижению определённого уровня заполнения, либо по приёму очередного пакета данных.
Traffic Generator управляется MicroBlaze (пока, для отладки) и может генерировать пакет 1024*64bit в цикле или постоянно.
Если использую прерывание по заполнению уровня (1024 позиции фифо), то приходится ставить большую задержку между запусками Traffic Generator-а, чтобы
CDMA успевал выгребать данные до накопления новых 1024 позиций, иначе передача фифо забивается и прерывание больше не срабатывает.
Тогда попробовал использовать прерывание по приёму пакета и забирать максимальное число данных кратное 1024 позициям фифо.
Тут Traffic Generator может работать в непрерывном режиме (CDMA постоянно забирает данные), но есть ощущение, что при заполнении фифо Traffic Generator может некоторое
время ожидать следующей передачи.
Вопросы:
1) Правильно ли реализую сам буфер, возможно есть более удобное решение?
2) Как выбрать размер FIFO и размер разовой передачи CDMA с учётом разных скоростей работы FIFO на запись/чтение и времени, требуемого для обработки прерывания и запуска CDMA драйвером?

Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
krux
сообщение Sep 2 2015, 16:51
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



Цитата
Мануал на Intel 82599 10 GbE Controller просмотрел, но вот информации по реализации FIFO не нашёл,

если коротко, то там используются:
1) 512 кбайт буферного озу
2) SGDMA
3) DMA для чтения таблиц дескрипторов
4) 16 записей для указателей (видных через BAR)
5) 16 таблиц для дескрипторов для SGDMA

проц формирует в озу пк таблицы дескрипторов-указателей на буферы под хранение данных.
проц заполняет записи 4) -- слейвом (ака запись в target) -- самая медленная операция
после чего DMA 3) вычитывает из оперативки таблицы дескрипторов и складирует их себе в 5)
сетевка готова к приему.
по приему пакета SGDMA 2) берёт очередную запись из 5) и пишет данные из буфера 2) в озу пк по адресу, указанному в дескрипторе. посылает MSI.
при расходовании целых таблиц из 5) посылаются прерывания на пополнение таблицы дескрипторов.
проц снова формирует таблицу дескрипторов, пишет в 4) адрес где он эту табличку положил, и DMA 3) её вычитывает

Цитата
вычитка данных происходит со скоростью на 60 % больше чем запись

вы не можете контролировать процесс формирования готовности со стороны PCIe Root Complex, поэтому в любой момент DMA-передача по PCIe может застрять на очередном отправляемом куске TLB в 128 байт. соотношение максимальных пропускных способностей AXI и FIFO здесь погоды не делают.

Цитата
просто происходит остановка передачи Traffic Generator

в реальной жизни, в отличие от Traffic Generator-а остановить прилетающий поток невозможно.


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
doom13
сообщение Sep 3 2015, 06:46
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(krux @ Sep 2 2015, 19:51) *
в реальной жизни, в отличие от Traffic Generator-а остановить прилетающий поток невозможно.

тут имелл ввиду, что поток генератора трафика тормозится сигналом ready от слейва AXI4-Stream.


Цитата(krux @ Sep 2 2015, 19:51) *
если коротко, то там используются:
1) 512 кбайт буферного озу
2) SGDMA
3) DMA для чтения таблиц дескрипторов
4) 16 записей для указателей (видных через BAR)
5) 16 таблиц для дескрипторов для SGDMA

проц формирует в озу пк таблицы дескрипторов-указателей на буферы под хранение данных.
проц заполняет записи 4) -- слейвом (ака запись в target) -- самая медленная операция
после чего DMA 3) вычитывает из оперативки таблицы дескрипторов и складирует их себе в 5)
сетевка готова к приему.
по приему пакета SGDMA 2) берёт очередную запись из 5) и пишет данные из буфера 2) в озу пк по адресу, указанному в дескрипторе. посылает MSI.
при расходовании целых таблиц из 5) посылаются прерывания на пополнение таблицы дескрипторов.
проц снова формирует таблицу дескрипторов, пишет в 4) адрес где он эту табличку положил, и DMA 3) её вычитывает

В доке Intel есть упоминание о Rx FIFO, в которое данные (пакет) поступают после прохождения фильтра. Как понимаю, его я и пытаюсь реализовать. Всё остальное - это работа драйвера, который ваделяет буферы в ПК, перезапускает DMA. Тут я не совсем понимаю, как происходит передача данных без потери. Ведь на обработку прерывания и перезапуск DMA опять же требуется время и достаточно много. Даже если работает SgDMA, ему также нужно обновлять цепочку дескрипторов.


Что если вместо MM ядра CDMA попытаться использовать ядро DMA (v7.1) в режиме SgDMA S2MM и зациклить ему цепочку дескрипторов?
Т.е. выбрасываем из системы (см. рисунок) S2MM FIFO и CDMA, ставим DMA, и DMA будет принимать поток AXI4-Stream и сразу складывать в буферы в ПК выделяемые драйвером устройства. Потеря данных будет только если user space application не успевает вычитывать данные из буферов драйвера, т.е. если все буферы заполнены идёт перезапись. Подойдёт ли такой вариант?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- doom13   Буфер для PCI Express   Sep 2 2015, 05:59
- - krux   тупое S2MM fifo вам на 10G не поможет. скорости не...   Sep 2 2015, 06:07
|- - doom13   Цитата(krux @ Sep 2 2015, 09:07) посмотри...   Sep 2 2015, 06:19
- - krux   ЦитатаА что не так с FIFO? формально, с FIFO всё н...   Sep 2 2015, 08:52
|- - doom13   Цитата(krux @ Sep 2 2015, 11:52) формальн...   Sep 2 2015, 09:28
- - krux   1 таблица дескрипторов - это 128 буферов, на 128 S...   Sep 3 2015, 08:32
- - doom13   Возник вопрос, в какой памяти должна размещаться т...   Sep 28 2015, 07:05
|- - RobFPGA   Приветствую! Цитата(doom13 @ Sep 3 2015,...   Sep 28 2015, 12:23
|- - doom13   Цитата(RobFPGA @ Sep 28 2015, 15:23) Для ...   Sep 28 2015, 13:00
- - RobFPGA   Приветствую! Для начала почитайте LogiCORE IP...   Sep 28 2015, 14:23
|- - doom13   Цитата(RobFPGA @ Sep 28 2015, 17:23) Для ...   Sep 28 2015, 15:07
|- - RobFPGA   Приветствую! Цитата(doom13 @ Sep 28 2015...   Sep 28 2015, 15:47
|- - doom13   Цитата(RobFPGA @ Sep 28 2015, 18:47) Что...   Sep 28 2015, 16:08
|- - doom13   Цитата(RobFPGA @ Sep 28 2015, 18:47) Ну а...   Sep 28 2015, 18:54
- - Golikov A.   с 2 таблицами проще, что софт сможет монопольно не...   Sep 29 2015, 06:16
|- - RobFPGA   Приветствую! Цитата(Golikov A. @ Sep 29 ...   Sep 29 2015, 07:10
- - doom13   Столкнулся с тем, что ядро Linux не хочет выделять...   Sep 30 2015, 14:28
|- - RobFPGA   Приветствую! Цитата(doom13 @ Sep 30 2015...   Sep 30 2015, 16:03
|- - doom13   Цитата(RobFPGA @ Sep 30 2015, 19:03) При...   Sep 30 2015, 16:34
|- - RobFPGA   Приветствую. Цитата(doom13 @ Sep 30 2015, 19...   Sep 30 2015, 16:42
- - krux   ЦитатаКак понимаю, чтоб DMA мог работать по цепочк...   Sep 30 2015, 17:27
- - doom13   Хорошо. Поясните мне вот это: AXI to PCIe Bridge и...   Sep 30 2015, 19:56
|- - RobFPGA   Приветствую! Цитата(doom13 @ Sep 30 2015...   Sep 30 2015, 20:06
- - doom13   Получается, для системной памяти Aperture - это ра...   Sep 30 2015, 20:44
|- - RobFPGA   Приветствую! Цитата(doom13 @ Sep 30 2015...   Sep 30 2015, 21:13
|- - doom13   Цитата(RobFPGA @ Oct 1 2015, 00:13) Ноль ...   Oct 1 2015, 09:25
- - doom13   Нашёл, dmidecode показывает всю системную информац...   Oct 1 2015, 18:44
- - doom13   Для ядра AXI Bridge for PCIe Gen 3 есть такая зако...   Oct 2 2015, 13:31
|- - RobFPGA   Приветствую! Цитата(doom13 @ Oct 2 2015,...   Oct 2 2015, 14:49
- - doom13   Что-то я вообще запутался, как оно работает. А как...   Oct 2 2015, 16:07
- - krux   ЦитатаЧто-то я вообще запутался, как оно работает....   Oct 2 2015, 17:56
- - doom13   Цитата(krux @ Oct 2 2015, 20:56) зависит ...   Oct 2 2015, 19:52
- - RobFPGA   Приветствую! Цитата(doom13 @ Oct 2 2015,...   Oct 2 2015, 21:03
- - doom13   Цитата(RobFPGA @ Oct 3 2015, 00:03) Поэто...   Oct 3 2015, 08:29
- - doom13   Цитата(RobFPGA @ Oct 3 2015, 00:03) Цита...   Oct 6 2015, 08:59


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 19:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.01413 секунд с 7
ELECTRONIX ©2004-2016