|
Буфер для 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 30 2015, 16:03
|
Профессионал
    
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643

|
Приветствую! Цитата(doom13 @ Sep 30 2015, 17:28)  Столкнулся с тем, что ядро Linux не хочет выделять непрерывное адресное пространство более 4 MBytes. Получается одним ... А зачем Вам непрерывное пространство ? Размер дескриптора 32 байта, а страницу 4k влазит 128 штук (небольшая карусельна ), ну а в 4M аж лень считать сколько (целое колесо обозрения получится  ). Вы наверное пытаетесь еще и буфера тут же втиснуть. так это и не надо буфера выделяются отдельно физическими блоками-страницами и линкуются в дескрипторы В самом простом случае (размер физ страниц 4K) 128 дескрипторов мапят 512K буферов. Теперь грубо считаем что хуже - для маленьких пакетов 128 буферов это на ~7us полета Для jumbo пакетов 512K - это ~512 us парения С учетом того что типичное время обработки прерывания ~10-100 us если взять кольцо из 32*128 дескрипторов то можно быть уверен что драйвер гарантированно обработает прерывание и сможет : пройти по кольцу от последней точки хвоста кольца дескрипторов до текущего положения головы указатели на заполненные буера убрать из дескрипторов и отправить в очередь ленивому юзеру на обработку выделить память под свободные буфера и заполнить указателями на них поля в вытирающих пот дескрипторах вновь отправив их на тяжкий труд передвинув положение хвоста в соответствующем регистре ДМА ДМА при этом на останавливается - так как будет иметь как минимум половину готовых дескрипторов для работы В таком случае можно забить данными всю память которую только можно выделить Успехов! Rob.
|
|
|
|
|
Sep 30 2015, 16:34
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(RobFPGA @ Sep 30 2015, 19:03)  Приветствую. Как понимаю, чтоб DMA мог работать по цепочке дескрипторов непрерывно, необходимо, чтоб все дескрипторы указывали на буферы памяти из непрерывного адресного пространства. А система максимум непрерывно даёт 4 MB. Т.е. одно кольцо сможет перебросить максимум 4 MB, если система не успевает обрабатывать и возвращать дескрипторы. А хочется сделать, чтоб оно было больше. Может этого и достаточно. Т.е. под данные выделяем большой блок памяти (непрерывный), а его дробим на отдельные буферы на которые и будут указывать дескрипторы, но размер этого блока пока получается максимум 4 MB. Если дескриптор указывает на буфер из другого адресного пространства, то надо либо переключать мост на это пространство, либо использовать дополнительный BAR. PS: Цитата(RobFPGA @ Sep 30 2015, 19:03)  Вы наверное пытаетесь еще и буфера тут же втиснуть. так это и не надо буфера выделяются отдельно физическими блоками-страницами и линкуются в дескрипторы Да, только адреса буферов транслируются через PCIe мост, т.е. тут и нужно, чтоб они шли непрерывно со смещением на размер буфера. Либо я тут чего-то не понимаю.
|
|
|
|
|
Sep 30 2015, 16:42
|
Профессионал
    
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643

|
Приветствую. Цитата(doom13 @ Sep 30 2015, 19:27)  Как понимаю, чтоб DMA мог работать по цепочке дескрипторов непрерывно, необходимо, чтоб все дескрипторы указывали на буферы памяти из непрерывного адресного пространства С какого это перепугу? там единственное ограничение может быть чтобы адреса дескрипторов были в младших 4G А где именно пофиг - ведь в каждом дескрипторе УКАЗАТЕЛЬ на следующий дескриптор и УКАЗАТЕЛЬ на буфер. Надо выделять под буфера много мелких. а не большой непрерывный кусок памяти, главное чтобы в окно попали. Успехов! Rob P.S. Ну и размер аппретуры AXI ->PCIe можно попробовать сделать в 64 бита
|
|
|
|
Сообщений в этой теме
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 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 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
|
|
|