Можно ли писать на несколько устройств, которые используют разные линии PCIe в одном слоте PCIe?

Я пишу драйвер устройства Linux, который поддерживает несколько устройств. У меня есть карта x8 PCIe с 4 такими устройствами на ней. Каждый проходит через коммутатор PCIe и получает 2 полосы PCIe. Есть ли способ заставить драйвер писать на несколько полос одновременно? Если да, то как мне это сделать? Я бы подумал, что это должно быть возможно, так как все это находится в одном слоте PCIe, но я понятия не имею, как это можно сделать из драйвера.


person Chris    schedule 13.09.2012    source источник


Ответы (2)


Похоже, вы ищете многоадресную рассылку PCIe. Это не имеет никакого отношения к количеству дорожек, но будет просто функцией доставки одной записи в несколько пунктов назначения с максимальной эффективностью. Для этого существует стандарт, в основном предназначенный для использования на объединительной плате, см. http://www.pcisig.com/developers/main/training_materials/get_document?doc_id=12f5c260ccf5e054366d4c96ee655fa6827db5b3

Похоже, что это поддерживается новым типом PCI BAR, где несколько устройств будут иметь один и тот же отображаемый диапазон физических адресов, и коммутатор также будет настроен так, чтобы знать об этом диапазоне многоадресной рассылки. Но все это требует поддержки ОС, и я не нашел ничего в сети, чтобы предположить, что у Linux есть компоненты, необходимые для настройки устройств для всего этого.

Поскольку ваша родительская ссылка имеет достаточную пропускную способность для насыщения всех четырех дочерних ссылок, у вас нет проблем с пропускной способностью. Единственное, что можно сэкономить с многоадресной рассылкой, - это пропускная способность подсистемы памяти. Если бы у вас была современная архитектура, вы бы сэкономили на шуме.

Другими словами, не беспокойтесь об этом. Относитесь к своим устройствам как к независимым (в любом случае это сделает драйвер более чистым) и продолжайте свой проект.

person Peter    schedule 14.09.2012
comment
Что ж, у каждого устройства есть свои собственные 4 области BAR, которые отображаются отдельно, и я не уверен, что хотел бы изменить это, поскольку я не хотел бы, чтобы оно выполняло многоадресную передачу для каждой отдельной передачи. Но вы говорите, что когда я хочу писать на все 4 устройства, я мог бы просто писать на каждое отдельное устройство одно за другим вместо того, чтобы пытаться выполнять многоадресную рассылку на все 4 одновременно, потому что небольшое улучшение производительности незначительно. ? - person Chris; 14.09.2012
comment
Да, вот что я говорю. Просто напишите функцию с именем write_all_devices (), которая последовательно выполняет 4 записи, если вам нужен более чистый код. - person Peter; 15.09.2012
comment
Разве карта pcie (независимо от того, имеет ли она номер линии) не рассматривается как единое устройство? - person ransh; 31.01.2016

PCIe работает не совсем так, как вы думаете. Коммутатор не разделяет восходящий канал x8 на несколько каналов x2 - он просто перенаправляет трафик с одного канала на другой. Итак, вы увидите ссылку x8 на коммутатор, а затем 4 канала x2 от коммутатора к нижестоящим устройствам. Однако с другим коммутатором и другими устройствами нисходящего потока было бы равным образом возможно (например) иметь ссылки x8 повсюду, то есть канал x8 от корневого порта к коммутатору и ссылки x8 от коммутатора к нижестоящим устройствам.

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

person Roland    schedule 13.09.2012
comment
Думаю, я мог неправильно сформулировать ОП. Я знаю, что хост видит его как x8, а на другой стороне коммутатора есть ссылки x2 для каждого устройства, если посмотреть в документации коммутатора. Если ты это говоришь. Меня больше интересовало, как писать на все устройства одновременно, поскольку они отображаются как отдельные устройства. Что-то вроде многоадресной рассылки, как предложил Питер, но я полагаю, что это может даже не иметь достаточно большого улучшения, чтобы быть стоящим. - person Chris; 14.09.2012