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 超大规模组网 散热要做好,发热量很大
我的经验:曾经有一次用某品牌消费级网卡测40Gbps带宽,结果死活只能跑到20Gbps。查了半天,发现是PCIe插槽被降速到了x4。所以,上机前先用 lspci -vvv 确认链路宽度和速率。

2.1.2 交换机选型

交换机在测试中扮演“透明管道”的角色。理想情况下,它应该对测试结果零干扰。但现实往往很骨感。

  • 背板带宽:必须大于所有端口速率之和。比如48口千兆+4口万兆,背板带宽至少得 48×1 + 4×10 = 88Gbps,实际建议留20%余量。
  • 缓存大小:做长距离测试时,大缓存能有效减少丢包。我建议至少4MB以上。
  • 流控(Flow Control):测试时建议关闭。我曾经被这个坑过——开了流控,丢包率是0,但吞吐量也上不去,因为数据都被“憋”在缓存里了。
注意:不要用家用交换机做专业带宽测试。它们的转发芯片性能太弱,很容易成为瓶颈。我见过有人用几十块钱的交换机测万兆,结果交换机直接过热保护了。

2.1.3 线缆选型

线缆这东西,看着简单,其实最容易出问题。我总结了一个口诀:短距离用铜缆,长距离用光缆,中间距离看预算。

线缆类型 最大距离 优点 缺点
Cat6a 网线 100米(10GbE) 便宜、易部署 距离受限、抗干扰差
DAC 高速铜缆 7米 低延迟、即插即用 距离短、不可弯曲
单模光纤 10公里+ 距离远、抗干扰 成本高、需要光模块
核心建议:测试环境里,能用DAC就别用网线。DAC的延迟比网线低30%左右,而且信号更稳定。我自己的测试台,全部用的DAC线缆。

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
小技巧:iPerf3 默认只测单线程。想测多核性能?加 -P 参数。我一般先测单线程,再测多线程,这样能看出瓶颈在CPU还是网络。

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
注意:qperf 测试前,确保两端都安装了 rdma-core 驱动。否则它会自动回退到 TCP 模式,测出来的数据就没意义了。

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 |-----|        |
+-----------+     +--------+
我的建议:刚开始做测试时,先用基础拓扑。等把网卡、驱动、协议栈都调优好了,再引入交换机。这样一旦出问题,你能快速定位是哪个环节的锅。
带宽测试环境搭建 · 知识体系 硬件选型 网卡 · 接口:1G / 10G / 25G / 40G · 芯片:Intel / Mellanox · 确认 PCIe 链路宽度 交换机 · 背板带宽 > 端口总和 · 缓存 ≥ 4MB · 关闭流控 线缆 · 短距:DAC 铜缆 · 中距:Cat6a 网线 · 长距:单模光纤 ⚠ 避免消费级网卡 软件选型 iPerf3 · 通用测试,支持 TCP/UDP · 多线程:-P 参数 · 适合 90% 场景 nuttcp · UDP 测试更精准 · 丢包/抖动统计详细 · 适合交叉验证 qperf · RDMA / InfiniBand 测试 · 支持 RC / UD 模式 · 需 rdma-core 驱动 ⚠ 关键测试交叉验证 拓扑设计 基础拓扑 · 点对点直连 · 无中间设备 · 适合基准测试 标准拓扑 · 经过交换机 · 交换机设为透传 · 关闭优化功能 进阶拓扑 · 多对一测试 · 验证收包能力 · 发现 RSS 问题 ⚠ 能直连就别过交换机 核心原则:测试设备性能 > 被测设备性能 · 简单就是美 · 交叉验证

好了,硬件选型、软件选型、拓扑设计,这三块就是搭建测试环境的全部内容。记住一句话:测试环境越简单,结果越可靠。下一节咱们聊聊具体的测试参数怎么配,那才是真正出活儿的地方。

可可精品资料库