RDMA流量监控脚本指南
2025/08/26·StepFun can make mistakes, check important info.
基于这些个统计值,写一个流量统计脚本
cat /sys/class/infiniband/mlx5_0/ports/1/counters/port_xmit_packets # 发送的 RDMA 数据包数
cat /sys/class/infiniband/mlx5_0/ports/1/counters/port_rcv_packets # 接收的 RDMA 数据包数
cat /sys/class/infiniband/mlx5_0/ports/1/counters/port_xmit_data # 发送的 RDMA 数据量(字节)
cat /sys/class/infiniband/mlx5_0/ports/1/counters/port_rcv_data # 接收的 RDMA 数据量(字节)
思考过程
我们有一个需求:基于 InfiniBand 网卡(这里是 mlx5_0 的端口 1)的几个关键统计文件,编写一个脚本,定期采集并统计 RDMA 流量(包括数据包数和数据量)。
需要实现:
- 读取四个关键文件:发送数据包数、接收数据包数、发送数据量(字节)、接收数据量(字节)
- 支持定期采集(比如每隔 1 秒采集一次,计算速率)
- 输出当前统计值和速率(比如每秒的包速率、带宽)
思路:
- 首先获取初始的四个统计值,等待 1 秒,再获取一次,然后计算速率(第二次值 - 第一次值)。
- 为了方便后续持续监控,可以设计为循环输出(比如持续监控,按 Ctrl+C 退出)。
- 输出格式要清晰,包含当前值和速率(包速率、带宽)。
注意:
- 字节数转换为更易读的单位(如 MB/s、GB/s),包速率保持为“包/秒”。
- 需要处理可能的文件读取错误(简单处理:读取失败时输出错误并退出)。
我们将编写一个 Bash 脚本,因为操作的是系统文件且需要简单定时,用 Bash 足够。
以下是一个基于您提供的 InfiniBand 统计值的 RDMA 流量监控脚本,支持实时速率计算和人性化单位转换:
脚本代码(rdma_traffic_monitor.sh
)
使用说明
- 保存脚本:将上述代码保存为
rdma_traffic_monitor.sh
。
- 赋予执行权限:
- 运行脚本:
输出解读
脚本会每秒输出一行,包含以下信息:
- 时间戳:当前监控时间(格式:
年-月-日 时:分:秒
)。
- 发送速率:每秒发送的 RDMA 数据包数(单位:包/秒)。
- 接收速率:每秒接收的 RDMA 数据包数(单位:包/秒)。
- 总带宽:发送 + 接收的总流量带宽(单位:Mbps,即兆比特/秒)。
扩展与优化
- 单位自定义:若需显示
GB/s
或 MB/s
,可修改脚本中带宽计算逻辑(例如将 total_mbps
改为 total_bytes/1024/1024
并添加 MB/s
后缀)。
- 多端口监控:若需监控多个端口,可循环遍历
ports/
目录下的子文件夹,扩展为多设备支持。
- 错误增强:添加
trap
捕获退出信号,或结合日志记录工具(如 syslog
)持久化统计结果。
通过该脚本,您可以直观地监控 RDMA 流量的实时速率,快速定位带宽瓶颈或异常流量~ 🚀