4、带宽测试方法:点对点带宽测试、多节点并行带宽测试、不同消息大小下的带宽表现

带宽测试,说白了就是看看你的IB网络到底能跑多快。我见过不少团队,集群搭好了,跑个应用发现性能不对劲,结果一查,网络带宽根本没跑满。嗯,这其实很常见。今天我就把带宽测试的几种核心方法掰开揉碎了讲清楚。

4.1 点对点带宽测试:最基础的“单挑”

点对点测试,就是两台机器之间直接怼带宽。这是最基础、最干净的方法。我个人习惯用 ib_write_bw 这个工具,它是Mellanox(现NVIDIA)官方提供的perftest套件里的。

命令很简单,先在一台机器上启动服务端:

ib_write_bw -d mlx5_0 -p 18515 --report_gbits

然后在另一台机器上启动客户端:

ib_write_bw -d mlx5_0 -p 18515 192.168.1.10 --report_gbits

这里 -d mlx5_0 指定网卡设备,-p 是端口号,--report_gbits 让结果以Gbps显示。你想想看,如果连两台机器之间的带宽都跑不满,那整个集群的性能肯定有问题。

我的经验: 测试时一定要确保两端网卡速率匹配。我曾经遇到过一端是HDR100(100Gbps),另一端是HDR200(200Gbps),结果带宽只能跑到100Gbps。这不是工具的问题,是硬件协商的结果。

4.2 多节点并行带宽测试:模拟真实压力

点对点测试只是开胃菜。真实场景下,往往是几十甚至几百个节点同时在通信。这时候就需要多节点并行带宽测试了。

我常用的方法是使用 mpi 配合 osu_bwimb 工具。比如用OpenMPI启动多节点测试:

mpirun --hostfile hostfile.txt -np 16 --map-by node \
  /path/to/osu_bw -m 4194304

这里 -np 16 表示启动16个进程,--map-by node 保证每个节点只跑一个进程,-m 4194304 设置消息大小为4MB。

为什么要做多节点测试?说白了,就是看你的网络在并发压力下会不会掉速。我见过一个案例,点对点测试能跑到196Gbps(接近200Gbps的HDR100),但一上16节点并行,带宽直接掉到120Gbps。后来发现是交换机的内部拥塞控制没调好。

注意: 多节点测试时,一定要关注“All-to-All”模式。很多工具默认是“一对多”模式,这其实测的是单节点的发送能力,不是真正的并行带宽。

4.3 不同消息大小下的带宽表现:小包大包,各有门道

带宽不是一成不变的。消息大小不同,带宽表现天差地别。我习惯把消息大小分成几个区间来测:

消息大小 典型场景 带宽表现
1字节 - 256字节 控制信号、ACK包 带宽很低(受延迟限制)
1KB - 64KB 小数据块、元数据 带宽逐渐上升
256KB - 1MB 典型数据传输 接近峰值带宽
4MB以上 大文件、批量数据 达到峰值带宽

为什么会这样?因为IB网络有“消息分割”机制。小消息会被封装成较小的数据包,协议开销占比大,带宽自然上不去。大消息可以充分利用MTU(通常为4KB)进行批量传输,效率高得多。

我建议用 ib_write_bw-a 参数来自动遍历所有消息大小:

ib_write_bw -d mlx5_0 -p 18515 --report_gbits -a

这样会输出从1字节到2MB的完整带宽曲线。嗯,拿到这个曲线,你就能一眼看出你的网络在小包场景下有没有问题。

避坑指南: 我曾经遇到过一个小包带宽异常低的情况,只有理论值的30%。排查了半天,发现是网卡的RX队列深度设置太小,导致小包频繁丢包重传。把队列深度从128调到1024后,小包带宽直接翻倍。

4.4 知识体系总览

下面这张图是我自己总结的带宽测试方法论,你可以对照着看:

IB网络带宽测试方法体系 点对点带宽测试 • 基础单挑测试 • 使用 ib_write_bw • 验证硬件速率 • 排除网络瓶颈 多节点并行测试 • 模拟真实压力 • 使用 MPI + osu_bw • 关注 All-to-All • 发现拥塞问题 消息大小测试 • 小包大包分场景 • 使用 -a 参数遍历 • 分析带宽曲线 • 优化队列参数 测试流程建议 1. 先做点对点测试,确认单链路带宽达标 2. 再做多节点并行测试,验证网络扩展性 3. 最后遍历消息大小,找出小包性能瓶颈 4. 根据测试结果调整网卡参数和交换机配置

这张图把三种测试方法串起来了。你从点对点开始,逐步增加复杂度,最后通过消息大小测试来精细化调优。我个人觉得,这套流程走下来,你的IB网络性能基本就摸透了。

小技巧: 测试结果一定要保存下来,建立基线。我每次调完参数都会重新跑一遍全量测试,对比前后差异。这样出了问题也能快速回滚。

好了,带宽测试的方法就这些。记住,测试不是目的,目的是找到瓶颈并优化它。你动手试试看,有问题随时交流。


公众号:蓝海资料掘金营,微信deep3321