|
|
  |
Bus Master DMA для PCIe |
|
|
|
Oct 16 2015, 14:33
|
Профессионал
    
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643

|
Приветствую! Цитата(doom13 @ Oct 16 2015, 14:33)  Если можно расскажите тут подробнее, что это (pipe) и как работает? Что можно почитать по данной теме? xapp1184 достаточно будет? Нее - в PIPE лезть не нужно - это интерфейс к MGT - toshas наверное имел ввиду шины s_axis_rq_* s_axis_rc_* на самой pcie корке которая внутри bridge Через эти шины TLP идут request/completion от bridge логики к pcie корке. Цепляете туда ChipScope - а еще лучше логер который будет Вам скидывать TLP header-ы и смотрите что куда тормозит. Конечно это сначало проще было бы на симе сделать. Тут либо сам bridge не заточен на макс thruput, ну или DMA например не успевает подкачивать дескрипторы. Можно попробовать разместить дескрипторы в памяти FPGA или выделить один большой непрерывный кусок физ памяти (>1MB) и все дескрипторы залинковать на него. И посмотреть изменится ли скорость или нет. Если не изменится - то тогда или пробовать на дугой мамке, или скорее всего bridge не заточен на макс thruput, ну или универсальная причина №3 - ХЗ  . Успехов! Rob.
|
|
|
|
|
Oct 16 2015, 17:55
|
Профессионал
    
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643

|
Приветствую! Цитата(toshas @ Oct 16 2015, 20:14)  Нет я как раз предлагал посмотреть трафик в системе (какие пакеты проходят mgt). Но в принципе не важно с какой стороны начинать разбираться. По факту надо отследить всю цепочку: MGT -1.(txdata/rxdata)- PCIE -2.(ll/s_axi) - MMcore -3.(axi)- DMA -4.(axi)- source Так можно найти, кто причина простоя, но может оказаться, что это просто следствие накладных расходов цепочки такой длины. Ой - разбирается на уровне PIPE это труба дело  . DLP layer, K-коды, AK-и NAK-и постоянно туда сюда снуют. ужас! Проще сначала на TLP layer посмотреть. Так как операция WRITE на PCIE не требует completion то тут или в bridge для PCIe настройки буферов зажаты или потери времени на чтение/update дескрипторов велики. Все же CDMA разрабатывался для внутреннего употребления а не для PCIe. Я вот свою железку симулирую - так latency на чтение дескриптора из памяти ~500 нс (x8 gen2) и это при PIPE симуляции и без задержек на стороне модели RC. Успехов! Rob.
|
|
|
|
|
Oct 16 2015, 19:45
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(RobFPGA @ Oct 16 2015, 17:33)  ... ну или DMA например не успевает подкачивать дескрипторы. Можно попробовать разместить дескрипторы в памяти FPGA или выделить один большой непрерывный кусок физ памяти (>1MB) и все дескрипторы залинковать на него. И посмотреть изменится ли скорость или нет. Если не изменится - то тогда или пробовать на дугой мамке ... Цитата(RobFPGA @ Oct 16 2015, 20:55)  ... или потери времени на чтение/update дескрипторов велики. Все же CDMA разрабатывался для внутреннего употребления а не для PCIe. Судя по диаграммам, которые приводил выше (затык после каждого второго burst-a и длительность пропорциональна размеру burst-a), проблема не в размещении дескрипторов в Kernel space memory. Пока использую 32 дескриптора, память под них выделяется в непрерывном куске физической памяти с помощью kmalloc. Цитата(toshas @ Oct 16 2015, 20:14)  Нет я как раз предлагал посмотреть трафик в системе (какие пакеты проходят mgt). Но в принципе не важно с какой стороны начинать разбираться. По факту надо отследить всю цепочку: MGT -1.(txdata/rxdata)- PCIE -2.(ll/s_axi) - MMcore -3.(axi)- DMA -4.(axi)- source Так можно найти, кто причина простоя, но может оказаться, что это просто следствие накладных расходов цепочки такой длины. Сегодня пытался проследить, кто является источником BVALID, но один из модулей зашифрован и связь теряется. Дальше куча линий с другими названиями и куда смотреть пока не разобрался.
|
|
|
|
|
Oct 18 2015, 20:21
|
Профессионал
    
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643

|
Приветствую! Как говорится "Даренному коню в зубы .." а надо заглядывать даже в зад  Прогнали бы на симуляции все сразу стало бы понятно. По умолчанию CDMA настроен на глубину очереди запросов адреса=4 (при этом реально выдается 4+2=6 запросов) ну а а потом CDMA шлангует пока не получит ответ/подтверждение. Поменять это безобразие в красивой формочке при конфигурировании CDMA нельзя  Только через зад коня - ручками Код set_property CONFIG.C_WRITE_ADDR_PIPE_DEPTH 8 [get_bd_cells i_axi_cdma] set_property CONFIG.C_READ_ADDR_PIPE_DEPTH 8 [get_bd_cells i_axi_cdma] Но один конь карету не помчит - также надо во всех crossbar-ах по пути следования кареты выставить постовых - значение READ_ACCEPTANCE, WRITE_ACCEPTANCE на >=8 (а то по умолчанию там стоит 2 - даже не лошадь - дохлая кляча получается ). Ну и бубенцы на хомут - значения больше 8 ставить смысла нет так как bridge больше 8 запросов в очередь не принимает, а вроде бы соответствующие параметры c_s_axi_num_read/c_s_axi_num_write расположенны слишком глубоко в зад.. read_only Успехов! Rob. P.S. Ни одно животное не пострадало. Все эксперименты проводились на виртуальной лошади с "заездами" на идеальной трассе (PIPE sim. , BFM RC без задержек);
|
|
|
|
|
Oct 19 2015, 06:42
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(RobFPGA @ Oct 18 2015, 23:21)  А что если у меня используется DMA v7.1 в режиме S2MM (CDMA был в начале)? Цитата(RobFPGA @ Oct 18 2015, 23:21)  ... также надо во всех crossbar-ах по пути следования кареты выставить постовых - значение READ_ACCEPTANCE, WRITE_ACCEPTANCE на >=8 (а то по умолчанию там стоит 2 ... Если на рисунке тот параметр, о котором шла речь, то там 8.
Эскизы прикрепленных изображений
|
|
|
|
|
Oct 19 2015, 07:45
|
Профессионал
    
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643

|
Приветствую! Цитата(doom13 @ Oct 19 2015, 09:42)  А что если у меня используется DMA v7.1 в режиме S2MM (CDMA был в начале)? Думаю что тоже самое - так как CDMA это AXI DMA сконфигурированный в позе 69 через loop-back fifo. И так и есть - правда тут придется резать бедную лошадь и ковыряется в потрохах - исходниках Код axi_dma.vhd ... -- DataMover outstanding address request fifo depth constant DM_ADDR_PIPE_DEPTH : integer := 4; ... Цитата(doom13 @ Oct 19 2015, 09:42)  Если на рисунке тот параметр, о котором шла речь, то там 8. Нет это как раз и есть "бубенцы" а я имел ввиду - axi_interconect/axi_crosbar которые стоят МЕЖДУ DMA и PCIe. Вы же как то объединяете шины DMA M_AXI и M_AXI_SG для подключения к одой шине S_AXI в PCIe bidge? Успехов! Rob.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|