4、监控工具集介绍:ibdiagnet、ibstatus、ibstat、perfquery、saquery等工具的功能与用法
说实话,刚接触 InfiniBand 网络运维那会儿,我面对着一堆命令行工具,心里是有点懵的。每个工具名字都挺像,但干的活完全不一样。今天我就把这些常用的监控工具掰开揉碎了讲给你听。你想想看,要是连工具都认不全,出了问题怎么定位?
4.1 ibstatus —— 看一眼端口状态
这是我最常用的工具,没有之一。它简单到令人发指,但关键时刻特别管用。
# 查看所有 IB 端口状态
ibstatus
# 查看指定端口
ibstatus mlx5_0
输出大概长这样:
Infiniband device 'mlx5_0' port 1 status:
default gid: fe80:0000:0000:0000:ec0d:9a03:0023:4567
base lid: 0x2
sm lid: 0x1
state: 4: ACTIVE
phys state: 5: LinkUp
rate: 100 Gb/sec (4X EDR)
link_layer: InfiniBand
我个人习惯,登录一台新机器后,第一件事就是跑 ibstatus。为什么?因为我要确认链路是不是真的起来了。你看那个 state: 4: ACTIVE 和 phys state: 5: LinkUp,这两个必须同时出现才算正常。
4.2 ibstat —— 比 ibstatus 更细一点
ibstat 和 ibstatus 名字很像,但侧重点不同。ibstat 会给出更底层的硬件信息,比如固件版本、硬件版本这些。
# 查看所有 IB 设备详细信息
ibstat
# 查看指定设备
ibstat mlx5_0
输出示例:
CA 'mlx5_0'
CA type: MT4123
Number of ports: 1
Firmware version: 16.28.2006
Hardware version: 0
Node GUID: 0xec0d9a0300234567
System image GUID: 0xec0d9a0300234567
Port 1:
State: Active
Physical state: LinkUp
Rate: 100
Base lid: 2
LMC: 0
SM lid: 1
Capability mask: 0x2651e84a
Port GUID: 0xec0d9a0300234567
Link layer: InfiniBand
你看,这里多了 Firmware version 和 Hardware version。嗯,这里要注意,固件版本不一致有时候会导致莫名其妙的兼容性问题。我曾经排查过一个性能问题,折腾了两天,最后发现是两台机器的固件版本差了三个大版本。
4.3 ibdiagnet —— 网络诊断的瑞士军刀
这个工具厉害了。如果说 ibstatus 是看单个端口,那 ibdiagnet 就是看整个网络拓扑。它能扫描整个 IB 子网,发现所有设备、链路,还能检查有没有配置错误。
# 基本用法,扫描整个网络
ibdiagnet
# 只检查链路错误
ibdiagnet -lw 4x -ls 100 -r 10
# 输出到指定目录
ibdiagnet -o /tmp/ib_diag
运行完后,它会生成一堆文件:
| 文件名 | 内容说明 |
|---|---|
| ibdiagnet.fdbs | 转发数据库,记录了数据包怎么走 |
| ibdiagnet.links | 所有链路的详细信息 |
| ibdiagnet.nodes | 所有节点的信息 |
| ibdiagnet.log | 诊断日志,重点关注 WARNING 和 ERROR |
我个人觉得,ibdiagnet 最牛的地方是它能发现「隐形问题」。比如两条链路明明都显示 Active,但实际带宽只有一半。跑一遍 ibdiagnet,它会告诉你哪条链路的信号质量不行。
4.4 perfquery —— 性能计数器查询
这个工具是专门用来查性能计数器的。IB 网卡内部有很多硬件计数器,记录了发送/接收的包数量、错误数量、CRC 错误等等。
# 查询本地端口的所有计数器
perfquery
# 查询指定端口的计数器
perfquery -p 1 mlx5_0
# 查询远程端口的计数器(需要知道 LID)
perfquery -l 0x2
输出示例:
# Port counters: (lid 2, port 1)
SymbolErrorCounter: 0
LinkErrorRecoveryCounter: 0
LinkDownedCounter: 0
PortRcvErrors: 0
PortRcvRemotePhysicalErrors: 0
PortRcvSwitchRelayErrors: 0
PortXmitDiscards: 0
PortXmitConstraintErrors: 0
PortRcvConstraintErrors: 0
LocalLinkIntegrityErrors: 0
ExcessiveBufferOverrunErrors: 0
VL15Dropped: 0
PortXmitData: 1234567890
PortRcvData: 987654321
PortXmitPkts: 1234567
PortRcvPkts: 987654
PortXmitWait: 0
你想想看,这些计数器就是网卡的「体检报告」。如果 SymbolErrorCounter 一直在涨,说明链路信号质量有问题。如果 PortRcvErrors 在涨,可能是对端网卡有问题或者线缆坏了。
4.5 saquery —— 子网管理器查询
这个工具是用来跟子网管理器(SM)对话的。SM 是整个 IB 网络的大脑,它知道所有设备的位置和路由信息。saquery 就是用来查这些信息的。
# 查询所有节点
saquery
# 查询所有链路
saquery -l
# 查询指定 GUID 的节点
saquery -g 0xec0d9a0300234567
# 查询所有多播组
saquery -m
输出示例(查询节点):
# SA query: NodeRecord
# 1 node(s) found
NodeRecord:
EndPort: LID 2, port 1
NodeGUID: 0xec0d9a0300234567
PortGUID: 0xec0d9a0300234567
NodeType: 1 (Channel Adapter)
NumPorts: 1
ClassPortInfo: ...
说白了,saquery 就是让你看看 SM 眼里这个网络长什么样。如果 SM 没发现某台机器,那这台机器在网络上就是「隐身」的。
4.6 工具选择指南
这么多工具,到底什么时候用哪个?我给你总结一下:
| 场景 | 推荐工具 | 原因 |
|---|---|---|
| 快速检查本机端口 | ibstatus | 简单直接,一眼看出状态 |
| 查看硬件详细信息 | ibstat | 固件版本、硬件版本都有 |
| 全网拓扑诊断 | ibdiagnet | 能发现隐藏问题 |
| 排查链路质量 | perfquery | 硬件计数器,数据说话 |
| 查询 SM 信息 | saquery | 看 SM 怎么看待网络 |
好了,这些工具你挨个试一遍,基本就能应付日常的 IB 网络监控了。记住,工具是死的,人是活的。关键是要理解每个工具能告诉你什么信息,以及这些信息背后意味着什么。
公众号:蓝海资料掘金营,微信deep3321