Прямая связь между двумя устройствами PCI - PullRequest
7 голосов
/ 13 мая 2010

У меня есть карта NIC и жесткий диск, оба подключены к слотам PCIe на компьютере с Linux. В идеале я хотел бы направлять входящие пакеты на жесткий диск, не задействуя ЦП или минимально задействуя его. Можно ли так настроить прямую связь по шине PCI? У кого-нибудь есть указания относительно того, что нужно прочитать, чтобы начать работу над таким проектом?

Спасибо всем.

Ответы [ 2 ]

8 голосов
/ 02 августа 2012

Не уверен, если вы спрашиваете о PCI или PCIe. Вы использовали оба термина, и ответ у каждого разный.

Если вы говорите о устаревшей шине PCI: Ответ - «да». Board to board DMA выполнимо. Например, платы видеозахвата могут записывать видеокадры DMA непосредственно в память вашей видеокарты.

В вашем примере видеокарта может напрямую подключаться к запоминающему устройству. Однако данные будут довольно «необработанными». Например, ваша сетевая карта не имеет понятия о файловой системе. Вам также необходимо убедиться, что вы можете запрограммировать механизм DMA сетевого адаптера, чтобы он находился в пределах регистров контроллера SATA. Вы не хотите уходить с конца бара!

Если вы говорите о современной шине PCIe: Ответ "обычно нет, но это зависит". Транзакции между одноранговыми шинами - забавная вещь в спецификации PCI Express. Корневые сложные устройства не обязаны поддерживать его.

В моем тестировании одноранговый DMA будет работать, если ваши устройства находятся за PCIe-коммутатором (напрямую не подключенным к материнской плате). Однако если ваши устройства подключены напрямую к чипсету (Root Complex), одноранговый DMA не будет работать, за исключением некоторых особых случаев . Наиболее заметным частным случаем будет пример захвата видео, который я упоминал ранее. Особые случаи упомянуты в спецификациях чипсета.

Мы проверили одноранговый PCIe DMA с несколькими различными чипсетами Intel и AMD и обнаружили согласованное поведение. Хотя не тестировал последние поколения чипсетов. (Мы обсуждали отсутствие одноранговой поддержки PCIe DMA с Intel, не будучи уверенными в том, что наши отзывы повлияли на их технический отдел.)

2 голосов
/ 01 июля 2012

Предполагая, что и плата NIC, и жесткий диск являются конечными точками (или устаревшими конечными точками), вы не можете направлять трафик без привлечения корневого комплекса (ЦП).

PCIe, в отличие от PCI или PCI-X, является не шиной, а каналом связи, поэтому любая транзакция с устройства Endpoint (скажем, NIC) должна проходить через Root Complex (CPU), чтобы попасть в другую ветвь (HDD).

...