4. 基准测试工具介绍:常用工具的功能与用法

4.1 工具全景:从微基准到应用层

RDMA性能测试工具按测试层次可分为三类:微基准工具(perftest、qperf)、协议栈诊断工具(ibdiagnet、ibv_devinfo)和应用模拟工具(Intel MPI Benchmarks、Sockperf)。其中perftest是Mellanox/NVIDIA官方维护的OFED自带套件,直接封装了libibverbs原语,能精确测量硬件极限;qperf则更偏向于“黑盒”测试,适合快速验证链路可用性。本节聚焦最常用的三个工具,并给出可复用的命令模板。

选型建议:追求硬件极限性能(如验证RoCE v2配置是否生效)时用perftest;跨机房或异构网络快速摸底时用qperf;需要模拟真实应用读写模式时用ib_write_bw搭配不同消息大小和队列深度。
RDMA基准测试工具分层视图 硬件与驱动层 InfiniBand HCA / RoCE网卡 · 固件 · OFED驱动 · libibverbs 工具层(按测试模式分类) perftest 套件 ib_write_bw / ib_read_lat ib_send_bw / ib_atomic_lat qperf tcp_bw / rdma_write_bw ud_lat / rc_rdma_read_lat 辅助诊断工具 ibv_devinfo · ibdiagnet rdma_resource · smc-tools 测试方法层 带宽测试(BW)→ 吞吐量上限 · 延迟测试(Lat)→ 时延分布 · 双向/多流 → 扩展性验证 关键参数 -s 消息大小 -q 队列深度 -d ib设备 -x GID索引 -F 固定速率 -R 反向测试 -C 校验数据 -p 端口号 --report_gbits -o 老化时间

4.2 perftest:RDMA性能测试的“黄金标准”

perftest是OFED自带的官方测试套件,包含ib_write_bw、ib_read_bw、ib_send_bw、ib_write_lat等十余个可执行文件。其核心原理是:客户端(Client)与服务端(Server)建立QP连接后,通过固定大小的消息持续发送WR(Work Request),统计单位时间内完成的IO操作数,从而计算带宽或延迟。测试时需先启动服务端监听,再启动客户端发起连接。

4.2.1 带宽测试(ib_write_bw)

以下命令在服务端(IP 192.168.1.10)和客户端分别执行,测试RoCE v2链路的写带宽:

# 服务端(被动接收)
ib_write_bw -d mlx5_0 -x 3 -F --report_gbits

# 客户端(主动发送)
ib_write_bw -d mlx5_0 -x 3 -F 192.168.1.10 --report_gbits

关键参数说明:

  • -d mlx5_0:指定RDMA设备名称,可用ibv_devinfo查看。
  • -x 3:设置GID索引为3,对应RoCE v2(IPv4)模式;若使用InfiniBand native模式可省略。
  • -F:固定速率模式,避免CPU频率波动影响结果。
  • --report_gbits:以Gbit/s为单位输出带宽,便于直接对比网卡速率。

默认消息大小为65536字节(64KB),队列深度为8。若要测试小消息性能(如16字节),需显式指定:

ib_write_bw -d mlx5_0 -x 3 -s 16 -q 16 -F 192.168.1.10

4.2.2 延迟测试(ib_write_lat)

延迟测试采用Ping-Pong模式:客户端发送消息后等待服务端回包,记录往返时间(RTT)并除以2得到单向延迟。测试命令与带宽测试类似,但输出单位为微秒(us):

# 服务端
ib_write_lat -d mlx5_0 -x 3 -F

# 客户端
ib_write_lat -d mlx5_0 -x 3 -F 192.168.1.10
输出解读:perftest结果中BW average为平均带宽,Msg Rate为每秒消息数;延迟测试则输出Latency(平均延迟)、Min/Max(最小/最大延迟)和Percentile(百分位延迟)。若看到CPU Utilization接近100%,说明CPU成为瓶颈而非网络。

4.3 qperf:轻量级网络性能探测

qperf由OpenFabrics联盟维护,支持TCP、UDP、SCTP及RDMA多种协议测试。与perftest相比,qperf更注重跨协议对比和快速部署——它不需要预先加载内核模块,且支持一条命令同时测试多个维度。qperf的典型用法是:

# 服务端(监听端口)
qperf

# 客户端(测试TCP带宽和RDMA读延迟)
qperf -t 10 192.168.1.10 tcp_bw rdma_read_lat

qperf支持的内置测试项包括:

测试项 含义 典型输出
tcp_bw TCP流带宽 BW = 9.41 GB/sec
rdma_write_bw RDMA写带宽 BW = 11.2 GB/sec
rc_rdma_read_lat RC模式读延迟 Latency = 1.98 us
ud_bw 不可靠数据报带宽 BW = 10.8 GB/sec

qperf的-t参数指定测试时长(秒),-m设置消息大小,-i控制打印间隔。若需测试双向带宽,可添加-b参数(bidirectional)。

4.4 实操案例:RoCE v2链路性能验证

某数据中心新部署了100Gbps RoCE v2网络,需验证两台服务器之间的实际性能。操作流程如下:

  1. 环境检查:在两台服务器上执行ibv_devinfo确认设备状态为PORT_ACTIVE,链路速率为100 Gb/s。
  2. 连通性测试:使用rping -s -d mlx5_0(服务端)和rping -c -a 192.168.1.10 -d mlx5_0(客户端)验证基本数据通路。
  3. 带宽基线:运行ib_write_bw -d mlx5_0 -x 3 -F --report_gbits,预期结果接近95Gbps(考虑报文开销)。
  4. 小消息延迟:运行ib_write_lat -d mlx5_0 -x 3 -s 16 -F,记录平均延迟应小于2微秒。
  5. 多流扩展:使用ib_write_bw -d mlx5_0 -x 3 -F -n 4(4个QP并行)验证多流聚合带宽。

实测结果示例:

# ib_write_bw 输出(客户端)
---------------------------------------------------------------------------------------
                    RDMA_Write BW Test
 Dual-port       : OFF          Device         : mlx5_0
 Number of qps   : 1            Transport type : IB
 Connection type : RC           Using SRQ      : OFF
 CQ Moderation   : 100
---------------------------------------------------------------------------------------
 #bytes     #iterations    BW peak[MB/sec]    BW average[MB/sec]   MsgRate[Mpps]
 65536      1000000        11850.2            11842.7              0.1807
---------------------------------------------------------------------------------------

4.5 常见误区与排障要点

误区1:忽略GID索引导致RoCE v2测试失败。若未指定-x 3,perftest默认使用RoCE v1(GID索引0),在纯IPv4网络中会报cannot resolve destination address错误。务必先用ibv_devinfo -v确认可用的GID索引。

误区2:混淆带宽单位。perftest默认输出MB/sec(1MB=1024KB),而--report_gbits输出Gbit/sec(1Gbit=10^9bit)。对比网卡速率时务必统一单位,例如100Gbps网卡的理论上限为100/8=12.5GB/s,对应约11920MB/s。

误区3:测试时未固定CPU频率。现代CPU的Turbo Boost会导致延迟测试结果抖动。建议使用taskset -c 2绑定CPU核心,并结合-F参数固定速率。

排障清单:

  • 若带宽远低于预期,检查ibstat确认链路速率和宽度(如4X 100Gbps),并查看ethtool -S enp175s0f0中的rx_roce_packets计数。
  • 若延迟异常高(>10us),使用ibdiagnet -c检查子网管理器(SM)是否正常,以及是否存在拥塞。
  • 若测试中途断连,查看dmesg中是否有mlx5_core报错,并检查MTU是否一致(RoCE v2建议MTU=4096)。

最后需要强调的是:基准测试结果只代表硬件在理想驱动和空载网络下的能力。实际生产环境中,CPU中断处理、内存NUMA亲和性、交换机缓存策略都会影响最终性能。因此建议每次测试后记录完整的ibv_devinfo输出和内核版本,便于后续对比分析。