Jump to content

    
Sign in to follow this  
LV26

PCI Express Peer-to-peer.

Recommended Posts

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

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

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

 

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

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

 

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

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

 

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

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

Share this post


Link to post
Share on other sites
Приветствую.

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

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 и прочего

Share this post


Link to post
Share on other sites

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

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

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

 

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

Share this post


Link to post
Share on other sites
б) данные гонятся из EndPoint в EndPoint, но через root

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

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

 

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

 

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

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

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

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

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

Share this post


Link to post
Share on other sites

Привет.

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

Share this post


Link to post
Share on other sites
Привет.

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

 

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

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

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

 

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this