2. 测试环境搭建:硬件选型、软件选型、网络拓扑设计
做带宽测试,说白了就是给网络设备“体检”。体检结果准不准,很大程度上取决于你用的“仪器”和“环境”。我见过太多人拿着千兆网卡去测万兆链路,结果怎么跑都跑不满,还以为是设备有问题。嗯,这里面的坑,咱们一个一个说。
2.1 硬件选型:别让硬件成为瓶颈
硬件选型有个核心原则:测试设备的性能,必须高于被测设备的性能。你想想看,用一辆奥拓去测法拉利的极速,能测出来吗?
2.1.1 网卡选型
网卡是数据进出的第一道关口。我个人习惯,先看接口类型,再看芯片方案。
| 接口类型 | 推荐芯片 | 适用场景 | 避坑点 |
|---|---|---|---|
| 千兆(1GbE) | Intel I210 / I350 | 基础测试、管理口 | 别用Realtek,丢包率感人 |
| 万兆(10GbE) | Intel X710 / Mellanox ConnectX-4 | 数据中心、高性能测试 | 注意PCIe通道数,x8起步 |
| 25GbE / 40GbE | Mellanox ConnectX-5 / 6 | 超大规模组网 | 散热要做好,发热量很大 |
2.1.2 交换机选型
交换机在测试中扮演“透明管道”的角色。理想情况下,它应该对测试结果零干扰。但现实往往很骨感。
- 背板带宽:必须大于所有端口速率之和。比如48口千兆+4口万兆,背板带宽至少得 48×1 + 4×10 = 88Gbps,实际建议留20%余量。
- 缓存大小:做长距离测试时,大缓存能有效减少丢包。我建议至少4MB以上。
- 流控(Flow Control):测试时建议关闭。我曾经被这个坑过——开了流控,丢包率是0,但吞吐量也上不去,因为数据都被“憋”在缓存里了。
2.1.3 线缆选型
线缆这东西,看着简单,其实最容易出问题。我总结了一个口诀:短距离用铜缆,长距离用光缆,中间距离看预算。
| 线缆类型 | 最大距离 | 优点 | 缺点 |
|---|---|---|---|
| Cat6a 网线 | 100米(10GbE) | 便宜、易部署 | 距离受限、抗干扰差 |
| DAC 高速铜缆 | 7米 | 低延迟、即插即用 | 距离短、不可弯曲 |
| 单模光纤 | 10公里+ | 距离远、抗干扰 | 成本高、需要光模块 |
2.2 软件选型:工欲善其事,必先利其器
软件选型其实很简单——根据你要测的协议和场景来定。市面上工具很多,但真正好用的就那几个。
2.2.1 iPerf3:最通用的选择
iPerf3 是目前最流行的带宽测试工具。它支持 TCP、UDP、SCTP 等多种协议。我个人习惯用它做90%的测试场景。
# 服务端启动
iperf3 -s -p 5201
# 客户端测试(TCP,30秒,4个并行流)
iperf3 -c 192.168.1.100 -p 5201 -t 30 -P 4
# UDP测试(指定带宽1000Mbps)
iperf3 -c 192.168.1.100 -u -b 1000M -t 30
2.2.2 nuttcp:更精准的UDP测试
nuttcp 是我做UDP测试时的首选。为什么?因为它对丢包和抖动的统计更精细。iPerf3 的UDP模式有时候会“美化”结果,但 nuttcp 不会。
# 服务端
nuttcp -S
# 客户端(UDP,测试10秒)
nuttcp -u -R 1000M -t 10 192.168.1.100
我曾经用这两个工具同时测同一个链路,iPerf3 显示丢包率0.01%,nuttcp 显示0.05%。后来用抓包工具验证,nuttcp 的数据更准。所以,关键测试建议用 nuttcp 做交叉验证。
2.2.3 qperf:RDMA场景必备
如果你要测 RDMA(远程直接内存访问)或者 InfiniBand 网络,qperf 是绕不开的工具。它支持 RC(可靠连接)和 UD(不可靠数据报)两种模式。
# 服务端
qperf
# 客户端(测试RC带宽)
qperf 192.168.1.100 rc_bandwidth
# 测试延迟
qperf 192.168.1.100 rc_latency
2.3 网络拓扑设计:简单就是美
拓扑设计有个原则:能直连就别过交换机,能少跳就别多跳。测试拓扑越复杂,引入的变量就越多,排查问题就越困难。
2.3.1 基础拓扑:点对点直连
这是最理想的测试拓扑。两台服务器用一根线缆直连,中间没有任何设备。适合做网卡性能基准测试。
+-----------+ +-----------+
| Server A |----------| Server B |
| (iPerf3) | 线缆 | (iPerf3) |
+-----------+ +-----------+
2.3.2 标准拓扑:经过交换机
当需要测试交换机性能,或者模拟真实网络环境时,用这个拓扑。注意:交换机要配置为透传模式,关闭所有优化功能。
+-----------+ +--------+ +-----------+
| Server A |-----| Switch |-----| Server B |
| (iPerf3) | | (L2) | | (iPerf3) |
+-----------+ +--------+ +-----------+
2.3.3 进阶拓扑:多对一测试
这个拓扑用来测试服务器的“收包能力”。我曾经用这个拓扑发现过某款网卡的RSS(接收端缩放)有bug——多队列负载严重不均。
+-----------+ +--------+
| Client 1 |-----| |
+-----------+ | |
+-----------+ | Server |
| Client 2 |-----| (DUT) |
+-----------+ | |
+-----------+ | |
| Client 3 |-----| |
+-----------+ +--------+
好了,硬件选型、软件选型、拓扑设计,这三块就是搭建测试环境的全部内容。记住一句话:测试环境越简单,结果越可靠。下一节咱们聊聊具体的测试参数怎么配,那才是真正出活儿的地方。