PCIe链路降级故障分析与解决手册(Mellanox ConnectX-6 网卡带宽降级案例)

一、问题描述

Ubuntu 系统 上执行 NCCL 多机通信测试ib_write_bw 网络带宽测试 时,发现一块标称速率为 200GbpsMellanox 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 线缆

  1. 关机并断电

  2. 拔掉与 28:00.027:00.0 相关的 PCIe 连接线

  3. 重新插紧确保完全就位

  4. 开机后确认链路状态

lspci -vv -s 28:00.0 | grep -i Width

恢复示例

LnkSta: Speed 16GT/s (ok), Width x16 (ok)
  1. 打流测试已恢复正常

六、可选补救措施

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.0grep -i Width`
lspci -s 27:00.0 -vv查看上游 PCIe 交换芯片信息
`dmesggrep -i "28:00.0"`
readlink -f /sys/bus/pci/devices/.../net/映射网卡 PCI 地址到网卡设备名
lshw -class network -businfo设备和接口对应关系
lspci -tv查看 PCIe 总线拓扑
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

guganly

喜欢就请我喝杯咖啡吧!☕️

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值