реклама на сайте
подробности

 
 
5 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Bus Master DMA для PCIe
doom13
сообщение Oct 8 2015, 19:17
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Приветствую.
Собрал систему (см. рисунок) для передачи данных по 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?
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
toshas
сообщение Oct 8 2015, 19:44
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 372
Регистрация: 14-02-06
Пользователь №: 14 339



Цитата(doom13 @ Oct 8 2015, 22:17) *
Кольцо дескрипторов ... выделяется в памяти ядра Linux.


Может в этом причина ? Посмотрите анализатором очередность транзакций на шине axi.
Go to the top of the page
 
+Quote Post
doom13
сообщение Oct 8 2015, 19:53
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(toshas @ Oct 8 2015, 22:44) *
Может в этом причина ? Посмотрите анализатором очередность транзакций на шине axi.

Тогда тормоза были бы только во время чтения очередного дескриптора (по завершению передачи пакета), а так DMA сбрасывает (часто) TREADY на AXI4-Stream в 0 во время передачи данных одного пакета (за дескриптором ему пока лезть не надо). Пакеты сделал максимального размера, который поддерживает генератор трафика (65536 слов * 64 бита).
Шину буду ковырять, но пока не успел.
Go to the top of the page
 
+Quote Post
toshas
сообщение Oct 9 2015, 04:27
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 372
Регистрация: 14-02-06
Пользователь №: 14 339



На сколько тактов сбрасывает ? Какими пачками идет вычитывание по axi ?
Посмотрите на готовность к передаче ядра pcie.
Go to the top of the page
 
+Quote Post
doom13
сообщение Oct 9 2015, 12:14
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



На AXI4-Stream между FIFO и DMA картина следующая:
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
toshas
сообщение Oct 9 2015, 12:26
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 372
Регистрация: 14-02-06
Пользователь №: 14 339



А что дальше, между dma и pcie ?
Я к тому, что ядро pcie дробит пакеты по max payload size и затык может быть там, в не готовности ядра pcie принимать новые данные от dma.
Go to the top of the page
 
+Quote Post
doom13
сообщение Oct 9 2015, 13:23
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



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

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

PSPS:
Тут, как понимаю, Slave (AXI Interconnect) выставил WREADY, а Master (DMA) ещё очень долго тупит. Получается, что все проблемы из-за DMA?
Или надо ещё смотреть и на BVALID?
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
doom13
сообщение Oct 10 2015, 10:34
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Засинхронизировал триггер по начальному адресу буфера (0х0000_0004_0720_0000) на который ссылается первый дескриптор в кольце. На рисунке сечение DMA-AXI Interconnect, для AXI Interconnect-PCIe Bridge диаграмма такая же.
Нужна помощь в анализе, что тут работает неправильно (медленно) и получится ли ускорить?
Если всё правильно понимаю, то WVALID ждёт подтверждения записи BVALID для второго burst-a и только потом устанавливается в 1. Как-то можно повлиять на более быстрое появления BVALID и, как следствие, на WVALID?
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
doom13
сообщение Oct 10 2015, 14:13
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Увеличил burst size для DMA до максимального 256, а вместе с этим увеличилось время от WLAST до BVALID. Что за ерунда?
Где тут увеличение производительности?
Время от WLAST до BVALID должно было остаться таким же, как и при значении burst 16??? Если нет, за счёт чего тут можно было получить увеличение производительности DMA???
Спасибо.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
toshas
сообщение Oct 10 2015, 19:22
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 372
Регистрация: 14-02-06
Пользователь №: 14 339



Можете в pcie-mm ядре встать анализатором на pipe интерфейс (tx и rx) ?
По pcie у вас только в теории пойдут пакеты 4кб, но в реальности они будут по 128, ну может 256 байт.
А на пакет (группу пакетов) необходимо дождаться ack от хоста и только потом разрешать перезаписывать буфер.
Go to the top of the page
 
+Quote Post
doom13
сообщение Oct 10 2015, 19:34
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(toshas @ Oct 10 2015, 22:22) *
Можете в pcie-mm ядре встать анализатором на pipe интерфейс (tx и rx) ?
По pcie у вас только в теории пойдут пакеты 4кб, но в реальности они будут по 128, ну может 256 байт.
А на пакет (группу пакетов) необходимо дождаться ack от хоста и только потом разрешать перезаписывать буфер.

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


Или, как вариант, выбрасывать DMA и мост и делать что-то своё для работы с голым ядром PCIe Gen3?
Go to the top of the page
 
+Quote Post
toshas
сообщение Oct 10 2015, 20:34
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 372
Регистрация: 14-02-06
Пользователь №: 14 339



Мне кажется pcie-mm всегда позиционировалось как удобное решение для микропроцессорной системы, не более того, при этом максимальной скорости он него никто и не требовал.
В чем точно происходит затык в вашем случае было бы интересно выяснить.
Однако для получения максимальных скоростей очень вероятно придется самому с нуля писать dma для голого ядра pcie.
Или посмотреть на работу dsmv.
Или купить решение от plda/nwlogic.
Или дождаться что же xilinx предложит как альтернативу (xdma). Стоимость может оказаться невысокой или вообще бесплатной.
Им нужно будет двигать свое решения для OpenCL, а для этого нужна цепь pcie-dma-mig(ddr). И xdma как раз призвано заполнить пробел.
Go to the top of the page
 
+Quote Post
doom13
сообщение Oct 10 2015, 21:23
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(toshas @ Oct 10 2015, 23:34) *
Мне кажется pcie-mm всегда позиционировалось как удобное решение для микропроцессорной системы, не более того, при этом максимальной скорости он него никто и не требовал.

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

Цитата(toshas @ Oct 10 2015, 23:34) *
Однако для получения максимальных скоростей очень вероятно придется самому с нуля писать dma для голого ядра pcie.
Или посмотреть на работу dsmv.

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

Цитата(toshas @ Oct 10 2015, 23:34) *
Или дождаться что же xilinx предложит как альтернативу (xdma). Стоимость может оказаться невысокой или вообще бесплатной.

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


Цитата(toshas @ Oct 10 2015, 23:34) *
В чем точно происходит затык в вашем случае было бы интересно выяснить.

А может ли как-то система (драйвер) влиять на такую длительность появления BVALID? В ядре есть много способов выделения памяти, может я использую неправильный (пользуюсь kmalloc)?
Мне пока нужно выжать с системы 10 Гбит/с. Можно наверное настроить мост на работу с PCIe Gen 3, пропускная способность должна будет возрасти. Тут только придётся подбирать более навороченную систему для работы с платой, мой рабочий ПК подойдёт, а вот тот, что будем использовать в проекте???
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Oct 11 2015, 12:20
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



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

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

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


Успехов! Rob.





Go to the top of the page
 
+Quote Post
doom13
сообщение Oct 11 2015, 20:19
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(RobFPGA @ Oct 11 2015, 15:20) *
Для начала неплохо бы убедится что PCIe действительно работает в x4 Gen2, каков размер payload.

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

Цитата(RobFPGA @ Oct 11 2015, 15:20) *
А правильнее было бы на модели в симуляторе посмотреть что и как работает, какова скорость передачи и что и как тормозит передачу. И уж если на модели скорость будет ОК то только тогда разбирается на рабочей системе сравнивая с моделью что не так.

Не совсем представляю, как это всё проверять в симуляторе. Завтра думаю проверить как быстро DMA будет бросать данные в память FPGA, но тут наверное всё будет работать быстрее.
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post

5 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th July 2025 - 01:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01484 секунд с 7
ELECTRONIX ©2004-2016