Как осуществляется управление линиями на контроллере PCIe 3.0, встроенном в новейшие процессоры Xeon?

Я использую несколько карт расширения PCIe 3.0 (графические процессоры и межсоединения Infiniband). Мне интересно, как на самом деле управляются полосы и могу ли я оптимизировать свои устройства, изменив порты или используя некоторые адаптеры (16x -> 8x). Intel Haswell-EP может управлять 40 линиями PCIe 3.0. На схемах Intel контроллер PCIe 3.0 кажется разделенным на два субмоста x16 и один субмост x8.

На некоторых коммерческих схемах процессора Haswell-EP можно прочитать:

До 40 линий PCIe Gen3 2x16 + 1x8 до 3x8 Graphics.

Все ли устройства подключены к основному мосту PCIe (и количество линий автоматически согласовывается для каждого устройства), или материнская плата подключает устройства напрямую к одному из предположительно 3 вспомогательных мостов 16x, 16x и 8x (количество полос затем согласовывается для каждого из этих подмостов)?

У меня нет прямого доступа к материнской плате, чтобы посмотреть, как подключены устройства, но я подозреваю, что линии якобы 8-кратного подмоста не используются. Кроме того, я хотел бы знать, смогу ли я, используя адаптер с 16x на 8x, использовать больше линий и увеличить общую пропускную способность PCIe (даже если максимальная теоретическая пропускная способность будет разделена на два для этого устройства).

[править]

Пример того, что я получаю для одного процессорного сокета с lstopo:

HostBridge L#0
  PCIBridge
    PCI 15b3:1011
      Net L#16 "ib0"
      OpenFabrics L#17 "mlx5_0"
  PCIBridge
    PCI 8086:1d6b
  PCIBridge
    PCI 102b:0532
      GPU L#18 "card0"
      GPU L#19 "controlD64"

person jyvet    schedule 11.03.2016    source источник
comment
возможно, это относится к electronics.stackexchange.com? SO ориентирован на программное обеспечение.   -  person WeaponsGrade    schedule 20.03.2016
comment
это для системного программирования/производительности. Но вы правы, это больше аппаратно-ориентированный вопрос. Я подумал, что у некоторых программистов, имеющих некоторый опыт программирования на GPU/infiniband, может быть ответ. В любом случае, я попробую на electronics.stackexchange.com после истечения времени атрибуции баунти.   -  person jyvet    schedule 20.03.2016


Ответы (1)


Все ли устройства подключены к основному мосту PCIe (и количество линий автоматически согласовывается для каждого устройства), или материнская плата подключает устройства напрямую к одному из предположительно 3 вспомогательных мостов 16x, 16x и 8x (количество линий затем согласовывается). для каждого из этих подмостов)?

Это функция конструкции материнской платы, по крайней мере частично, поэтому конкретного ответа дать нельзя. Но если на вашей материнской плате нет дополнительного оборудования PCIE, такого как коммутаторы PCIE, то вполне вероятно, что ваша материнская плата имеет как минимум 1 «порт» PCIE x16 и некоторое количество других «портов», т. е. слотов, которые могут иметь различную «ширину», т. е. x16. , х8, х4, х2, х1 и т. д.

Современный ЦП Intel имеет внутренний «корневой комплекс» PCIE, который используется всеми линиями, выходящими из устройства. Полосы, выходящие из устройства, будут сгруппированы в один или несколько «портов». Корневой комплекс PCIE является логическим объектом, тогда как порты имеют как логический, так и физический характер.

Существует автоматическое согласование ширины полосы движения, но обычно это используется только в качестве стратегии поддержки и устранения ошибок. Порт x16 будет ожидать согласования ширины x16, если к нему подключена «конечная точка» x16 (т. е. устройство) (он также может согласоваться с меньшей шириной, если обнаружены ошибки, локализуемые для определенных полос). Обычно порт может работать с устройством меньшей ширины, поэтому, если устройство x8 подключено к порту x16, обычно все будет «просто работать», хотя обычно это не означает, что у вас есть 8 дополнительных полос, которые вы можете использовать «где-то еще» .

Реконфигурация порта x16 на два порта x8 — это не то, что обычно происходит автоматически при подключении «адаптера x16 на x8», что бы это ни было. Конечно, вы можете уменьшить порт x16 до порта x8, но это не даст вам 8 дополнительных линий для автоматического использования в другом месте.

Процесс разделения 40 линий, выходящих из вашего устройства Haswell, на логические «порты» включает в себя как аппаратную конструкцию материнской платы, так и разработку микропрограммы (BIOS). Порт x16 нельзя автоматически разделить на два (логических) порта x8. Некоторые материнские платы имеют такие параметры конфигурации, и они обычно выбираются с помощью некоторых явных средств, таких как конфигурация BIOS или модификация коммутатора или платы маршрутизации, а также наличие двух слотов, по одному для каждого из возможных портов.

Однако довольно распространенным является использование коммутаторов PCIE. Такие коммутаторы позволяют одному порту PCIE (восходящему) обслуживать два (или более) нисходящих порта. Это не обязательно должно подразумевать преобразование логического символа x16 в логический символ x8 (хотя это может быть в зависимости от реализации), но обычно это подразумевает, что любое ограничение пропускной способности, установленное для восходящего порта, применяется в совокупности к нисходящим портам. Тем не менее, это довольно распространенная стратегия продукта, и вы можете найти примеры материнских плат, в которые встроены эти устройства (для эффективного предоставления большего количества слотов или портов), а также адаптеры/планары, которые можно подключить к существующему порту ( то есть слот) и предоставит несколько портов/слотов из этого единственного порта/слота.

В среде Linux для обнаружения этих топологий полезна команда lstopo. Возможно, вам потребуется установить пакет hwloc в вашем дистрибутиве Linux.

person Robert Crovella    schedule 21.03.2016
comment
На Haswell вы знаете, есть ли один восходящий порт или три разных. Другими словами, можно ли разделить 40 линий, например, на 2 логических порта (32x для очень необычных устройств и один 8x), если материнская плата предназначена для этого, или порты должны быть 16x + 16x + 8x (с тогдашней шириной дорожки). согласование внутри этих подмножеств). Я хотел бы понять, могут ли некоторые коммутаторы PCIe использовать все 40 линий одновременно для многих устройств, или максимальное количество линий (восходящих), подключенных к одному и тому же коммутатору, составляет 16x из-за конструкции контроллера Haswell PCIe. - person jyvet; 22.03.2016
comment
Я использовал lstopo, прежде чем задать свой вопрос. Поскольку я видел 3 PCIBridges в подразделах 1-го уровня для одного и того же HostBridge (см. обновленный пост), я подумал, что это из-за ограничения подразделения 16x + 16x + 8x. На самом деле, на других машинах я вижу более 3-х подразделов 1-го уровня. Я предполагаю, что мы не можем вывести из lstopo максимальное количество линий, подключенных к каждому PCIBridge, например, чтобы иметь возможность вычислить максимальную пропускную способность для всех подключенных устройств. - person jyvet; 22.03.2016
comment
Если вы говорите о разработке собственной материнской платы и BIOS, вы, вероятно, можете создать порт x32, я думаю (хотя, возможно, Intel просто не поддерживает это). Но это очень редко. Однако после того, как материнская плата разработана, как правило, невозможно (за исключением приведенного мной примера ручной конфигурации x16/x8) переназначить линии на порты. Вы не можете использовать все 40 дорожек для одного устройства. Количество полос (т. е. ширину) данного порта можно обнаружить из lspci, если вы посмотрите на полный диапазон данных (-vvv), как аппаратную (т. е. проектную) ширину, так и согласованную ширину. - person Robert Crovella; 22.03.2016
comment
Спасибо за ответ. Это очень помогло. С lspci -vvv я получил следующую информацию: Мост PCI: Intel Xeon E7 v2/Xeon E5 v2/Core i7 Корневой порт PCI Express 1a: LnkCap: порт №0, скорость 8 ГТ/с, ширина x8, мост PCI : Intel Xeon E7 v2/Xeon E5 v2/Core i7 PCI Express Root Port 2a: LnkCap: порт №0, скорость 8 ГТ/с, ширина x16, мост PCI: Intel Xeon E7 v2/Xeon E5 v2 /Core i7 PCI Express Root Port 3a: LnkCap: порт 07, скорость 8 ГТ/с, ширина x8 - person jyvet; 22.03.2016
comment
LnkCap предоставляет аппаратные возможности. LnkSta предоставляет вам согласованные возможности. Я думаю, вы уже поняли, что вывод lspci будет другим, если вы root. Вы должны быть root, чтобы получить полный вывод. - person Robert Crovella; 22.03.2016
comment
@RobertCrovella, я полагаю, вы, вероятно, можете создать порт x32 - вы не можете электрически объединить два физических порта x16 в порт x32, поскольку нет чередование данных и отсутствие устранить перекос (эластичные буферы) в ЦП (проверьте RX- и бит 6 'TXLANE_WIDTH_SUPPORTED' - pcisig.com/sites/default/files/specification_documents/ 1: x32 TX-LANE поддерживается' 1: x32 RX-LANE поддерживается' ) - person osgx; 07.05.2017
comment
@osgx Я ничего не говорил об электрическом слиянии чего-либо. Непонятно, к чему ваш комментарий. - person Robert Crovella; 09.05.2017
comment
Роберт, для создания 32-кратного порта должно быть оборудование, поддерживающее 32-кратные порты. Если xeon имеет 16x портов, пару из них нельзя объединить в один 32x порт ни электрически, ни патчем BIOS. Единственный вариант создания порта 32x — это использование коммутатора, и такой коммутатор не будет иметь 16x + 16x вверх по течению до единого корневого комплекса. - person osgx; 09.05.2017