0

我正在使用几个 PCIe 3.0 扩展卡(GPU 和 Infiniband 互连)。我想知道如何实际管理通道,以及是否可以通过更改端口或使用某些适配器(16x -> 8x)来优化我的设备。Intel Haswell-EP可以管理40 条 PCIe 3.0 通道。在 Intel 的原理图中,PCIe 3.0 控制器似乎分为两个 x16 和一个 x8 子桥。

在 Haswell-EP CPU 的一些商业原理图中,我们可能会读到:

多达 40 个 PCIe Gen3 通道 2x16 + 1x8 到 3x8 图形。

是否所有设备都连接到主 PCIe 桥(以及为每个设备自动协商的通道数量),或者主板是否将设备直接连接到所谓的 3 个子桥16x16x8x之一(然后协商通道数量对于每个子桥)?

我无法直接访问主板以查看设备是如何连接的,但我怀疑没有使用所谓的 8x 子桥的通道。另外,我想知道通过使用 16x 到 8x 适配器,我是否可以利用更多通道并增加我的总 PCIe 带宽(即使该设备的最大理论带宽也将除以 2)。

[编辑]

我为一个 CPU 插槽获得的示例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"
4

1 回答 1

4

是否所有设备都连接到主 PCIe 桥接器(以及为每个设备自动协商的通道数量),或者主板是否将设备直接连接到所谓的 3 个子桥接器 16x、16x 和 8x 之一(然后协商通道数量对于每个子桥)?

这是主板设计的功能,至少部分是这样,所以无法给出具体答案。但是假设您的主板没有额外的 PCIE 硬件,例如 PCIE 开关,那么您的主板可能至少有 1 个 PCIE x16“端口”和一些其他“端口”,即插槽,它们可能具有不同的“宽度”,即 x16 、x8、x4、x2、x1 等。

现代英特尔 CPU 有一个内部 PCIE“根复合体”,由离开设备的所有通道共享。离开设备的通道将被分组到一个或多个“端口”中。PCIE 根联合体是一个逻辑实体,而端口对它们来说具有逻辑和物理特性。

有自动车道宽度协商,但这通常仅作为支持和错误缓解策略。如果将 x16“端点”(即设备)插入其中,x16 端口将期望协商到 x16 宽度(如果检测到可定位到特定通道的错误,它也可能协商到较低的宽度)。通常一个端口可以处理宽度较小的设备,因此如果将 x8 设备插入 x16 端口,事情通常会“正常工作”,尽管这通常并不意味着您有 8 个额外的通道可以在“其他地方”使用.

将 x16 端口重新配置为两个 x8 端口通常不会通过插入“x16 到 x8 适配器”自动发生,不管是什么。您当然可以将 x16 端口减少为 x8 端口,但这不会为您提供 8 个额外的通道以自动在其他地方使用。

将离开 Haswell 设备的 40 条通道细分为逻辑“端口”的过程涉及主板的硬件设计和固件 (BIOS) 设计。一个 x16 端口不能自动拆分为两个(逻辑)x8 端口。一些主板有这样的配置选项,它们通常通过一些明确的方式来选择,例如 BIOS 配置或修改交换机或路由 PCB,同时提供两个插槽,一个用于每个可能的端口。

然而,相当普遍的是使用 PCIE 开关。此类交换机允许单个 PCIE(上游)端口为两个(或更多)下游端口提供服务。这并不一定意味着将 x16 逻辑字符转换为 x8 逻辑字符(尽管它可能,取决于实现),但它通常意味着上游端口的任何带宽限制都应用于下游端口。尽管如此,这是一种相当常见的产品策略,您可以找到设计了这些设备的主板示例(以有效地提供更多插槽或端口)以及可以插入现有端口的适配器/平面板(即插槽)并将从该单个端口/插槽提供多个端口/插槽。

在 linux 空间中,该lstopo命令对于发现这些拓扑非常有用。您可能需要hwloc在您的 linux 发行版中安装该软件包。

于 2016-03-21T20:35:20.270 回答