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

PCI-E. Сколько DW данных в TLP пакете возможно без DMA?

В Virtex 5 с их ядром PCI-E (hard).

 

Проверил теоретическую скорость (без DMA, чтение всегда подтверждается на trn-интерфейсе).

Получилось не больше 70Мб/с - на запись. Но я все не могу найти ответ на вопрос - без поддержки DMA в плате возможно чтобы root complex (ПК) пересылал больше чем одно DW в пакете.

 

Пока получается на 3 DW заголовка 1 DW данных (приблизительно и соответсвуют 70Mб/c).

 

Возможно ли слать из ПК больше чем одно DW данных в пакете без поддержки DMA в целевой плате? (WinDriver, Чипсет G31)

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


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

Меня тоже очень интересует данный вопрос...

Балуюсь с софтовым ядром ксалинкса (endpoint v3.6) на Virtex-4.

Мне пока не удалось переслать более 1 dw данных с хоста...

Может у кого-нить имеется опыт работы с PCI-e ? Поделитесь, подскажите !

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


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

Мне пока не удалось переслать более 1 dw данных с хоста...

Может у кого-нить имеется опыт работы с PCI-e ? Поделитесь, подскажите !

 

Максимум, что я получил для Completer - это запись - 120Мбайт/с, чтение - 10Мбайт/с.

 

Максимально в этом режиме можно пересылать только два DWORD полезных данных в пакете в каждую сторону.

 

Больше DW только в режиме Reqester.

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


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

Можно попробовать использовать команды пересылки из расширений MMX/SSE, если речь идет о хосте x86 архитектуры. Сам не специалист по такого рода программированию, но было дело для пакетного обмена на высокой скорости через PCI заказчик использовал команды из этих расширений. При этом за одну транзакцию PCI пересылалось четыре слова. Как на эти команды отреагирует PCIe мост, сказать не могу. Кроме того, для PCI если обращения шли по последовательным адресам, то мост их "слепливал" в одну транзакцию шины.

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


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

Максимум, что я получил для Completer - это запись - 120Мбайт/с, чтение - 10Мбайт/с.

Это на скольки лейнах ?? Маловато будет!

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


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

Это на скольки лейнах ?? Маловато будет!

Это было для х8 с ядром Xilinx Block Plus и Windriver, режим - Completer (по аналогии с pci - target). Время оценивалось по выходу из пользовательской функции пересылки windriver'a.

Точно не проверял, но для х4 значения не сильно уменьшались.

Смотрел чипском на внутреннем интерфейсе ядра пакеты записи появлялись групами по 8 пакетов. Внутри группы была задержка в 3 такта частоты, между группой тактов 10. Как я уже писал в пакете было только 2 DW payload.

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


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

esli ya pravilno ponyal vopros, to eto zavisit ot kakoy request sdelayet processor, i zavisit konechno ot processora. AMD/Intel processori v principe ne mogut prosit bolshe odnogo cache line-a, eto 64byte-a, sto bez problem ukladivaetsya v odin pcie paket. esli ti smozes zastavit processor poprosit cache line iz memory mapped space-a na tvoyey pcie plate, to uvidis bolshoy payload.

 

Yesli processor prosit paru dword-ov, stolko i polucit. V chipset v principe ne kombiniruyetsa mnozestvo request-ov.

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


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

Максимум, что я получил для Completer - это запись - 120Мбайт/с, чтение - 10Мбайт/с.

 

Максимально в этом режиме можно пересылать только два DWORD полезных данных в пакете в каждую сторону.

 

Больше DW только в режиме Reqester.

А какой приоритет TC использовали в пакете ?

Сюдя по невысокой скорости чтения , стояло по умолчанию TC0

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


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

А какой приоритет TC использовали в пакете ?

Сюдя по невысокой скорости чтения , стояло по умолчанию TC0

да xilinx ядра только TC0 и разрешают

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


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

Обычно используем DMA и скорость записи/чтения в режиме completer не замеряли.

Но недавно полез с чипскопом в pci-ный модуль и заметил следующее.

 

Раньше, на старых материнских платах, начиная с P4 до Core2Duo под Win2k/2003Server, обмен процессора с девайсом производился всегда строго по одному слову (4 байта). Правда, программную часть толком не копали.

 

На современных же системах: Core i7/Win7 обмен идёт уже блоками по 16 слов (64 байта). Встречаются транзакции и меньшей длины, но основной поток всё же 16DW.

 

И ещё один момент. Есть такое мнение, существенный вклад тут и чипсета. В системе на i7 ещё под Win2003 наблюдались пересылки по 2-3-4DW. Вероятно, хост-контроллер сам уже умеет склеивать последовательные транзакции.

Изменено пользователем Eugenius

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


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

да xilinx ядра только TC0 и разрешают

обойти это нельзя никак ?

 

 

На современных же системах: Core i7/Win7 обмен идёт уже блоками по 16 слов (64 байта). Встречаются транзакции и меньшей длины, но основной поток всё же 16DW.

Вы хотите сказать, что макс пакет данных 16DW ? А как же стандарт со своими 1024DW , как это реализовать ?

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


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

обойти это нельзя никак ?

 

 

 

Вы хотите сказать, что макс пакет данных 16DW ? А как же стандарт со своими 1024DW , как это реализовать ?

зайдите на intensys.com, посмотрите как сделано, там есть исходники для windriver

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


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

Вы хотите сказать, что макс пакет данных 16DW ? А как же стандарт со своими 1024DW , как это реализовать ?

Это вопрос реализации обмена процессора с системными устройствами. Тут уж Intel/Microsoft как хотят, так и поступают. Можно лишь оценивать эффективность решения.

 

Вот ограничения чипсета на длину пакета (128/256 байт), когда устройсто в режиме DMA при всём желании не может передавать больши блоки данных - это, действительно, не полная поддержка стандарта PCI-E.

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


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

зайдите на intensys.com, посмотрите как сделано, там есть исходники для windriver

спасибо, разбираемся.

Пока никак не могу понять, зачем они используют прерывания.

 

Это вопрос реализации обмена процессора с системными устройствами. Тут уж Intel/Microsoft как хотят, так и поступают. Можно лишь оценивать эффективность решения.

понятно. попробуем на низком уровне подцепится к pcie, без windriver

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


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

спасибо, разбираемся.

Пока никак не могу понять, зачем они используют прерывания.

 

 

понятно. попробуем на низком уровне подцепится к pcie, без windriver

прерывания используются для сигнализации об окончании обмена. А какая у Вас плис?

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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