|
Буфер для PCI Express |
|
|
|
Sep 2 2015, 05:59
|
Профессионал
    
Группа: Свой
Сообщений: 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 драйвером?
Эскизы прикрепленных изображений
|
|
|
|
|
 |
Ответов
|
Sep 28 2015, 14:23
|
Профессионал
    
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643

|
Приветствую! Для начала почитайте LogiCORE IP AXI DMA v6.00.a Product Guide (pg021_axi_dma.pdf) В более новых доках отсутствуют понятные картинки про ring buffer.  Я обычно ставлю FIFO как минимум на пару пакетов максимального размера. Конкретно это сильно зависит от конфигурации системы - соотношения средней полосы PCIe r к полосе траффика 10G, другой активности через этот же сегмент PCIe шины, и.т.д. и.т.п. Ну и также Ваших хотелок по допустимым потерям пакетов. DMA в режиме SG "кеширует" в локальном FIFO 3 дескриптора, сглаживая latecy при чтении дескрипторов. Однако это может быть недостаточно если предполагается трафик с большим количеством малых пакетов и при этом еще и желательно разбивка этих пакетов на отдельные буфера в системной памяти В этом случае можно дескрипторы располагать и в памяти FPGA . Но при этом существенно усложняется драйвер (для гарантированного получения пиковых характеристик). Есть еще куча промежуточных вариантов, но это уже все экзотика - Опят же тут надо четко представлять себе требования к системе в целом. Вариант N2 - Вы можете и миллион дескрипторов закольцевать - лишь бы памяти хватило - настроить iterrupt coalesing в DMA и потом не спеша перебирать эти "четки" выискивая в пришедших горах мусо... ..данных крупицы истины. Но опят же ничто не даром под луной - latecy обработки пакетов в этом случае будет большой. Сложная структура дескрипторов в сетевых картах позволяет разгрузить софт от рутинных дел - например разгребать траффик от разных источников и переслать напрямую его на выделенный проц. в многопроцессорных системах, приоритеты пересылки для разного типа пакетов, и кучу других приятных плюшек. Никто не мешает Вам сделать все тоже самое если нужно и даже больше - главное тут понять - а оно нам нужно? Начните с малого/простого - запустите 10G Ethernet  Успехов! Rob.
|
|
|
|
|
Sep 28 2015, 15:07
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(RobFPGA @ Sep 28 2015, 17:23)  Для начала почитайте LogiCORE IP AXI DMA v6.00.a Product Guide (pg021_axi_dma.pdf) В более новых доках отсутствуют понятные картинки про ring buffer.  Спасибо, смотрю, есть картинки, которых у меня не было. Цитата(RobFPGA @ Sep 28 2015, 17:23)  Я обычно ставлю FIFO как минимум на пару пакетов максимального размера. Конкретно это сильно зависит от конфигурации системы - соотношения средней полосы PCIe r к полосе траффика 10G, другой активности через этот же сегмент PCIe шины, и.т.д. и.т.п. Ну и также Ваших хотелок по допустимым потерям пакетов.
DMA в режиме SG "кеширует" в локальном FIFO 3 дескриптора, сглаживая latecy при чтении дескрипторов. Однако это может быть недостаточно если предполагается трафик с большим количеством малых пакетов и при этом еще и желательно разбивка этих пакетов на отдельные буфера в системной памяти В этом случае можно дескрипторы располагать и в памяти FPGA . Но при этом существенно усложняется драйвер (для гарантированного получения пиковых характеристик). Есть еще куча промежуточных вариантов, но это уже все экзотика - Опят же тут надо четко представлять себе требования к системе в целом.
Вариант N2 - Вы можете и миллион дескрипторов закольцевать - лишь бы памяти хватило - настроить iterrupt coalesing в DMA и потом не спеша перебирать эти "четки" выискивая в пришедших горах мусо... ..данных крупицы истины. Но опят же ничто не даром под луной - latecy обработки пакетов в этом случае будет большой. Система будет состоять из приёма 10G Ethernet трафика и передачи его по PCIe в ПК. По 10G Ethernet принимается непрерывный поток данных от плат АЦП. Соединение "точка-точка" - мусор отсутствует, только полезные данные. Цитата(RobFPGA @ Sep 28 2015, 17:23)  Начните с малого/простого - запустите 10G Ethernet  Это уже готово (возможно, понадобится усложнить систему, но данные с платы на плату погонял).
|
|
|
|
|
Sep 28 2015, 15:47
|
Профессионал
    
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643

|
Приветствую! Цитата(doom13 @ Sep 28 2015, 18:07)  Система будет состоять из приёма 10G Ethernet трафика и передачи его по PCIe в ПК. По 10G Ethernet принимается непрерывный поток данных от плат АЦП. Соединение "точка-точка" - мусор отсутствует, только полезные данные. Увы - пока я Вашего слона представляю как нечто похожее на веревку  Плат АЦП у Вас несколько? Каков траффик средний/пиковый? Будет ли lose-less режим 10G MAC? каков протокол передачи данных/управления платами? Нужен ли контроль целостности/непрервыности данных? необходима ли заливка потока данных каждого АЦП в независимый буфер? Нужена ли преобработка/статистика данных? Режимы работы? ................... Ну а если по простому гнать пакеты в одну сторону то 800-900 MB/s можно получить без проблем. Естетсвенно если у Ваc слон хотябы о 4 ногах и желателно в версии 2 Успехов! Rob.
|
|
|
|
|
Sep 28 2015, 16:08
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(RobFPGA @ Sep 28 2015, 18:47)  Что-то мы ушли от темы. Считаем, что есть генератор трафика (просто пакеты данных) с максимальным потоком данных 10Gbit/s, шина данных 64 бита, тактовая частота 156.25 MHz и надо всё это запихнуть в ПК по PCIe. Пока сделал, как на рисунке выше, но вижу, что это неправильно, и начинаю попытки запустить DMA S2MM. А тут есть вопросы, как правильно идет формирование и работа с дескрипторами.
|
|
|
|
Сообщений в этой теме
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 ЦитатаМануал на Intel 82599 10 GbE Controller прос... Sep 2 2015, 16:51 doom13 Цитата(krux @ Sep 2 2015, 19:51) в реальн... Sep 3 2015, 06:46 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   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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|