Перейти к содержанию
    

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Коллеги, у меня проблема попроще. Дошли руки до своего контроллера для 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 hours ago, dxp said:

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

dma, pcie 2.0 x8

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На 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, то там оно помедленнее работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

dma, pcie 2.0 x8

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 minutes ago, faa said:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 hours ago, faa said:

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 hours ago, dxp said:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, dxp said:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...