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

PCI Express Peer-to-peer.

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

Как "широко известно в узких кругах" :)

PCIe допускает 2 модели использования a) HOST-centric и б) Peer-to-Peer.

 

Если с вариантом a) (весь траффик гоняется через root-complex в HOST CPU) все как-бы прозрачно и понятно?

то с вариантом б) (устройства на PCIe обмениваются без вмешательства и загрузки хоста) не все так гладко, как мне кажется.

 

Есть у кого опыт реализации P2P на PCI Express? С какими сложностями столкнулись? По всей видимости,

основная заморочка будет с драйверами под это дело.

 

Зачем мне это надо? Есть задача в которой надо как можно быстрее получать данные с одного PCIe устройства и записывать в другое.

Обработки никакой нет. Вот показалось, что P2P даст максимальную скорость.

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


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

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

Как "широко известно в узких кругах" :)

PCIe допускает 2 модели использования a) HOST-centric и б) Peer-to-Peer.

 

Если с вариантом a) (весь траффик гоняется через root-complex в HOST CPU) все как-бы прозрачно и понятно?

то с вариантом б) (устройства на PCIe обмениваются без вмешательства и загрузки хоста) не все так гладко, как мне кажется.

 

Есть у кого опыт реализации P2P на PCI Express? С какими сложностями столкнулись? По всей видимости,

основная заморочка будет с драйверами под это дело.

 

Зачем мне это надо? Есть задача в которой надо как можно быстрее получать данные с одного PCIe устройства и записывать в другое.

Обработки никакой нет. Вот показалось, что P2P даст максимальную скорость.

Я так понимаю, две модели, это - процессорный ввод/вывод и использование dma? )

На модели процессорный ввод/вывод вообще ни о чем, скорость ниже плинтуса, так что дма обязательно. Другое дело, куда его вставлять? Разные конторы делают по разному: одни встравивают dma контроллер в RC, другие на внутреннюю шину, на которой RC сидит вместе с другими системными устройствами (к примеру, dram контроллер). Второй вариант мне кажется предпочтительнее, поскольку он более универсален, да и RC может быть не единственным в системе (часто делают несколько штук из связки RC-RP, вместо того чтобы сделать один RC с несколькими RP).

В общем, в любом случае, использование DMA обязательно. Процессорной ввод/вывод нужен только для CFG, PM/MSG и прочего

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


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

б) данные гонятся из EndPoint в EndPoint, но через root

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

это если ОС позволит

 

вообще без root, имхо, невозможно

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


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

б) данные гонятся из EndPoint в EndPoint, но через root

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

это если ОС позволит

 

вообще без root, имхо, невозможно

 

Естественно без рута это не получится.

Должен же кто-то настраивать эндпойнты.

А они потом между собой гоняют данные минуя хост.

DMA реализованное в свичах тоже бывает, например в некоторых PLX.

Можно применять его для p2p также.

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


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

Привет.

Мы сейчас как раз прорабатываем такую задачу. У нас будет хост и несколько плат на FPGA с PCIe. Некоторые платы на Spartan-6 будут собирать аналоговые данные и отправлять их в одну большую Virtex-6 ПЛИСину для ЦОС обработки. Время реакции является критичным, поэтому все хотим делать Peer-to-peer. PCIe эндпоинты мы настроили на крест-накрест. В итоге пока добились, что Spartan-6 самостоятельно запихивает данные в память Virtex-6 с весьма высокой скоростью и, вроде как - напрямую, но задержка составляет около 1700нс. Хотим сделать быстрее, но пока не понятно где задержка происходит. Свичи - IDT.

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


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

Привет.

Мы сейчас как раз прорабатываем такую задачу. У нас будет хост и несколько плат на FPGA с PCIe. Некоторые платы на Spartan-6 будут собирать аналоговые данные и отправлять их в одну большую Virtex-6 ПЛИСину для ЦОС обработки. Время реакции является критичным, поэтому все хотим делать Peer-to-peer. PCIe эндпоинты мы настроили на крест-накрест. В итоге пока добились, что Spartan-6 самостоятельно запихивает данные в память Virtex-6 с весьма высокой скоростью и, вроде как - напрямую, но задержка составляет около 1700нс. Хотим сделать быстрее, но пока не понятно где задержка происходит. Свичи - IDT.

 

Да как-то долго выходит.

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

Или все таки не P2P....

 

Или удалось побороть?

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


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

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

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

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

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

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

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

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

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

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