0%

RDMA 性能测试

命令速查表

  • ib_Benchmark:性能测试工具
  • ibv_Verbs:编程与设备信息
  • ibFabric:网络拓扑与诊断
  • opensm管理器:子网控制核心

网络拓扑与状态诊断(ib 前缀)

命令 功能说明 推荐场景
ibstat 查看本地 HCA 的端口状态和速率 快速确认端口是否 LinkUp
iblinkinfo 显示整个网络的链路连接拓扑 检查交换机与节点连接情况
ibnetdiscover 构建子网拓扑图(基于 SM) 网络可视化、拓扑分析
ibdiagnet 深度诊断 InfiniBand 网络问题 性能瓶颈、错误帧分析
ibsysstat 查看系统级 InfiniBand 状态 多节点状态汇总

RDMA 编程与设备信息(ibv_ 前缀)

命令 功能说明 推荐场景
ibv_devinfo 查看本地 RDMA 网卡设备信息 网卡识别、端口状态确认
ibv_devices 列出所有支持 RDMA 的设备 多网卡环境初始化
ibv_rc_pingpong 使用 RC QP 测试点对点通信 RDMA 编程验证
ibv_srq_pingpong 使用共享接收队列测试通信 SRQ 场景验证
ibv_ud_pingpong 使用 UD QP 测试通信 多播或无连接场景测试

性能测试与基准评估(ib_ 前缀)

命令 功能说明 推荐场景
ib_send_bw 测试 RDMA 发送带宽 点对点性能评估
ib_read_bw 测试 RDMA 读带宽 存储访问场景评估
ib_write_bw 测试 RDMA 写带宽 写密集型应用测试
ib_send_lat 测试发送延迟 延迟敏感应用调优
ib_read_lat 测试读延迟 存储延迟分析
ib_write_lat 测试写延迟 写延迟分析
ib_pingpong 简单点对点通信测试(旧版) 快速连通性验证

管理与配置辅助工具

命令 功能说明 推荐场景
opensm 启动子网管理器(SM) 小规模集群或测试环境
perfquery 查询端口性能计数器 错误帧、丢包分析
saquery 查询子网代理信息 LID/GID 映射验证
sminfo 查看 SM 状态信息 SM 健康检查

物理硬件

  • HCA 可能有多个物理端口 (port):每个 port 有一个 LID 。
  • 每个 port 可能有多个通道 (lane) :用 1x, 2x, 4x, 8x 等表示。
  • 总速率:总速率 = 每个 port 的 lane 数 × 每个 lane 的速率 × port 数量
  • port 和 lane 是有物理硬件决定的。

部署

  • 通道是物理层的能力

    • 每个 InfiniBand 或 PCIe 接口由若干个 lane 组成,每个 lane 是一对差分信号线(发送 + 接收)。
    • 比如:
      • x1 表示 1 个 lane → 最低带宽
      • x4 表示 4 个 lane → 常见于 EDR(100G)
      • x8 表示 8 个 lane → HDR/NDR(200G/400G)
      • x12 是更高端的聚合方式 → 超大带宽(如 600G)
  • “部署”决定你能否用满这些通道

    • 如果你部署的是 x4 的 HCA + x4 的交换机 + x4 的线缆,你就能跑满 4 个 lane。
    • 如果你部署的是 x8 的 HCA,但只用了 x4 的线缆,你只能跑 4 个 lane,剩下的通道闲置。
    • 如果你部署的是 x12 的交换机,但 HCA 只有 x4,你也只能用其中一部分。

举个例子:HDR 200G 的部署选择

部署方式 通道数 实际带宽
HCA: x4 + Cable: x4 + Switch: x4 4 200 Gbps
HCA: x8 + Cable: x4 + Switch: x4 4 200 Gbps(x8 闲置一半)
HCA: x8 + Cable: x8 + Switch: x8 8 400 Gbps

只有在部署中三者都匹配时,才能真正跑满所有通道。

程序员关注的层面

层级 程序员是否需要控制
Lane(物理通道) ❌ 不需要
Port(物理接口) ✅ 可选(如多 port HCA)
QP(逻辑通信通道) ✅ 必须管理
Memory Region(MR) ✅ 必须注册
Completion Queue(CQ) ✅ 必须轮询或处理

带宽测试

理论带宽

1
lspci | grep -i infiniband

然后通过阅读产品说明书,确定理论带宽。

协商带宽

实际部署的速率,可能与 HCA 、线缆、交换机都相关,所以实际会有一个协商速率。

1
ibstat

实际带宽测试

发送速率:

1
2
3
4
5
# Server 端(等待连接)
ib_send_bw -d mlx5_0 -a

# Client 端(发起连接)
ib_send_bw -d mlx5_0 -a <server_ip>