Jump to content
    

PCIe - начало...

On 10/27/2022 at 2:36 AM, RobFPGA said:

Для того чтобы транзакции  шли нужно для начала убедится что: 
линк поднялся, 
система увидела и сконфигурировала BARы, 
разрешены соответствующие транзакции (IO, MEM, Master) в регистре command  PCIe корки.   

Вы оказались правы! Прочитав конфигурационное пространство командой:
hexdump /sys/bus/pci/device/0000:01:00.0/config
оказалось, что командный регистр, находящийся по адресу 0x04 гол как сокол (рис.1),
а значит флаги I/O Space Enable, Memory Space Enable, Bus Master Enable сброшены в ноль.

Аналогичную картину я увидел JTAGом, глядя на регистр cfg_function_status (рис.2) предоставляемый коркой pcie3_ultrascale.
Соответствующие флаги Физической Функции 0 были сброшены (Функцию 1 я и не использую, на нее пофиг).

С помощью команды
sudo setpci -s 01:00.0 04.B=07
попробовал установить все 3 флага.
Прочитав после этого снова конфигурационное пространство, убедился что в командном регистре заветную 7-ку (рис.3)
Посмотрев JTAGом регистр cfg_function_status, еще раз железно убедился в установленных флагах...

После этого отправляя на resource0 мимо всякого драйвера в map я увидел заветные транзакции чтения (рис.4) и записи (рис.5)
Смотрел JTAGом цепляясь на интерфейс Completer Request (CQ).

Так что, текущая проблема решена, буду двигаться дальше...

 

 

Рис 1.JPG

Рис 2.JPG

Рис 3.JPG

Рис 4.JPG

Рис 5.JPG

Share this post


Link to post
Share on other sites

Коллеги, у меня проблема попроще. Дошли руки до своего контроллера для kintex-7 325t. Пишу пакет mwr64 в корку - а ответ тишина. Драйвер под win10 - jungo 12 с ftp. Лочу память через dwStatus = WDC_DMASGBufLock(hDev, pBuf, DMA_FROM_DEVICE | DMA_ALLOW_64BIT_ADDRESS, size, &pDma).

С начала страницы передаю один пакет 128 байт, а в памяти нули. Пакет на картинке, bus master enable в 1. Порядок байт в данных переставляю, а в адресе нет. Может в этом проблема?

 

image.thumb.png.df53a870fda59fd85f3e9d3b3c212c26.png

Share this post


Link to post
Share on other sites

Ошибку нашёл, только скорость ввода в пк получилась не больше чем 3020 МБ/s. Хотелось бы узнать, у кого какая получилась?

Share this post


Link to post
Share on other sites

Это в DMA режиме или в PIO? Конфигурация линка какая (сколько лейнов в линке)?

Share this post


Link to post
Share on other sites

На Gen2 x4 (кит AC701, Artix7) чистая запись (заливал буфер 4 МБ с генератора трафика -- экспериментировал), выходило 14.5 Gbps, при теоретически достижимой 14.7 Gbps (там MPS был 256 (на серверный проц лилось)). Если MPS = 128 (значительно более распространённый вариант, почти на всех бытовых/офисных PC такое значение), то помедленнее будет процентов на 10. Ваши 3020 MBps = 24.16 Gbps. Если привести к х4, то 12.08 Gbps. Если отнять 10% от 14.5 (для MPS = 128), то выходит порядка 13 Gpbs. Ну, т.е. не предел, но не сказать, что низкая скорость, имхо.

Да, эти 14.5 Gpbs -- это было на низкоуровневом варианте, где из корки торчат AXI4-Stream интерфейсы, и работаешь на уровне TLP. Если вариант AXI4-PCIe Bridge, то там оно помедленнее работает.

Share this post


Link to post
Share on other sites

1 час назад, dmitry-tomsk сказал:

dma, pcie 2.0 x8

Размер TLP какой?

ЕМНИП, для gen2 x8 теоретический 3814 МБ/сек, для TLP 128 байт практический предел 3225 МБ/сек (МБ - 2**20 байт).

Share this post


Link to post
Share on other sites

11 minutes ago, faa said:

Размер TLP какой?

ЕМНИП, для gen2 x8 теоретический 3814 МБ/сек, для TLP 128 байт практический предел 3225 МБ/сек (МБ - 2**20 байт).

Благодраю откликнувшихся. TLP - 128, корка своя, пакеты по два мегабайта, поток напрямую, кольцевой буфер в ПК - 16 МБайт. Думал, что влияет опрос готовности, но не похоже. Что-то нужно придумать, чтобы отловить большие простои на s_axis аппаратного блока pcie, чтобы узкое место найти

Share this post


Link to post
Share on other sites

7 минут назад, dmitry-tomsk сказал:

Благодраю откликнувшихся. TLP - 128, корка своя, пакеты по два мегабайта, поток напрямую, кольцевой буфер в ПК - 16 МБайт. Думал, что влияет опрос готовности, но не похоже. Что-то нужно придумать, чтобы отловить большие простои на s_axis аппаратного блока pcie, чтобы узкое место найти

Платформа какая? Intel/AMD/AARCH64? Поколение? ОС lin/win?

Опрос готовности - это кто кого и через что опрашивает? Тут же и по этому же PCIe?

Мы мониторили готовности всех фифо, готовности корки, размеры буферов в корке.

И в драйвере кеширование как? А MWI вкл/выкл?

Share this post


Link to post
Share on other sites

5 hours ago, faa said:

Платформа какая? Intel/AMD/AARCH64? Поколение? ОС lin/win?

Опрос готовности - это кто кого и через что опрашивает? Тут же и по этому же PCIe?

Мы мониторили готовности всех фифо, готовности корки, размеры буферов в корке.

И в драйвере кеширование как? А MWI вкл/выкл?

Платформа intel i7 8700, чипсет не помню, jungo windows 10 драйвер. Кэширования не включал, после получения адреса очередного  пакета в кольцевом буфере через pio делаю WDC_DMASyncIo(pDma).

Share this post


Link to post
Share on other sites

На каждый пакет ответ через PIO? А о получении пакета хост как узнаёт? Прерывание? Какая частота поступления пакетов? Какая загрузка CPU при этом? Вы писали, что есть паузы на входном потоковом интерфейсе PCIe IP ядра. Одно из объяснений в том, что хост тормозит с приёмом -- кредиты не выдаёт (кстати, можно вывести кредиты по заголовками и данным, посмотреть, что там, если снижаются до нуля, то в этом и причина), а тормозит, потому что загружен по самое не могу -- скачет, например, в прерываниях на каждый пакет.  Хотя от загрузки CPU выдача кредитов не должна напрямую страдать -- это ж аппаратура делает. Другое дело, что контроллер памяти может быть сильно загружен частыми обращениями, тогда заливка в память со стороны PCIe будет тормозиться. В общем, монитор за кредитами должен дать тут ответ.

Прерывание -- дорогой ресурс, их надо экономно использовать. Мы пока не настроили механизм оптимальной "плотности" прерываний, тоже скорость не выжималась, в хост упиралась, хотя PIO там почти не было. PIO, кстати, тоже медленная операция, на каждый пакет её метать весьма неэффективно.

Share this post


Link to post
Share on other sites

5 hours ago, dxp said:

На каждый пакет ответ через PIO? А о получении пакета хост как узнаёт? Прерывание? Какая частота поступления пакетов? Какая загрузка CPU при этом? Вы писали, что есть паузы на входном потоковом интерфейсе PCIe IP ядра. Одно из объяснений в том, что хост тормозит с приёмом -- кредиты не выдаёт (кстати, можно вывести кредиты по заголовками и данным, посмотреть, что там, если снижаются до нуля, то в этом и причина), а тормозит, потому что загружен по самое не могу -- скачет, например, в прерываниях на каждый пакет.  Хотя от загрузки CPU выдача кредитов не должна напрямую страдать -- это ж аппаратура делает. Другое дело, что контроллер памяти может быть сильно загружен частыми обращениями, тогда заливка в память со стороны PCIe будет тормозиться. В общем, монитор за кредитами должен дать тут ответ.

Прерывание -- дорогой ресурс, их надо экономно использовать. Мы пока не настроили механизм оптимальной "плотности" прерываний, тоже скорость не выжималась, в хост упиралась, хотя PIO там почти не было. PIO, кстати, тоже медленная операция, на каждый пакет её метать весьма неэффективно.

Прерывания не используются пока, через pio идёт опрос регистра состояния, dma от этого не зависит, кроме случая, когда буфер в пк полный. Увеличение размера буфера не влияет. Подозрение на функцию WDC_DMASyncIo, может она как-то влияет на root complex. С драйверами не разбирался, не знаю, что она делает.

Share this post


Link to post
Share on other sites

А попробуйте не по кругу писать, а разово -- залили 16 МБ, засекли время (в ПЛИС) -- объективно  увидите скорость отдачи на аппаратном уровне. Т.е. смысл исключить опросы и прочий программный компонент из теста. 

Ну, и по кредитам всё же интересно -- до какой  величины опускаются. Можно илой ловить по достижению нуля или порога.

Share this post


Link to post
Share on other sites

1 hour ago, dxp said:

А попробуйте не по кругу писать, а разово -- залили 16 МБ, засекли время (в ПЛИС) -- объективно  увидите скорость отдачи на аппаратном уровне. Т.е. смысл исключить опросы и прочий программный компонент из теста. 

Ну, и по кредитам всё же интересно -- до какой  величины опускаются. Можно илой ловить по достижению нуля или порога.

Спасибо, попробую.

Share this post


Link to post
Share on other sites

В 15.12.2022 в 10:52, dmitry-tomsk сказал:

Прерывания не используются пока, через pio идёт опрос регистра состояния, dma от этого не зависит, кроме случая, когда буфер в пк полный. Увеличение размера буфера не влияет. Подозрение на функцию WDC_DMASyncIo, может она как-то влияет на root complex. С драйверами не разбирался, не знаю, что она делает.

А опрос через pio регистра состояния без пауз/таймаутов?

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...