GPU裸金属资讯

5个方法看懂多卡主机PCIe拓扑,排查带宽瓶颈更有依据

从主板手册、系统枚举、链路状态、NUMA关系和实测传输五个角度识别PCIe拓扑,区分插槽带宽、交换芯片与软件配置造成的问题。

多卡图形计算主机的PCIe拓扑识别方法,关键不是只看插了几张卡,而是确认每张卡实际连接到哪个处理器、经过哪些交换设备,以及链路当前运行在什么速度和宽度。按下面五步检查,可以把插槽限制、链路降速和跨NUMA访问区分开。

1. 先查主板手册:插槽外形不等于带宽

找到主板说明书中的扩展插槽表或框图,记录每个插槽的物理长度、电气通道数,以及通道来自哪个CPU或芯片组。外观为x16的插槽,电气连接可能只有x8;部分插槽还会与M.2接口或其他插槽共享通道,启用一个设备后,另一个插槽可能降为较窄模式。

双路主机尤其要确认插槽归属:有的槽连到CPU 1,有的连到CPU 2。手册是设计连接关系的依据,系统工具则显示当前状态;两者不一致时,先检查插卡位置、共享规则和BIOS设置。

2. 用系统命令画出设备层级

Linux查看PCIe树

  1. 执行 lspci -tv,观察设备挂在哪个根端口下,以及中间是否出现PCIe交换芯片。
  2. 执行 lspci -nn,记下计算卡、网卡、NVMe控制器等设备的总线地址。
  3. 对目标地址执行 lspci -s 地址 -vv,读取链路能力和当前链路状态。

树状输出能说明设备的父子关系,但不直接代表可用吞吐量。多个设备挂在同一交换芯片下时,设备之间可能有本地通信路径;它们通往CPU的上行链路则可能共享带宽。

5个方法看懂多卡主机PCIe拓扑,排查带宽瓶颈更有依据

3. 对照LnkSta:核实当前速度与宽度

在详细输出中重点看 LnkCap(设备支持的最高链路)和 LnkSta(当前协商结果)。例如,设备能力为x16而当前只显示x8,说明链路宽度没有达到设备能力;当前代际低于双方支持的最高代际,也可能来自插槽布线、转接卡、固件设置或信号训练限制。

PCIe 3.0、4.0、5.0的x16链路,单方向理论带宽约为15.8、31.5、63 GB/s,数值按编码后计算,协议开销和实际负载会使有效传输量更低。判断时要比较同一代际、同一宽度,不能把理论值当成应用吞吐。

4. 把NUMA关系纳入拓扑判断

多路CPU系统中,设备连接到哪个NUMA节点会影响主机内存访问路径。Linux可用 lscpu 查看NUMA节点,再查看 /sys/bus/pci/devices/设备地址/numa_node;也可用 numactl --hardware 查看节点信息。若结果为-1,表示系统未提供明确的设备节点归属,不应据此断言设备连接位置。

运行程序时,把进程和内存放在靠近设备的节点,通常有助于减少跨处理器互连访问。NUMA亲和性适合在双路主机、设备分散连接到不同CPU时重点检查;单路系统通常不涉及跨CPU节点选择。

5. 用成对传输测试验证瓶颈位置

拓扑图展示连接关系,成对带宽测试则帮助判断实际路径。先在相同软件、负载和测试长度下,测每张卡与主机内存的传输;再测卡与卡之间的传输。若同一CPU下设备对明显快于跨CPU设备对,需检查NUMA与处理器互连;若多个设备同时传输时速度下降,则关注共享的PCIe交换芯片上行链路、插槽分配或内存带宽。

测试前确认驱动、固件和电源状态一致,并重复运行以排除偶然波动。不要只凭单次峰值判断,也不要把不同数据传输方向、缓存状态或测试工具的结果直接横向比较。

排查时按证据收敛

实用的多卡图形计算主机的PCIe拓扑识别方法,是先用手册确认预期布线,再用系统树确定实际挂接,用链路状态核对代际与宽度,随后检查NUMA归属,最后用并发传输验证共享瓶颈。若“预期x16、实际x8”,先查插槽共享和安装;若链路正常但跨节点性能差,再查NUMA与并发负载,避免仅凭卡数或插槽外观更换硬件。

常见问题

只有Windows系统,怎么查看拓扑?

可在设备管理器查看设备位置和资源,也可使用支持PCI总线视图的硬件信息工具;再对照主板手册核实插槽归属。工具显示名称和层级可能不同,判断仍要看链路宽度、速度及共享关系。

所有卡都显示x16,就代表没有瓶颈吗?

不代表。设备可能共享交换芯片上行链路,也可能受NUMA、内存或软件并发影响;x16只描述单条链路的宽度,不能概括整条数据路径。

拓扑里出现PCIe交换芯片是故障吗?

不是。交换芯片用于扩展连接,多个设备共享上行路径是常见设计。只有当共享负载造成吞吐下降,且测试能复现时,才应把它作为瓶颈候选。