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显示。你想想看,如果连两台机器之间的带宽都跑不满,那整个集群的性能肯定有问题。
4.2 多节点并行带宽测试:模拟真实压力
点对点测试只是开胃菜。真实场景下,往往是几十甚至几百个节点同时在通信。这时候就需要多节点并行带宽测试了。
我常用的方法是使用 mpi 配合 osu_bw 或 imb 工具。比如用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。后来发现是交换机的内部拥塞控制没调好。
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的完整带宽曲线。嗯,拿到这个曲线,你就能一眼看出你的网络在小包场景下有没有问题。
4.4 知识体系总览
下面这张图是我自己总结的带宽测试方法论,你可以对照着看:
这张图把三种测试方法串起来了。你从点对点开始,逐步增加复杂度,最后通过消息大小测试来精细化调优。我个人觉得,这套流程走下来,你的IB网络性能基本就摸透了。
好了,带宽测试的方法就这些。记住,测试不是目的,目的是找到瓶颈并优化它。你动手试试看,有问题随时交流。
公众号:蓝海资料掘金营,微信deep3321