4. 基准测试工具介绍:常用工具的功能与用法
4.1 工具全景:从微基准到应用层
RDMA性能测试工具按测试层次可分为三类:微基准工具(perftest、qperf)、协议栈诊断工具(ibdiagnet、ibv_devinfo)和应用模拟工具(Intel MPI Benchmarks、Sockperf)。其中perftest是Mellanox/NVIDIA官方维护的OFED自带套件,直接封装了libibverbs原语,能精确测量硬件极限;qperf则更偏向于“黑盒”测试,适合快速验证链路可用性。本节聚焦最常用的三个工具,并给出可复用的命令模板。
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
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网络,需验证两台服务器之间的实际性能。操作流程如下:
- 环境检查:在两台服务器上执行
ibv_devinfo确认设备状态为PORT_ACTIVE,链路速率为100 Gb/s。 - 连通性测试:使用
rping -s -d mlx5_0(服务端)和rping -c -a 192.168.1.10 -d mlx5_0(客户端)验证基本数据通路。 - 带宽基线:运行
ib_write_bw -d mlx5_0 -x 3 -F --report_gbits,预期结果接近95Gbps(考虑报文开销)。 - 小消息延迟:运行
ib_write_lat -d mlx5_0 -x 3 -s 16 -F,记录平均延迟应小于2微秒。 - 多流扩展:使用
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 常见误区与排障要点
-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输出和内核版本,便于后续对比分析。