login
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 数据量(字节)
Reason
思考过程

我们有一个需求:基于 InfiniBand 网卡(这里是 mlx5_0 的端口 1)的几个关键统计文件,编写一个脚本,定期采集并统计 RDMA 流量(包括数据包数和数据量)。
需要实现:

  1. 读取四个关键文件:发送数据包数、接收数据包数、发送数据量(字节)、接收数据量(字节)
  2. 支持定期采集(比如每隔 1 秒采集一次,计算速率)
  3. 输出当前统计值和速率(比如每秒的包速率、带宽)

思路:

  • 首先获取初始的四个统计值,等待 1 秒,再获取一次,然后计算速率(第二次值 - 第一次值)。
  • 为了方便后续持续监控,可以设计为循环输出(比如持续监控,按 Ctrl+C 退出)。
  • 输出格式要清晰,包含当前值和速率(包速率、带宽)。

注意:

  • 字节数转换为更易读的单位(如 MB/s、GB/s),包速率保持为“包/秒”。
  • 需要处理可能的文件读取错误(简单处理:读取失败时输出错误并退出)。

我们将编写一个 Bash 脚本,因为操作的是系统文件且需要简单定时,用 Bash 足够。

以下是一个基于您提供的 InfiniBand 统计值的 RDMA 流量监控脚本,支持实时速率计算和人性化单位转换:

脚本代码(rdma_traffic_monitor.sh

bash

使用说明

  1. 保存脚本:将上述代码保存为 rdma_traffic_monitor.sh
  2. 赋予执行权限
    bash
  3. 运行脚本
    bash

输出解读

脚本会每秒输出一行,包含以下信息:

  • 时间戳:当前监控时间(格式:年-月-日 时:分:秒)。
  • 发送速率:每秒发送的 RDMA 数据包数(单位:包/秒)。
  • 接收速率:每秒接收的 RDMA 数据包数(单位:包/秒)。
  • 总带宽:发送 + 接收的总流量带宽(单位:Mbps,即兆比特/秒)。

扩展与优化

  • 单位自定义:若需显示 GB/sMB/s,可修改脚本中带宽计算逻辑(例如将 total_mbps 改为 total_bytes/1024/1024 并添加 MB/s 后缀)。
  • 多端口监控:若需监控多个端口,可循环遍历 ports/ 目录下的子文件夹,扩展为多设备支持。
  • 错误增强:添加 trap 捕获退出信号,或结合日志记录工具(如 syslog)持久化统计结果。

通过该脚本,您可以直观地监控 RDMA 流量的实时速率,快速定位带宽瓶颈或异常流量~ 🚀