doom13 0 8 октября, 2015 Опубликовано 8 октября, 2015 · Жалоба Приветствую. Собрал систему (см. рисунок) для передачи данных по PCIe. Ядро AXI Bridge for PCIe сконфигурировано в режиме x4, 64 bit, 250MHz, должно позволить прокачивать поток 16 Гбит/с. В качестве DMA используется ядро AXI DMA v7.1 в режиме Scatter-Gather. Кольцо дескрипторов и буферы данных выделяются в памяти ядра Linux. Ранее было сделано так, пропускная способность канала составляла ~6 Гбит/с. Тут опять упёрся в 6 Гбит/с, думал, что софт ограничивает производительность канала. Потом убрал вмешательство системы в работу DMA - инициализирую кольцо дескрипторов, запускаю DMA. DMA бросает данные пока не закончатся дескрипторы. Оценивая время обработки кольца дескрипторов и переданный объём данных, получаю чуть больше 6 Гбит/с. Вытянул сигналы AXI4-Stream между FIFO и DMA на ILA, вижу - FIFO держит TVALID всегда в 1, а DMA периодически (очень часто) сбрасывает TREADY в 0. Получается DMA является виновником ограничения скорости потока. В доке вычитал, что в тестах получали пропускную способность до ~70%, но это ~11,2 Гбит/с, меня бы устроило. Вопрос - как поднять производительность DMA? Как понимаю, AXI Interconnect и PCIe мост могут тормозить DMA? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toshas 0 8 октября, 2015 Опубликовано 8 октября, 2015 · Жалоба Кольцо дескрипторов ... выделяется в памяти ядра Linux. Может в этом причина ? Посмотрите анализатором очередность транзакций на шине axi. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 8 октября, 2015 Опубликовано 8 октября, 2015 · Жалоба Может в этом причина ? Посмотрите анализатором очередность транзакций на шине axi. Тогда тормоза были бы только во время чтения очередного дескриптора (по завершению передачи пакета), а так DMA сбрасывает (часто) TREADY на AXI4-Stream в 0 во время передачи данных одного пакета (за дескриптором ему пока лезть не надо). Пакеты сделал максимального размера, который поддерживает генератор трафика (65536 слов * 64 бита). Шину буду ковырять, но пока не успел. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toshas 0 9 октября, 2015 Опубликовано 9 октября, 2015 · Жалоба На сколько тактов сбрасывает ? Какими пачками идет вычитывание по axi ? Посмотрите на готовность к передаче ядра pcie. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 9 октября, 2015 Опубликовано 9 октября, 2015 · Жалоба На AXI4-Stream между FIFO и DMA картина следующая: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toshas 0 9 октября, 2015 Опубликовано 9 октября, 2015 · Жалоба А что дальше, между dma и pcie ? Я к тому, что ядро pcie дробит пакеты по max payload size и затык может быть там, в не готовности ядра pcie принимать новые данные от dma. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 9 октября, 2015 Опубликовано 9 октября, 2015 · Жалоба На AXI4 между DMA и AXI Interconnect вот такая штука (тут даже не пойму на какой из сигналов настроить триггер): PS: Триггер настроен на TLAST для AXI4-Stream (FIFO->DMA). PSPS: Тут, как понимаю, Slave (AXI Interconnect) выставил WREADY, а Master (DMA) ещё очень долго тупит. Получается, что все проблемы из-за DMA? Или надо ещё смотреть и на BVALID? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 10 октября, 2015 Опубликовано 10 октября, 2015 · Жалоба Засинхронизировал триггер по начальному адресу буфера (0х0000_0004_0720_0000) на который ссылается первый дескриптор в кольце. На рисунке сечение DMA-AXI Interconnect, для AXI Interconnect-PCIe Bridge диаграмма такая же. Нужна помощь в анализе, что тут работает неправильно (медленно) и получится ли ускорить? Если всё правильно понимаю, то WVALID ждёт подтверждения записи BVALID для второго burst-a и только потом устанавливается в 1. Как-то можно повлиять на более быстрое появления BVALID и, как следствие, на WVALID? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 10 октября, 2015 Опубликовано 10 октября, 2015 · Жалоба Увеличил burst size для DMA до максимального 256, а вместе с этим увеличилось время от WLAST до BVALID. Что за ерунда? Где тут увеличение производительности? Время от WLAST до BVALID должно было остаться таким же, как и при значении burst 16??? Если нет, за счёт чего тут можно было получить увеличение производительности DMA??? Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toshas 0 10 октября, 2015 Опубликовано 10 октября, 2015 · Жалоба Можете в pcie-mm ядре встать анализатором на pipe интерфейс (tx и rx) ? По pcie у вас только в теории пойдут пакеты 4кб, но в реальности они будут по 128, ну может 256 байт. А на пакет (группу пакетов) необходимо дождаться ack от хоста и только потом разрешать перезаписывать буфер. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 10 октября, 2015 Опубликовано 10 октября, 2015 · Жалоба Можете в pcie-mm ядре встать анализатором на pipe интерфейс (tx и rx) ? По pcie у вас только в теории пойдут пакеты 4кб, но в реальности они будут по 128, ну может 256 байт. А на пакет (группу пакетов) необходимо дождаться ack от хоста и только потом разрешать перезаписывать буфер. Т.е. я не смогу раскачать DMA более полученных 6 Гбит/с? Нужно ставить Gen3 (сейчас стоит настройка для Gen 2) увеличивать размер шины данных до 128/256 бит? Только тогда можно будет превысить потолок в 6 Гбит/с? Или, как вариант, выбрасывать DMA и мост и делать что-то своё для работы с голым ядром PCIe Gen3? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toshas 0 10 октября, 2015 Опубликовано 10 октября, 2015 · Жалоба Мне кажется pcie-mm всегда позиционировалось как удобное решение для микропроцессорной системы, не более того, при этом максимальной скорости он него никто и не требовал. В чем точно происходит затык в вашем случае было бы интересно выяснить. Однако для получения максимальных скоростей очень вероятно придется самому с нуля писать dma для голого ядра pcie. Или посмотреть на работу dsmv. Или купить решение от plda/nwlogic. Или дождаться что же xilinx предложит как альтернативу (xdma). Стоимость может оказаться невысокой или вообще бесплатной. Им нужно будет двигать свое решения для OpenCL, а для этого нужна цепь pcie-dma-mig(ddr). И xdma как раз призвано заполнить пробел. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 10 октября, 2015 Опубликовано 10 октября, 2015 · Жалоба Мне кажется pcie-mm всегда позиционировалось как удобное решение для микропроцессорной системы, не более того, при этом максимальной скорости он него никто и не требовал. А я думал это ядро и есть самое то, что Xilinx предлагает для работы с PCIe, а оно вот как оказывается :( Однако для получения максимальных скоростей очень вероятно придется самому с нуля писать dma для голого ядра pcie. Или посмотреть на работу dsmv. Вот с нуля делать и не хотелось. Разбираться с DS_DMA показалось очень сложным, решил на готовых ядрах собрать систему, счас надо думать, куда двигать дальше. Или дождаться что же xilinx предложит как альтернативу (xdma). Стоимость может оказаться невысокой или вообще бесплатной. Почти дождался - вчера слил, установил, посмотрел. Остался вопрос с мануалом на это чудо-ядро XDMA. Мне его давать не хотят, так что если кто помог бы с описанием ядра, был бы очень благодарен. В чем точно происходит затык в вашем случае было бы интересно выяснить. А может ли как-то система (драйвер) влиять на такую длительность появления BVALID? В ядре есть много способов выделения памяти, может я использую неправильный (пользуюсь kmalloc)? Мне пока нужно выжать с системы 10 Гбит/с. Можно наверное настроить мост на работу с PCIe Gen 3, пропускная способность должна будет возрасти. Тут только придётся подбирать более навороченную систему для работы с платой, мой рабочий ПК подойдёт, а вот тот, что будем использовать в проекте??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 30 11 октября, 2015 Опубликовано 11 октября, 2015 · Жалоба Приветствую! Для начала неплохо бы убедится что PCIe действительно работает в x4 Gen2, каков размер payload. А правильнее было бы на модели в симуляторе посмотреть что и как работает, какова скорость передачи и что и как тормозит передачу. И уж если на модели скорость будет ОК то только тогда разбирается на рабочей системе сравнивая с моделью что не так. Успехов! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 11 октября, 2015 Опубликовано 11 октября, 2015 · Жалоба Для начала неплохо бы убедится что PCIe действительно работает в x4 Gen2, каков размер payload. Настройки для моста стоят именно такие (см. рисунок). По поводу payload не понял, что это, такой опции там нет. Есть ещё вкладка (второй рисунок) с опциями для моста (можно выбирать 2/4/8), но с ней не разбирался, надо глянуть, за что оно отвечает. А правильнее было бы на модели в симуляторе посмотреть что и как работает, какова скорость передачи и что и как тормозит передачу. И уж если на модели скорость будет ОК то только тогда разбирается на рабочей системе сравнивая с моделью что не так. Не совсем представляю, как это всё проверять в симуляторе. Завтра думаю проверить как быстро DMA будет бросать данные в память FPGA, но тут наверное всё будет работать быстрее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться