dde29 0 October 28, 2022 Posted October 28, 2022 · Report post 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). Так что, текущая проблема решена, буду двигаться дальше... Quote Share this post Link to post Share on other sites More sharing options...
dmitry-tomsk 0 December 6, 2022 Posted December 6, 2022 · Report post Коллеги, у меня проблема попроще. Дошли руки до своего контроллера для 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. Порядок байт в данных переставляю, а в адресе нет. Может в этом проблема? Quote Share this post Link to post Share on other sites More sharing options...
dmitry-tomsk 0 December 13, 2022 Posted December 13, 2022 · Report post Ошибку нашёл, только скорость ввода в пк получилась не больше чем 3020 МБ/s. Хотелось бы узнать, у кого какая получилась? Quote Share this post Link to post Share on other sites More sharing options...
dxp 10 December 14, 2022 Posted December 14, 2022 · Report post Это в DMA режиме или в PIO? Конфигурация линка какая (сколько лейнов в линке)? Quote Share this post Link to post Share on other sites More sharing options...
dmitry-tomsk 0 December 14, 2022 Posted December 14, 2022 · Report post 5 hours ago, dxp said: Это в DMA режиме или в PIO? Конфигурация линка какая (сколько лейнов в линке)? dma, pcie 2.0 x8 Quote Share this post Link to post Share on other sites More sharing options...
dxp 10 December 14, 2022 Posted December 14, 2022 · Report post На 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, то там оно помедленнее работает. Quote Share this post Link to post Share on other sites More sharing options...
faa 1 December 14, 2022 Posted December 14, 2022 · Report post 1 час назад, dmitry-tomsk сказал: dma, pcie 2.0 x8 Размер TLP какой? ЕМНИП, для gen2 x8 теоретический 3814 МБ/сек, для TLP 128 байт практический предел 3225 МБ/сек (МБ - 2**20 байт). Quote Share this post Link to post Share on other sites More sharing options...
dmitry-tomsk 0 December 14, 2022 Posted December 14, 2022 · Report post 11 minutes ago, faa said: Размер TLP какой? ЕМНИП, для gen2 x8 теоретический 3814 МБ/сек, для TLP 128 байт практический предел 3225 МБ/сек (МБ - 2**20 байт). Благодраю откликнувшихся. TLP - 128, корка своя, пакеты по два мегабайта, поток напрямую, кольцевой буфер в ПК - 16 МБайт. Думал, что влияет опрос готовности, но не похоже. Что-то нужно придумать, чтобы отловить большие простои на s_axis аппаратного блока pcie, чтобы узкое место найти Quote Share this post Link to post Share on other sites More sharing options...
faa 1 December 14, 2022 Posted December 14, 2022 · Report post 7 минут назад, dmitry-tomsk сказал: Благодраю откликнувшихся. TLP - 128, корка своя, пакеты по два мегабайта, поток напрямую, кольцевой буфер в ПК - 16 МБайт. Думал, что влияет опрос готовности, но не похоже. Что-то нужно придумать, чтобы отловить большие простои на s_axis аппаратного блока pcie, чтобы узкое место найти Платформа какая? Intel/AMD/AARCH64? Поколение? ОС lin/win? Опрос готовности - это кто кого и через что опрашивает? Тут же и по этому же PCIe? Мы мониторили готовности всех фифо, готовности корки, размеры буферов в корке. И в драйвере кеширование как? А MWI вкл/выкл? Quote Share this post Link to post Share on other sites More sharing options...
dmitry-tomsk 0 December 14, 2022 Posted December 14, 2022 · Report post 5 hours ago, faa said: Платформа какая? Intel/AMD/AARCH64? Поколение? ОС lin/win? Опрос готовности - это кто кого и через что опрашивает? Тут же и по этому же PCIe? Мы мониторили готовности всех фифо, готовности корки, размеры буферов в корке. И в драйвере кеширование как? А MWI вкл/выкл? Платформа intel i7 8700, чипсет не помню, jungo windows 10 драйвер. Кэширования не включал, после получения адреса очередного пакета в кольцевом буфере через pio делаю WDC_DMASyncIo(pDma). Quote Share this post Link to post Share on other sites More sharing options...
dxp 10 December 15, 2022 Posted December 15, 2022 · Report post На каждый пакет ответ через PIO? А о получении пакета хост как узнаёт? Прерывание? Какая частота поступления пакетов? Какая загрузка CPU при этом? Вы писали, что есть паузы на входном потоковом интерфейсе PCIe IP ядра. Одно из объяснений в том, что хост тормозит с приёмом -- кредиты не выдаёт (кстати, можно вывести кредиты по заголовками и данным, посмотреть, что там, если снижаются до нуля, то в этом и причина), а тормозит, потому что загружен по самое не могу -- скачет, например, в прерываниях на каждый пакет. Хотя от загрузки CPU выдача кредитов не должна напрямую страдать -- это ж аппаратура делает. Другое дело, что контроллер памяти может быть сильно загружен частыми обращениями, тогда заливка в память со стороны PCIe будет тормозиться. В общем, монитор за кредитами должен дать тут ответ. Прерывание -- дорогой ресурс, их надо экономно использовать. Мы пока не настроили механизм оптимальной "плотности" прерываний, тоже скорость не выжималась, в хост упиралась, хотя PIO там почти не было. PIO, кстати, тоже медленная операция, на каждый пакет её метать весьма неэффективно. Quote Share this post Link to post Share on other sites More sharing options...
dmitry-tomsk 0 December 15, 2022 Posted December 15, 2022 · Report post 5 hours ago, dxp said: На каждый пакет ответ через PIO? А о получении пакета хост как узнаёт? Прерывание? Какая частота поступления пакетов? Какая загрузка CPU при этом? Вы писали, что есть паузы на входном потоковом интерфейсе PCIe IP ядра. Одно из объяснений в том, что хост тормозит с приёмом -- кредиты не выдаёт (кстати, можно вывести кредиты по заголовками и данным, посмотреть, что там, если снижаются до нуля, то в этом и причина), а тормозит, потому что загружен по самое не могу -- скачет, например, в прерываниях на каждый пакет. Хотя от загрузки CPU выдача кредитов не должна напрямую страдать -- это ж аппаратура делает. Другое дело, что контроллер памяти может быть сильно загружен частыми обращениями, тогда заливка в память со стороны PCIe будет тормозиться. В общем, монитор за кредитами должен дать тут ответ. Прерывание -- дорогой ресурс, их надо экономно использовать. Мы пока не настроили механизм оптимальной "плотности" прерываний, тоже скорость не выжималась, в хост упиралась, хотя PIO там почти не было. PIO, кстати, тоже медленная операция, на каждый пакет её метать весьма неэффективно. Прерывания не используются пока, через pio идёт опрос регистра состояния, dma от этого не зависит, кроме случая, когда буфер в пк полный. Увеличение размера буфера не влияет. Подозрение на функцию WDC_DMASyncIo, может она как-то влияет на root complex. С драйверами не разбирался, не знаю, что она делает. Quote Share this post Link to post Share on other sites More sharing options...
dxp 10 December 15, 2022 Posted December 15, 2022 · Report post А попробуйте не по кругу писать, а разово -- залили 16 МБ, засекли время (в ПЛИС) -- объективно увидите скорость отдачи на аппаратном уровне. Т.е. смысл исключить опросы и прочий программный компонент из теста. Ну, и по кредитам всё же интересно -- до какой величины опускаются. Можно илой ловить по достижению нуля или порога. Quote Share this post Link to post Share on other sites More sharing options...
dmitry-tomsk 0 December 15, 2022 Posted December 15, 2022 · Report post 1 hour ago, dxp said: А попробуйте не по кругу писать, а разово -- залили 16 МБ, засекли время (в ПЛИС) -- объективно увидите скорость отдачи на аппаратном уровне. Т.е. смысл исключить опросы и прочий программный компонент из теста. Ну, и по кредитам всё же интересно -- до какой величины опускаются. Можно илой ловить по достижению нуля или порога. Спасибо, попробую. Quote Share this post Link to post Share on other sites More sharing options...
faa 1 December 20, 2022 Posted December 20, 2022 · Report post В 15.12.2022 в 10:52, dmitry-tomsk сказал: Прерывания не используются пока, через pio идёт опрос регистра состояния, dma от этого не зависит, кроме случая, когда буфер в пк полный. Увеличение размера буфера не влияет. Подозрение на функцию WDC_DMASyncIo, может она как-то влияет на root complex. С драйверами не разбирался, не знаю, что она делает. А опрос через pio регистра состояния без пауз/таймаутов? Quote Share this post Link to post Share on other sites More sharing options...