2. 测试环境搭建:硬件选型、软件选型与网络拓扑设计

做带宽测试,最怕什么?

我最怕的是测了半天,结果出来一分析——发现是环境搭错了。你想想看,网卡选了个半残的,交换机背板带宽不够,网线还是五类线……那测出来的数据,说白了就是一堆废纸。

这一章,我就把硬件选型、软件选型、网络拓扑设计这三块掰开揉碎了讲。都是我这些年踩过的坑,你直接拿去用就行。

核心原则:测试环境的瓶颈,绝不能出现在被测对象之外。网卡、交换机、网线、软件,任何一个环节拖后腿,结果就失真。

2.1 硬件选型:网卡、交换机、网线

硬件选型这事儿,我习惯从后往前推。先想清楚你要测多大的带宽,再反推需要什么硬件。

2.1.1 网卡选型

网卡是带宽测试的第一道关口。我个人习惯,至少选双口或四口的万兆网卡。为什么?因为单口网卡做测试,你很难排除PCIe带宽瓶颈。

我记得有一次,客户说他们的服务器只能跑到6Gbps,死活上不去万兆。我过去一看,网卡插在PCIe 2.0 x4的槽位上……理论带宽才2GB/s,刨去开销,跑不到万兆太正常了。

选网卡时,重点关注这几个参数:

  • 接口类型:PCIe 3.0 x8 或更高,确保总线带宽不成为瓶颈
  • 网卡芯片:Intel X710/XL710、Mellanox ConnectX-4/5/6 系列,驱动成熟稳定
  • 端口数量:双口起步,方便做双向测试或端口聚合
  • 支持特性:RSS(接收端缩放)、TSO(TCP分段卸载)、LRO(大接收卸载)

我的小技巧:测试前先用 ethtool -i eth0 看看驱动版本和固件版本。我遇到过固件太老导致丢包率异常的情况,升级固件后问题就解决了。

2.1.2 交换机选型

交换机这块,很多人容易忽略。觉得只要端口速率够就行。其实不然。

我曾经在一个项目中,两台服务器直连能跑满万兆,但通过交换机后就只能跑到7Gbps。查了半天,发现那台交换机的背板带宽只有20Gbps,接了4个万兆端口,早就过载了。

选交换机时,我建议你关注这几点:

  • 背板带宽:至少是所有端口速率总和的2倍。比如8个万兆口,背板带宽至少160Gbps
  • 包转发率:万兆端口至少14.88Mpps(百万包每秒),这是线速转发的基本要求
  • 缓存大小:至少4MB以上,避免突发流量导致丢包
  • 流控支持:IEEE 802.3x 流控,测试时建议关闭,否则影响结果
端口数量 最低背板带宽 推荐型号示例
4口万兆 80 Gbps H3C S5560-30S-EI
8口万兆 160 Gbps Cisco Nexus 93180YC-FX
2口25G 100 Gbps Mellanox SN2010

注意:测试时尽量把交换机上的其他业务端口都拔掉,或者划一个独立的VLAN。我见过因为广播风暴把测试带宽吃掉的案例,排查起来特别头疼。

2.1.3 网线选型

网线这事儿,看着简单,坑却不少。

我记得有一次,测试10Gbps带宽,结果怎么都跑不满。换了好几块网卡都不行。最后发现,用的是一根Cat5e的网线,长度还超过了30米。换成Cat6a之后,问题立刻解决。

不同速率对应的网线标准:

  • 1Gbps:Cat5e 足够,长度不超过100米
  • 10Gbps:Cat6a 或 Cat7,长度不超过30米(Cat6勉强能用,但别超过55米)
  • 25Gbps/40Gbps:建议用光纤或DAC高速线缆,铜缆限制太多

避坑指南:我曾经用一根看起来崭新的Cat6网线测10G,结果一直报CRC错误。用线缆测试仪一查,发现有一对线序接反了。所以,有条件的话,测试前用Fluke之类的工具扫一下线缆质量。

2.2 软件选型:iPerf3、nuttcp、qperf

软件选型这块,我个人的经验是:没有最好的工具,只有最合适的场景。

2.2.1 iPerf3 —— 最通用的选择

iPerf3 是我用得最多的工具。为什么?因为它简单、跨平台、社区活跃。你想想看,Linux、Windows、macOS、甚至Android上都能跑,这就很省心。

安装方式:

# Ubuntu/Debian
sudo apt install iperf3

# CentOS/RHEL
sudo yum install iperf3

# macOS
brew install iperf3

基本用法:

# 服务端(接收端)
iperf3 -s -p 5201

# 客户端(发送端)
iperf3 -c 192.168.1.100 -p 5201 -t 30 -P 4

参数说明:-t 30 表示测试30秒,-P 4 表示4个并行流。我习惯先用单流测,再用多流测,对比看结果。

重要提醒:iPerf3 默认是单向测试。要测双向带宽,需要加 -d 或 --bidir 参数。我见过不少人只测单向就下结论,结果双向性能差了一大截。

2.2.2 nuttcp —— 低开销的替代方案

nuttcp 是我在嵌入式设备上常用的工具。它比 iPerf3 更轻量,CPU占用率更低。说白了,就是适合在资源受限的环境下用。

安装方式:

# 下载源码编译
wget https://raw.githubusercontent.com/nuttcp/nuttcp/master/nuttcp.c
gcc -O3 -o nuttcp nuttcp.c
sudo cp nuttcp /usr/local/bin/

基本用法:

# 服务端
nuttcp -S

# 客户端(发送10秒)
nuttcp -t 10 192.168.1.100

nuttcp 的输出很简洁,直接告诉你吞吐量、丢包率、重传率。我习惯用它做快速验证,确认网络链路有没有明显问题。

2.2.3 qperf —— 关注延迟和带宽

qperf 这个工具,我主要用它来测延迟。它不仅能测TCP/UDP带宽,还能测RDMA(远程直接内存访问)的延迟和带宽。如果你在做高性能计算或存储网络,qperf 是必备工具。

安装方式:

# Ubuntu/Debian
sudo apt install qperf

# CentOS/RHEL
sudo yum install qperf

基本用法:

# 服务端
qperf

# 客户端(测TCP带宽和延迟)
qperf 192.168.1.100 tcp_bw tcp_lat

qperf 的输出会同时显示带宽和延迟,这对分析网络性能很有帮助。比如,带宽很高但延迟也高,那可能是缓冲区配置有问题。

工具 适用场景 优势 劣势
iPerf3 通用带宽测试 跨平台、功能丰富 CPU占用略高
nuttcp 嵌入式/低资源环境 轻量、低开销 功能相对简单
qperf 延迟敏感场景/RDMA 同时测带宽和延迟 配置稍复杂

2.3 网络拓扑设计

拓扑设计这事儿,我习惯画图。别嫌麻烦,一张图能省你半天排查时间。

下面是我最常用的三种测试拓扑,用SVG画出来了,你直接参考:

带宽测试网络拓扑设计 拓扑一:直连模式(推荐) 服务器A 网线/光纤直连 服务器B 优点:排除交换机干扰 缺点:只能测点对点 拓扑二:交换机模式 服务器A 交换机 服务器B 适用场景:验证交换机转发性能、多端口测试 拓扑三:多对一模式(压力测试) 客户端1 客户端2 客户端3 服务端 适用场景:验证服务端吞吐上限 注意:客户端需同步启动

我个人最推荐的是拓扑一——直连模式。为什么?因为排除了交换机这个变量,问题定位起来简单得多。你想想看,如果直连都跑不满,那肯定是网卡、驱动或系统配置的问题,跟网络设备没关系。

拓扑二适合验证交换机的性能。我一般在直连测试通过后,再接入交换机做对比测试。如果直连能跑满,过交换机就掉速,那问题大概率在交换机上。

拓扑三是我做压力测试时用的。比如要验证一台服务器能不能同时处理多个客户端的请求。这里有个坑——多个客户端要尽量同步启动,否则先启动的客户端会把带宽占满,后面的客户端测出来就不准了。

重要提醒:不管用哪种拓扑,测试前一定要确认两端的时间同步。我遇到过因为NTP没配好,两边时间差了十几秒,结果测试数据对不上,排查了半天才发现是时间问题。

好了,硬件选型、软件选型、拓扑设计这三块,我就讲到这里。你搭建环境时,按这个思路来,基本不会出大问题。记住一句话:测试环境越简单,问题定位越容易。

最后一个小建议:每次测试前,先跑一遍 ping 检查连通性和延迟。延迟超过1ms就要警惕了,可能是链路有问题。我习惯用 ping -c 100 来采样,看有没有丢包和延迟抖动。

想要更多资料,联系可可