检查IB云服务器网络是否正常,核心是看链路状态、连通性和实际带宽三项,缺一不可。下面这套方法,从基础命令到性能测试,帮你一步步定位问题。
先分清你查的是哪种“IB网络”
IB云服务器和普通ECS不一样,它除了常规的以太网管理口,还有一张独立的InfiniBand网卡,走的是RDMA协议,平时说的“IB网络检查”,指的是后者那张用来做高性能并行计算、AI训练数据交换的RDMA网卡。
很多人上来就ping,发现不通就以为网络坏了,其实IB网络压根不依赖ICMP协议,ping不通不代表链路有问题,正确姿势是先看硬件状态,再看连通性,最后测性能。
ib网络检查方法:从状态命令开始
业内专家指出,超过半数IB网络“假故障”都是因为没分清检查层次,第一步永远先看驱动和端口状态。
用ibstat看端口物理状态
登录服务器后,直接输入:
ibstat
重点看两个字段:
- State:必须是
Active,如果是Down或Init,说明物理链路有问题 - PhysicalState:必须是
LinkUp,配合前面的State一起看才有意义
如果看到Port 1: Down,先检查线缆是否插紧,再看对端交换机端口有没有启用,IB网卡通常不支持热拔插,插拔后建议重启服务器。
用ibstatus确认设备是否被系统识别
ibstatus
这个命令会列出所有IB设备,输出包括:
- 设备名(比如mlx5_0)
- 端口号
- 速率(比如40Gb/s或100Gb/s)
- 状态(ACTIVE / DOWN)
这里有个坑:ibstatus显示ACTIVE只能说明网卡和交换机握手成功,不保证数据通路质量
,就像网线插上了,但线芯可能老化导致丢包。
用ibv_devinfo检查RDMA能力
ibv_devinfo
看port_state字段,同样要求ACTIVE,顺便确认atomic_cap和active_mtu是否正常,MTU异常会导致大包传输失败,但小包正常,这种问题用上面两个命令看不出来。
ib云服务器网络测试:连通性验证
状态都正常了,接下来做连通性测试,这里有个关键区别:IB有自己的ping工具,叫ibping,和传统ping完全是两码事。
ibping的正确用法
先在一台机器上启动服务端:
ibping -S -C 端口号
ibping -S -C 1
然后在另一台机器上发起测试:
ibping -G -C 1 -L 目标节点LID
LID可以用ibstat查看,在Port LID字段,如果不知道对端LID,也可以用-G参数配合GID:
ibping -G -C 1 -L 0x0002c90300000001
看到ibping: Sending 1000 pings和RTT相关输出,说明RDMA通路是通的。
用ibdiagnet做全面体检
如果节点多,逐个ping太慢,可以用:
ibdiagnet
这个命令会扫描整个IB子网,输出所有端口状态、链路速率、交换机连接情况,它会生成一个报告文件,重点看Errors和Warnings部分。链路速率降级(比如40G降到10G)在报告里会标红,这种问题ibping测不出来,因为小包照样通。
实际带宽测试:别被状态正常骗了
State是Active,连通性也OK,不代表性能达标,行业中常见的场景是:链路协商成功,但实际带宽只有理论值的
三成,这时候必须跑一下性能基准。
用ib_write_bw测带宽
服务端:
ib_write_bw -d mlx5_0 -F
客户端:
ib_write_bw -d mlx5_0 -F 192.168.1.10
注意IP地址填对端IB网卡的IP,不是管理网IP,输出结果看Bandwidth列,单位是Gb/s。
用ib_read_lat测延迟
ib_read_lat -d mlx5_0 -F 对端IP
看average latency,低于2微秒算正常,超过5微秒说明链路有问题。
这里要给个参考值(以常见的EDR 100G IB网络为例):
| 指标 | 正常范围 | 异常警戒线 |
|---|---|---|
| 带宽 | 90-100 Gb/s | 低于70 Gb/s |
| 延迟 | 1-2微秒 | 超过5微秒 |
| 丢包率 | 0% | 任何非零值 |
如果带宽不达标,优先检查:
- MTU是否一致(建议4092)
- 是否开了流控(
mlx5_fwctl里查) - 防火墙有没有限制RDMA端口
用ibping -R测持久稳定性
性能测试跑一次不够,建议持续跑几分钟:
ibping -G -C 1 -L 目标LID -n 10000 -s 8192
-n 10000表示发10000个包,-s 8192指定包大小,观察有没有丢包。IB网络理论上是零丢包的,如果有哪怕一个丢包,都值得排查。
常见故障场景速查
ibstat显示Down
- 检查ib驱动是否加载:
lsmod | grep mlx5 - 检查固件版本:
mlxup --query - 确认交换机端口没有被禁用
状态正常但性能差
这种情况最常见的原因是多路径配置错误,IB支持自适应路由,但有些云环境下需要使用ibroute手动配置,检查一下/etc/infiniband/openib.conf里的OPTIONS,看有没有设置MLX5_SINGLE_PORT=yes这类限制参数。
偶发性丢包
- 用
ibstat看PortXmitDiscards计数,如果这个值在增长,说明交换机端有拥塞 - 检查是否多个节点同时打满带宽,导致端到端流控生效
- 在
/sys/class/infiniband/mlx5_0/ports/1/counters/下看port_xmit_constraint_errors,这个字段非零说明有QoS策略限制
云服务器IB网络检查的额外注意点
云环境里的IB和物理机不太一样,如果你是裸金属实例,直接按上面的方法操作就行,但如果是虚拟化实例,有几个特殊地方:
- SR-IOV直通:需要确认网卡是否以SR-IOV模式透传,
lspci | grep Mellanox看到两个设备是正常的,一个PF一个VF - 租户隔离:有些云厂商用Partition Key隔离租户,
ibstat里Pkey字段需要匹配,如果配置不对,表现就是能ping通但性能极差 - 子网管理器:云环境里的子网管理器(SM)由云平台托管,你不需要也不应该自己跑opensm,如果发现服务器上有SM在运行,可能会干扰全局路由计算
检查完毕后,把状态命令的输出、性能测试结果、系统日志时间点串起来看。一次完整的IB网络检查,应该能在5分钟内完成,状态、连通、性能三关都过了,才算真正正常,如果哪一关掉了,就按对应场景的方案去排查,别一上来就重启网卡,那是最没办法的办法。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/560106.html




