3、ibstat命令详解:使用ibstat查看端口状态、速率、链路宽度、物理状态,实战排查链路降速问题
3.1 为什么ibstat是排查链路问题的第一把刀?
说实话,我排查InfiniBand网络问题这么多年,ibstat是我用得最多的命令。没有之一。
你想想看,当业务反馈「网络变慢了」,你第一反应是什么?
我个人习惯是:先跑一遍ibstat,看看端口状态。为什么?因为80%的链路问题,都能在这个命令的输出里找到蛛丝马迹。速率降了、链路宽度不对、物理状态异常——这些信息ibstat一行就给你交代清楚了。
我在项目中遇到过好几次,业务方抱怨带宽上不去,结果我一查ibstat,发现链路从4x降到了2x,速率从FDR(56Gbps)掉到了QDR(40Gbps)。这种问题,光靠ping和iperf是看不出来的。
核心要点:ibstat是查看本地节点所有HCA端口状态的利器。它直接读取内核驱动层的状态信息,比任何上层工具都更接近硬件真相。
3.2 ibstat输出逐行拆解
我们先跑一下命令看看:
$ ibstat
CA 'mlx5_0'
CA type: MT4123
Number of ports: 1
Firmware version: 20.32.1000
Hardware version: 0
Node GUID: 0x248a070300a1b2c3
System image GUID: 0x248a070300a1b2c3
Port 1:
State: Active
Physical state: LinkUp
Rate: 100
Base lid: 2
LMC: 0
SM lid: 1
Capability mask: 0x02514868
Port GUID: 0x248a070300a1b2c4
Link layer: InfiniBand
嗯,这里要注意几个关键字段。我一个个说。
3.3 关键字段详解
State(端口状态)
这个字段只有两个值值得关注:Active和Down。Active表示端口正常工作,Down表示端口挂了。我在项目中见过有人看到Init状态就慌了,其实Init只是初始化过程中的临时状态,等几秒就好。
Physical state(物理状态)
这个比State更底层。常见值:
- LinkUp:物理链路正常,光模块和线缆都没问题
- Polling:正在尝试建立连接,通常是线缆没插好或对端没开机
- Sleep:省电模式,或者链路协商失败
- Disabled:端口被手动关闭了
我曾经遇到过一个奇葩问题:Physical state显示LinkUp,但State却是Down。后来发现是SM(子网管理器)没配置好。所以这两个状态要结合起来看。
Rate(速率)
这个字段最容易让人误解。它显示的是单通道速率,不是总带宽。比如:
| 显示值 | 实际含义 | 单通道速率 |
|---|---|---|
| 100 | FDR(56Gbps) | 56 Gbps |
| 80 | QDR(40Gbps) | 40 Gbps |
| 40 | DDR(20Gbps) | 20 Gbps |
| 20 | SDR(10Gbps) | 10 Gbps |
注意:Rate显示的是实际协商后的速率。如果线缆质量差或者距离过长,速率可能会自动降级。我见过一个案例,客户用了30米的铜缆,结果速率从100降到了80,换了光模块才解决。
链路宽度(隐含在Rate中)
ibstat不直接显示链路宽度,但你可以通过总带宽反推。比如:
- 如果Rate是100,总带宽是200Gbps,那链路宽度就是4x(4 × 56Gbps = 224Gbps,实际有效约200Gbps)
- 如果Rate是100,总带宽只有100Gbps,那链路宽度就是2x
说白了,链路宽度就是并行通道数。4x是标准配置,2x说明有问题。
我的小技巧:用ibstatus命令可以同时看到速率和链路宽度。它其实是ibstat的封装版,输出更友好。但我还是习惯用ibstat,因为信息更原始,不容易被误导。
3.4 实战:排查链路降速问题
好,现在我们来个真实案例。假设你收到告警:某台计算节点的IB网络性能下降。你登录上去跑ibstat:
$ ibstat
CA 'mlx5_0'
Port 1:
State: Active
Physical state: LinkUp
Rate: 80
...
看到Rate是80,你心里应该咯噔一下。正常应该是100才对。这说明链路降速了。
排查步骤:
- 检查对端:登录对端交换机或计算节点,跑
ibstat看Rate是否一致。如果对端也是80,说明是双边协商的结果。 - 检查线缆:看线缆类型和长度。铜缆超过5米就容易出问题。我建议换一根短一点的线缆试试。
- 检查光模块:用
iblinkinfo看光模块的功率和温度。功率太低或温度过高都会导致降速。 - 检查SM配置:有时候SM会强制限制速率。用
smconfig查看。
注意:千万不要在业务高峰期拔插线缆!我曾经有一次在白天排查降速问题,拔了线缆重新插,结果导致整个集群的网络抖动,影响了正在跑的训练任务。后来我学乖了,所有物理操作都安排在维护窗口。
3.5 常见降速场景及对策
| 场景 | ibstat表现 | 原因 | 对策 |
|---|---|---|---|
| 线缆过长 | Rate从100降到80 | 信号衰减 | 换短线缆或用光模块 |
| 光模块故障 | Physical state为Polling | 光功率不足 | 更换光模块 |
| 端口协商失败 | State为Down | 对端端口关闭或配置错误 | 检查对端配置 |
| SM配置限制 | Rate固定为某个值 | 管理员手动限速 | 修改SM配置 |
嗯,这里要补充一句:降速不一定是硬件问题。我见过有人为了省电,在SM里把空闲端口的速率降了一半。结果业务跑起来后忘了改回来,导致性能下降。所以排查时先问问管理员最近有没有改过配置。
3.6 我的排查口诀
最后分享一个我自己的排查口诀,记熟了能省不少时间:
- 一看State:Active还是Down?Down的话先查物理连接
- 二看Physical state:LinkUp还是Polling?Polling的话查线缆和光模块
- 三看Rate:是不是预期值?不是的话查协商和配置
- 四看对端:两边信息是否一致?不一致的话查中间链路
说白了,ibstat就是你的眼睛。它告诉你硬件层面发生了什么。剩下的,就是靠经验去判断「为什么」了。
总结:ibstat是InfiniBand网络排查的起点,也是终点。很多问题看到输出就能定位。建议你把ibstat的输出保存下来,作为基线数据。下次出问题时,对比一下就知道哪里变了。
下一章我会讲ibstatus和iblinkinfo的配合使用,这两个命令能帮你看到全网拓扑和链路质量。到时候你会发现,ibstat只是冰山一角。