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

Приветствую.

Собрал систему (см. рисунок) для передачи данных по 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?

post-63539-1444330218_thumb.jpg

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


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

Кольцо дескрипторов ... выделяется в памяти ядра Linux.

 

Может в этом причина ? Посмотрите анализатором очередность транзакций на шине axi.

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


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

Может в этом причина ? Посмотрите анализатором очередность транзакций на шине axi.

Тогда тормоза были бы только во время чтения очередного дескриптора (по завершению передачи пакета), а так DMA сбрасывает (часто) TREADY на AXI4-Stream в 0 во время передачи данных одного пакета (за дескриптором ему пока лезть не надо). Пакеты сделал максимального размера, который поддерживает генератор трафика (65536 слов * 64 бита).

Шину буду ковырять, но пока не успел.

 

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


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

На сколько тактов сбрасывает ? Какими пачками идет вычитывание по axi ?

Посмотрите на готовность к передаче ядра pcie.

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


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

А что дальше, между dma и pcie ?

Я к тому, что ядро pcie дробит пакеты по max payload size и затык может быть там, в не готовности ядра pcie принимать новые данные от dma.

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


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

На AXI4 между DMA и AXI Interconnect вот такая штука (тут даже не пойму на какой из сигналов настроить триггер):

 

PS:

Триггер настроен на TLAST для AXI4-Stream (FIFO->DMA).

 

PSPS:

Тут, как понимаю, Slave (AXI Interconnect) выставил WREADY, а Master (DMA) ещё очень долго тупит. Получается, что все проблемы из-за DMA?

Или надо ещё смотреть и на BVALID?

post-63539-1444394933_thumb.png

post-63539-1444394938_thumb.png

post-63539-1444395674_thumb.png

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


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

Засинхронизировал триггер по начальному адресу буфера (0х0000_0004_0720_0000) на который ссылается первый дескриптор в кольце. На рисунке сечение DMA-AXI Interconnect, для AXI Interconnect-PCIe Bridge диаграмма такая же.

Нужна помощь в анализе, что тут работает неправильно (медленно) и получится ли ускорить?

Если всё правильно понимаю, то WVALID ждёт подтверждения записи BVALID для второго burst-a и только потом устанавливается в 1. Как-то можно повлиять на более быстрое появления BVALID и, как следствие, на WVALID?

post-63539-1444473281_thumb.png

post-63539-1444473287_thumb.png

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


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

Увеличил burst size для DMA до максимального 256, а вместе с этим увеличилось время от WLAST до BVALID. Что за ерунда?

Где тут увеличение производительности?

Время от WLAST до BVALID должно было остаться таким же, как и при значении burst 16??? Если нет, за счёт чего тут можно было получить увеличение производительности DMA???

Спасибо.

post-63539-1444486398_thumb.png

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


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

Можете в pcie-mm ядре встать анализатором на pipe интерфейс (tx и rx) ?

По pcie у вас только в теории пойдут пакеты 4кб, но в реальности они будут по 128, ну может 256 байт.

А на пакет (группу пакетов) необходимо дождаться ack от хоста и только потом разрешать перезаписывать буфер.

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


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

Можете в pcie-mm ядре встать анализатором на pipe интерфейс (tx и rx) ?

По pcie у вас только в теории пойдут пакеты 4кб, но в реальности они будут по 128, ну может 256 байт.

А на пакет (группу пакетов) необходимо дождаться ack от хоста и только потом разрешать перезаписывать буфер.

Т.е. я не смогу раскачать DMA более полученных 6 Гбит/с? Нужно ставить Gen3 (сейчас стоит настройка для Gen 2) увеличивать размер шины данных до 128/256 бит? Только тогда можно будет превысить потолок в 6 Гбит/с?

 

 

Или, как вариант, выбрасывать DMA и мост и делать что-то своё для работы с голым ядром PCIe Gen3?

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


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

Мне кажется pcie-mm всегда позиционировалось как удобное решение для микропроцессорной системы, не более того, при этом максимальной скорости он него никто и не требовал.

В чем точно происходит затык в вашем случае было бы интересно выяснить.

Однако для получения максимальных скоростей очень вероятно придется самому с нуля писать dma для голого ядра pcie.

Или посмотреть на работу dsmv.

Или купить решение от plda/nwlogic.

Или дождаться что же xilinx предложит как альтернативу (xdma). Стоимость может оказаться невысокой или вообще бесплатной.

Им нужно будет двигать свое решения для OpenCL, а для этого нужна цепь pcie-dma-mig(ddr). И xdma как раз призвано заполнить пробел.

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


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

Мне кажется pcie-mm всегда позиционировалось как удобное решение для микропроцессорной системы, не более того, при этом максимальной скорости он него никто и не требовал.

А я думал это ядро и есть самое то, что Xilinx предлагает для работы с PCIe, а оно вот как оказывается :(

 

Однако для получения максимальных скоростей очень вероятно придется самому с нуля писать dma для голого ядра pcie.

Или посмотреть на работу dsmv.

Вот с нуля делать и не хотелось. Разбираться с DS_DMA показалось очень сложным, решил на готовых ядрах собрать систему, счас надо думать, куда двигать дальше.

 

Или дождаться что же xilinx предложит как альтернативу (xdma). Стоимость может оказаться невысокой или вообще бесплатной.

Почти дождался - вчера слил, установил, посмотрел. Остался вопрос с мануалом на это чудо-ядро XDMA. Мне его давать не хотят, так что если кто помог бы с описанием ядра, был бы очень благодарен.

 

 

В чем точно происходит затык в вашем случае было бы интересно выяснить.

А может ли как-то система (драйвер) влиять на такую длительность появления BVALID? В ядре есть много способов выделения памяти, может я использую неправильный (пользуюсь kmalloc)?

Мне пока нужно выжать с системы 10 Гбит/с. Можно наверное настроить мост на работу с PCIe Gen 3, пропускная способность должна будет возрасти. Тут только придётся подбирать более навороченную систему для работы с платой, мой рабочий ПК подойдёт, а вот тот, что будем использовать в проекте???

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


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

Приветствую!

 

Для начала неплохо бы убедится что PCIe действительно работает в x4 Gen2, каков размер payload.

 

А правильнее было бы на модели в симуляторе посмотреть что и как работает, какова скорость передачи и что и как тормозит передачу. И уж если на модели скорость будет ОК то только тогда разбирается на рабочей системе сравнивая с моделью что не так.

 

 

Успехов! Rob.

 

 

 

 

 

 

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


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

Для начала неплохо бы убедится что PCIe действительно работает в x4 Gen2, каков размер payload.

Настройки для моста стоят именно такие (см. рисунок). По поводу payload не понял, что это, такой опции там нет. Есть ещё вкладка (второй рисунок) с опциями для моста (можно выбирать 2/4/8), но с ней не разбирался, надо глянуть, за что оно отвечает.

 

А правильнее было бы на модели в симуляторе посмотреть что и как работает, какова скорость передачи и что и как тормозит передачу. И уж если на модели скорость будет ОК то только тогда разбирается на рабочей системе сравнивая с моделью что не так.

Не совсем представляю, как это всё проверять в симуляторе. Завтра думаю проверить как быстро DMA будет бросать данные в память FPGA, но тут наверное всё будет работать быстрее.

post-63539-1444594938_thumb.jpg

post-63539-1444594944_thumb.jpg

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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