|
Скорость обмена по PCI-Express, Хочу поделится достижениями |
|
|
|
Jun 18 2009, 16:24
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 13-03-07
Из: Ленинград
Пользователь №: 26 139

|
Какие процессы ещё были запущены в системе? Какие-то вычисления, запись на рэйд, передача по сети? Какие-то ещё устройства расширения стояли в машине?
|
|
|
|
|
Jun 19 2009, 09:48
|
Местный
  
Группа: Свой
Сообщений: 451
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284

|
Цитата(Eugenius @ Jun 18 2009, 20:24)  Какие процессы ещё были запущены в системе? Какие-то вычисления, запись на рэйд, передача по сети? Какие-то ещё устройства расширения стояли в машине? Плата формирует тестувую последовательность, в виде счётчика и его инверсного значения. Программа на компьютере эту последовательность проверяет. Проверка занимает много процессорного времени. Собственно сам ввод данных процессор не нагружает. Запись на диск не производится, это уже отдельная задача. Можно запускать обычные приложения, они на скорость не влияют.
|
|
|
|
|
Jun 23 2009, 08:08
|
Местный
  
Группа: Свой
Сообщений: 451
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284

|
Цитата(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.
|
|
|
|
|
Jun 23 2009, 09:27
|
Местный
  
Группа: Свой
Сообщений: 451
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284

|
Цитата(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.
|
|
|
|
|
Jun 23 2009, 10:08
|

Частый гость
 
Группа: Свой
Сообщений: 172
Регистрация: 17-03-05
Пользователь №: 3 422

|
PEX8648 поддерживает до 2 kB, далее у меня стоит Intel ICH7 I/OController (он же Root). У обоих по умолчанию 128. Maximum Payload Size > 128 делают вроде как только для серверных материнок. > Если они когда-нибуть увеличат его до 4096, то и скорость резко возрастёт. Несовсем так, если посмотреть график заисимости пропускной способности от размера пакета, то видно, что при увеличении размера пакета прирост в пропускной способности незначителен.
Эскизы прикрепленных изображений
|
|
|
|
|
Jun 23 2009, 10:18
|
Знающий
   
Группа: Свой
Сообщений: 693
Регистрация: 21-06-05
Из: Санкт-Петербург
Пользователь №: 6 184

|
Цитата Если они когда-нибуть увеличат его до 4096, то и скорость резко возрастёт. резко не возрастет, выше разница между 256 и 128 всего лишь 10%. а если сделать еще больше, выигрыш не значительный, а количество вентилей и блоков памяти в микросхеме резко возрастет. (в прикрепленном файле начиная со стр. 61)
|
|
|
|
|
Jun 23 2009, 13:48
|
Местный
  
Группа: Свой
Сообщений: 451
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284

|
Цитата ядро очень удобное в использовании. там готовые DMA, т. е. не требуется разбирать TLP пакеты. скорость добивались практически как в таблице приведено. сильно зависит от чипсетов и даже от установленной операционной системы. иногда от движения мышки Я тоже использую PLDA, ядро удобное. Скорости - в начале топика. От движения мышки никак не зависят, от чипсета не сильно. Для x4 на чипсете 975 - скорость в районе 530 МБайт/с, 965 и выше - 710-718 МБайт/с, на X58 - 760 МБайт/с Цитата(RKOB @ Jun 23 2009, 16:39)  Используем ядро Xilinx, тож вроде ничего.. Хотя выбора не было, что купил заказчик, то и ставим! На счет прерывания, у меня среднее время обработки прерывания примерно 10 мкс. Кто-нибудь пробовал на 64-битной ОСи померить пропускную способность? Будет ли она выше? Скорее всего скорость останется такой же. Никаких физических причин для увеличения скорости нет. Вот только объём памяти может быть больше 4 Гигов. Пока я могу заполнить только 1.5 ГБайта.
|
|
|
|
|
Jun 24 2009, 08:29
|
Знающий
   
Группа: Свой
Сообщений: 693
Регистрация: 21-06-05
Из: Санкт-Петербург
Пользователь №: 6 184

|
тогда вопросы следующие: Цитата Плата формирует тестувую последовательность, в виде счётчика и его инверсного значения. Программа на компьютере эту последовательность проверяет. Проверка занимает много процессорного времени. Собственно сам ввод данных процессор не нагружает. Ваш девайс слал непрерывный поток? тогда как прога все проверялось? или пакеты? тогда какого размера? на практике выделяется несколько буферов. в один закачиваются данные, в другом - обработка. так вот, во время переключения между буферами, в кеше проца остаются несохраненные данные. пока они не выгрузятся, к памяти нет доступа - вот одна из причин падения скорости. вот тут очень много зависит от сообразительности чипсета и работы кеша проца (разные показатели у интела и амд) другой фактор - сколько портов у памяти. если к-л процесс постоянно долбится к памяти, скорость обмена тоже резко упадет. вот тут и движение мышки будет влиять. есть еще некоторые ньюансы... убили на исследование пол года. а исследование идеальных систем - на видяхе статическая картинка, выключены все процессы (или они вращаются в L1) - это можно оставить для менеджеров для рекламы. это все можно посмотреть на сайтах у производителей.
|
|
|
|
|
Jun 24 2009, 10:32
|
Местный
  
Группа: Свой
Сообщений: 451
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284

|
Цитата(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, так что обращения процессора к памяти на скорость обмена тоже не влияют.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|