一、问题描述
在 Ubuntu 系统 上执行 NCCL 多机通信测试 与 ib_write_bw 网络带宽测试 时,发现一块标称速率为 200Gbps 的 Mellanox ConnectX-6 网卡性能异常。经多轮排查发现:
-
28:00.0
网卡 PCIe 链路降级(x16 → x1)。 -
即使更换同型号网卡问题仍旧存在。
-
结合内核日志分析,最终定位为上游 PCIe 交换芯片(Broadcom PEX88048)问题。
-
通过重新拔插 PCIe 线缆,问题彻底解决。
二、故障定位步骤
2.1 确认 PCIe 链路状态
使用以下命令确认网卡当前链路带宽配置:
lspci -vv -s 28:00.0 | grep -i "Width"
异常输出示例:
LnkCap: Port #0, Speed 16GT/s, Width x16, ASPM not supported
LnkSta: Speed 16GT/s (ok), Width x1 (downgraded)
-
表示该网卡原本支持 PCIe Gen4 x16,但当前仅工作在 x1 模式,极大限制了带宽。
2.2 定位物理插槽位置
确认此设备所处的物理插槽,可通过:
lspci -vv -s 28:00.0 | grep -i "Physical Slot"
示例输出:
Physical Slot: 11
可用于与服务器手册、拓扑图对应确认实际插槽位置。
2.3 查找上游设备
由于内核日志中多次出现如下信息:
[ 10.954550] pci 0000:28:00.0: 15.753 Gb/s available PCIe bandwidth, limited by 16.0 GT/s PCIe x1 link at 0000:27:00.0 (capable of 252.048 Gb/s with 16.0 GT/s PCIe x16 link)
说明限制链路带宽的是其上游设备 0000:27:00.0
,而不是网卡本身。多次日志印证同样现象:
[ 19.139054] mlx5_core 0000:28:00.0: 15.753 Gb/s available PCIe bandwidth, limited by 16.0 GT/s PCIe x1 link at 0000:27:00.0
确认其为上游设备(PCI bridge):
lspci -s 27:00.0 -vv
关键输出:
27:00.0 PCI bridge: Broadcom / LSI PEX88048 50 lane, 50 port, PCI Express Gen 4.0 ExpressFabric Platform Bus: primary=27, secondary=28, subordinate=28
表示
27:00.0
是一个 Broadcom PEX88048 Gen4 PCIe 交换芯片,它的状态或连接问题导致28:00.0
链路降级。
2.4 确认是否单点问题
使用以下命令检查其他 Mellanox 网卡状态进行对比:
lspci | grep -i mellanox
lspci -vv -s <其他网卡地址> | grep -i Width
对比如:
LnkSta: Speed 16GT/s (ok), Width x16 (ok)
可以判断仅有 28:00.0
出现降级,排除系统性问题。
2.5 确认网卡设备名称(ibX)
readlink -f /sys/bus/pci/devices/0000:28:00.0/net/
或
lshw -class network -businfo | grep 28:00.0
示例输出:
pci@0000:28:00.0 ibs11 network MT28908 Family [ConnectX-6]
确认 28:00.0
映射到设备名 ibs11
(从 ib0
重命名而来)。
三、故障排查尝试记录
排查方法 | 结果 |
更换网卡 | 问题未解决,依然为 x1 链路 |
使用 ethtool | 不支持该设备,无法测试链路灯 |
查看链路拓扑图 | 确认设备在 Broadcom PEX88048 下游 |
查看 BIOS 设置 | PCIe bifurcation 正常 |
四、问题原因分析
可能原因 | 描述 |
上游 PCIe 交换芯片连接不良 | 可能因金手指接触不良、PCB 插座老化等造成链路协商失败 |
PCIe slot 异常 | 插槽可能未完全插入或有异物 |
固件/BIOS 问题 | PEX88048 固件未能正确初始化下游通道 |
驱动未识别异常 | 系统层面未标注严重错误,仅链路降级 |
五、解决方案
✅ 最终有效方案:重新拔插 PCIe 线缆
-
关机并断电
-
拔掉与
28:00.0
和27:00.0
相关的 PCIe 连接线 -
重新插紧确保完全就位
-
开机后确认链路状态
lspci -vv -s 28:00.0 | grep -i Width
恢复示例:
LnkSta: Speed 16GT/s (ok), Width x16 (ok)
-
打流测试已恢复正常
六、可选补救措施
6.1 更新 Broadcom PEX88048 固件
联系服务器厂商,使用官方工具执行升级:
bcom_pex_update -d 27:00.0 -f pex88048_fw_xxx.bin
6.2 调整内核参数(临时避障方案)
修改 GRUB:
GRUB_CMDLINE_LINUX="pci=realloc=off pcie_aspm=off"
执行:
update-grub && reboot
七、预防措施
-
定期执行:
lspci -vv | grep -i "LnkSta:"
-
监控系统日志是否有链路降级提示:
dmesg | grep -i "pcie\|downgraded"
-
固定周期检查 PCIe 线缆接头是否松动
八、结论
-
故障根因:PCIe 网卡
28:00.0
与上游 PEX88048 芯片连接处物理接触不良,导致链路协商失败,被迫降级为 x1。 -
最终解决方案:通过重新拔插 PCIe 线缆后链路恢复为正常的 x16。
-
建议:定期检查 PCIe 拓扑与链路状态,维护良好的物理连接;重大性能异常优先考虑链路退化可能性。
附录:命令速查表
命令 | 功能说明 |
`lspci -vv -s 28:00.0 | grep -i Width` |
lspci -s 27:00.0 -vv | 查看上游 PCIe 交换芯片信息 |
`dmesg | grep -i "28:00.0"` |
readlink -f /sys/bus/pci/devices/.../net/ | 映射网卡 PCI 地址到网卡设备名 |
lshw -class network -businfo | 设备和接口对应关系 |
lspci -tv | 查看 PCIe 总线拓扑 |