Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Скорость обмена по PCI-Express
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > ISA/PCI/PCI-X/PCI Express
dsmv
Если кому интересно, то вот результаты измерения скорости обмена по PCI-Express

плата AMBPEX8, PCI-Express x4:
ввод данных в компьютер: 714 МБайт/с
вывод данных из компьютера: 518 МБайт/с

плата ADP201x1, PCI-Express x8:
ввод данных в компьютер: 1429 МБайт/с
вывод данных из компьютера: 754 МБайт/с

На компьютере выделяется блок памяти 1536 МБайт, скорость измеряется на длительном промежутке (до нескольких часов)
Системная плата: P5Q-E
Chipset P45
Eugenius
Какие процессы ещё были запущены в системе? Какие-то вычисления, запись на рэйд, передача по сети?
Какие-то ещё устройства расширения стояли в машине?
dsmv
Цитата(Eugenius @ Jun 18 2009, 20:24) *
Какие процессы ещё были запущены в системе? Какие-то вычисления, запись на рэйд, передача по сети?
Какие-то ещё устройства расширения стояли в машине?

Плата формирует тестувую последовательность, в виде счётчика и его инверсного значения. Программа на компьютере эту последовательность проверяет.
Проверка занимает много процессорного времени. Собственно сам ввод данных процессор не нагружает.
Запись на диск не производится, это уже отдельная задача.
Можно запускать обычные приложения, они на скорость не влияют.
RKOB
Не плохие результаты, поздравляю!
Пакеты какой максимальной длины удалось передать? И как боролись с перестановкой пакетов при чтении из хоста?
У меня похуже будет (на х4): запись в хост - 355 МБ/с, чтение из хоста - 325 МБ/с (пакеты по 64 Байта).
Материнка собственной разработки, процессорный модуль стандарта COM-Express, ОС Linux, конечное устройство на Virtex-4FX XMC-module.
Кстати между двумя устройствами скорости лучше: запись - 762, чтение - 634 (пакеты по 128 Байт).
dsmv
Цитата(RKOB @ Jun 22 2009, 15:30) *
Не плохие результаты, поздравляю!
Пакеты какой максимальной длины удалось передать? И как боролись с перестановкой пакетов при чтении из хоста?
У меня похуже будет (на х4): запись в хост - 355 МБ/с, чтение из хоста - 325 МБ/с (пакеты по 64 Байта).
Материнка собственной разработки, процессорный модуль стандарта COM-Express, ОС Linux, конечное устройство на Virtex-4FX XMC-module.
Кстати между двумя устройствами скорости лучше: запись - 762, чтение - 634 (пакеты по 128 Байт).


Спасибо, у Вас тоже отлично.

Пакеты 4096 байт, они конечно потом делятся на пакеты в соответствии с Payload=128 Байт. При чтении данные помещаются в память размером 4096 байт в соответствии со своим адресом, так что пакеты могут передаваться в любом порядке в пределах блока 4096 байт. После заполения всего блока он передаётся в FIFO.
RKOB
>Пакеты могут передаваться в любом порядке
Это утверждение верно для х4, а для х1 они передаются в правильном порядке! (как ни странно). А на счет связки BRAM -> FIFO, мне тож надо так сделать, пока у меня сразу пишется в FIFO. Спасибо!
У меня switch PEX8648 не пропускает пакеты более 128 Байт при Write Memory. Никак не могу побороть его! Пробовал настраивать свитч (установил регистры Maximum Payload Size = 512 прошивкой EEPROM) пока не помогло. Может знаете в чем причина?
Вот еще одна странная штука: при записи (устройство пишет) по 64 Байта скорость передачи 380 МБ/с, а вот при записи по 128 Байт - 370 МБ/с. В чем дело не могу понять?!? А в остальном работаем так же - блоками по 4 кБ.
dsmv
Цитата(RKOB @ Jun 23 2009, 12:33) *
>Пакеты могут передаваться в любом порядке
Это утверждение верно для х4, а для х1 они передаются в правильном порядке! (как ни странно). А на счет связки BRAM -> FIFO, мне тож надо так сделать, пока у меня сразу пишется в FIFO. Спасибо!
У меня switch PEX8648 не пропускает пакеты более 128 Байт при Write Memory. Никак не могу побороть его! Пробовал настраивать свитч (установил регистры Maximum Payload Size = 512 прошивкой EEPROM) пока не помогло. Может знаете в чем причина?
Вот еще одна странная штука: при записи (устройство пишет) по 64 Байта скорость передачи 380 МБ/с, а вот при записи по 128 Байт - 370 МБ/с. В чем дело не могу понять?!? А в остальном работаем так же - блоками по 4 кБ.


Насколько я понимаю, параметр PAYLOAD должен быть одинаковым во всей цепочке. Его настраивает BIOS в момент обнаружения устройств. Пока я встречал только компьютеры у которых PAYLOAD=128 и 256.
У PEX8648 какой может быть PAYLOAD ? Если она и может поддерживать больше чем 128 а компьютер поддерживает только 128, то и работать будет только 128. А вообще говоря в PCI-Express заложен огромный потенциал. Если они когда-нибуть увеличат его до 4096, то и скорость резко возрастёт.


У меня в итоге всё делится на 128 байт для команды Write Memory.
RKOB
PEX8648 поддерживает до 2 kB, далее у меня стоит Intel ICH7 I/OController (он же Root). У обоих по умолчанию 128.
Maximum Payload Size > 128 делают вроде как только для серверных материнок.
> Если они когда-нибуть увеличат его до 4096, то и скорость резко возрастёт.
Несовсем так, если посмотреть график заисимости пропускной способности от размера пакета, то видно, что при увеличении размера пакета прирост в пропускной способности незначителен.
bav
Цитата
Если они когда-нибуть увеличат его до 4096, то и скорость резко возрастёт.

резко не возрастет, выше разница между 256 и 128 всего лишь 10%. а если сделать еще больше, выигрыш не значительный, а количество вентилей и блоков памяти в микросхеме резко возрастет.

(в прикрепленном файле начиная со стр. 61)
RKOB
Согласен с bav. Поэтому все разработчики (изготовители) микросхем PCI Express по умолчанию Max Payload Size устанавливают 128. Да и на рисунке (из даташита PLX8648) это очень хорошо видно.
To bav: как Вам контроллер от PLDA? каких скоростей удалось достичь?
bav
ядро очень удобное в использовании. там готовые DMA, т. е. не требуется разбирать TLP пакеты.
скорость добивались практически как в таблице приведено. сильно зависит от чипсетов и даже от установленной операционной системы. иногда от движения мышки smile.gif - вероятно, операционка постоянно перехватывает ресурсы памяти.
еще была проблема с временем отклика на прерывание: на одних чипсетах десятки мкс, на некоторых десятки мс sad.gif
RKOB
Используем ядро Xilinx, тож вроде ничего.. Хотя выбора не было, что купил заказчик, то и ставим!
На счет прерывания, у меня среднее время обработки прерывания примерно 10 мкс.
Кто-нибудь пробовал на 64-битной ОСи померить пропускную способность? Будет ли она выше?
dsmv
Цитата
ядро очень удобное в использовании. там готовые DMA, т. е. не требуется разбирать TLP пакеты.
скорость добивались практически как в таблице приведено. сильно зависит от чипсетов и даже от установленной операционной системы. иногда от движения мышки

Я тоже использую PLDA, ядро удобное. Скорости - в начале топика. От движения мышки никак не зависят, от чипсета не сильно.
Для x4 на чипсете 975 - скорость в районе 530 МБайт/с, 965 и выше - 710-718 МБайт/с, на X58 - 760 МБайт/с

Цитата(RKOB @ Jun 23 2009, 16:39) *
Используем ядро Xilinx, тож вроде ничего.. Хотя выбора не было, что купил заказчик, то и ставим!
На счет прерывания, у меня среднее время обработки прерывания примерно 10 мкс.
Кто-нибудь пробовал на 64-битной ОСи померить пропускную способность? Будет ли она выше?

Скорее всего скорость останется такой же. Никаких физических причин для увеличения скорости нет. Вот только объём памяти может быть больше 4 Гигов. Пока я могу заполнить только 1.5 ГБайта.
bav
тогда вопросы следующие:
Цитата
Плата формирует тестувую последовательность, в виде счётчика и его инверсного значения. Программа на компьютере эту последовательность проверяет.
Проверка занимает много процессорного времени. Собственно сам ввод данных процессор не нагружает.

Ваш девайс слал непрерывный поток? тогда как прога все проверялось? или пакеты? тогда какого размера?
на практике выделяется несколько буферов. в один закачиваются данные, в другом - обработка. так вот, во время переключения между буферами, в кеше проца остаются несохраненные данные. пока они не выгрузятся, к памяти нет доступа - вот одна из причин падения скорости. вот тут очень много зависит от сообразительности чипсета и работы кеша проца (разные показатели у интела и амд)
другой фактор - сколько портов у памяти. если к-л процесс постоянно долбится к памяти, скорость обмена тоже резко упадет. вот тут и движение мышки будет влиять.
есть еще некоторые ньюансы... убили на исследование пол года.
а исследование идеальных систем - на видяхе статическая картинка, выключены все процессы (или они вращаются в L1) - это можно оставить для менеджеров для рекламы. это все можно посмотреть на сайтах у производителей.
dsmv
Цитата(bav @ Jun 24 2009, 12:29) *
тогда вопросы следующие:
Ваш девайс слал непрерывный поток? тогда как прога все проверялось? или пакеты? тогда какого размера?
на практике выделяется несколько буферов. в один закачиваются данные, в другом - обработка. так вот, во время переключения между буферами, в кеше проца остаются несохраненные данные. пока они не выгрузятся, к памяти нет доступа - вот одна из причин падения скорости. вот тут очень много зависит от сообразительности чипсета и работы кеша проца (разные показатели у интела и амд)
другой фактор - сколько портов у памяти. если к-л процесс постоянно долбится к памяти, скорость обмена тоже резко упадет. вот тут и движение мышки будет влиять.
есть еще некоторые ньюансы... убили на исследование пол года.
а исследование идеальных систем - на видяхе статическая картинка, выключены все процессы (или они вращаются в L1) - это можно оставить для менеджеров для рекламы. это все можно посмотреть на сайтах у производителей.


На нашей фирме накоплен уже большой опыт по быстрой передачи данных. Например для шины PCI 33 МГц, 32 бита типичная скорость передачи 110 МБайт/с, рекорд 129 МБайт/с. Это с использованием микросхем фирмы PLX PCI9056, PCI9656; Естественно эта скорость достигается только в режиме DMA. Причём DMA работает в режиме автоинициализации. Режим автоинициализации или SCATER-GATER, это когда в памяти задаётся цепочка декскрипторов и канал DMA считывает очередной дескриптор, определяет из него размер и адрес блока а также адрес следующего дескриптора. После передачи блока канал DMA считывает следующий дескриптор и т.д. Процессор в этом обмене вообще не задействуется. Точнее через прерывание он получает информацию о заполненных блоках.

Для PCI-Express я сделал подобный механизм. У меня выделяется 32 блока по 48 МБайт - т.е. 1536 МБайт. Плата формирует тестувую последовательность и её передаёт. Программа принимает и проверяет каждый блок. Всё это происходит непрерывно в течении многих часов. Это проверено. Вот например сейчас тест работает 213 минут, запущено два канала DMA - один на ввод, другой на вывод. Средняя скорость ввода 496 МБайт/с, вывода - тоже 496 МБайт/с. Движения мышки ну никак не влияют :-)

Пропускная способность памяти на порядок превосходит скорость обмена по PCI-Express, так что обращения процессора к памяти на скорость обмена тоже не влияют.
bav
Цитата
Процессор в этом обмене вообще не задействуется.

в обмене через DMA процессор не задействован по определению. но, если проц в это время считывает данные с памяти, то пропускная способность падает - причем, виноват не сам PCIe, а пропускная способность самой памяти.
Цитата
Пропускная способность памяти на порядок превосходит скорость обмена по PCI-Express

ну да, особенно если стоят две платы с CUDA, плюс плата ввода-вывода данных и запущен процесс обработки...

попробую другими словами: если комп не загруже обработкой, т.е. память свободна, то скорости обмена получаются близкие к заявленным.
dsmv
Цитата(bav @ Jun 24 2009, 17:31) *
в обмене через DMA процессор не задействован по определению. но, если проц в это время считывает данные с памяти, то пропускная способность падает - причем, виноват не сам PCIe, а пропускная способность самой памяти.

ну да, особенно если стоят две платы с CUDA, плюс плата ввода-вывода данных и запущен процесс обработки...

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


Две CUDA это круто.
Но если посчитать:
Скорость обмена CUDA по PCI-Express 2.0 x16 - 4.5 ГБайта/с
Две CUDA + ADP201x1 = 4.5 *2 + 1.4 = 10.4 ГБайта/с
Это почти полная пропускная способноть DDR3 - 1066

В такой системе конечно встанет вопрос об оптимизации процессов вычисления и ввода-вывода. Но если до таких цифр не доходить, то поток в 1.4 Гбайта/с на процессе обработки и доступе процессора к памяти не сказывается. Кстати у нас решалась задача ввода данных и обработки в реальном времени на процессоре и CUDA. Исходный поток 500 МБайт/с, процессор и CUDA могли обработать только одну четвёртую часть от него.

Насчёт CUDA есть ещё мысль, хочется напрямую передавать поток данных с ADP201x1 в CUDA, минуя память, а с неё уже результат. Но до этого ещё не дошли.
bav
Цитата
В такой системе конечно встанет вопрос об оптимизации процессов вычисления и ввода-вывода.

вот над этим и страдает наш программист smile.gif
а пробускная способность PCIe в основном соответствует спецификации и приведенным данным. однин раз столкнулся когда пакеты терялись (плата подключалась через самодельный удлинитель), тогда скорость упала почти вдвое.
Цитата
Насчёт CUDA есть ещё мысль, хочется напрямую передавать поток данных с ADP201x1 в CUDA, минуя память, а с неё уже результат. Но до этого ещё не дошли.

у нас такаяже мечта... причем хотелось бы вообще без компа.
Bios71
Цитата(dsmv @ Jun 23 2009, 12:27) *
Насколько я понимаю, параметр PAYLOAD должен быть одинаковым во всей цепочке. Его настраивает BIOS в момент обнаружения устройств. Пока я встречал только компьютеры у которых PAYLOAD=128 и 256.
У PEX8648 какой может быть PAYLOAD ? Если она и может поддерживать больше чем 128 а компьютер поддерживает только 128, то и работать будет только 128. А вообще говоря в PCI-Express заложен огромный потенциал. Если они когда-нибуть увеличат его до 4096, то и скорость резко возрастёт.


У меня в итоге всё делится на 128 байт для команды Write Memory.


БИОС настраивает исходя из даташита - а он пишет:

20.1.25 DCAP—Device Capabilities Register
(PCI Express—D28:F0/F1/F2/F3/F4/F5)
Address Offset: 44h–47h Attribute: RO

Bit[2:0] Max Payload Size Supported (MPS) — RO. Indicates the maximum payload size
supported is 128B.

т.е. ICH8/9 поддерживает PCIe X1/X4 ТОЛЬКО 128
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.