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画出来了,你直接参考:
我个人最推荐的是拓扑一——直连模式。为什么?因为排除了交换机这个变量,问题定位起来简单得多。你想想看,如果直连都跑不满,那肯定是网卡、驱动或系统配置的问题,跟网络设备没关系。
拓扑二适合验证交换机的性能。我一般在直连测试通过后,再接入交换机做对比测试。如果直连能跑满,过交换机就掉速,那问题大概率在交换机上。
拓扑三是我做压力测试时用的。比如要验证一台服务器能不能同时处理多个客户端的请求。这里有个坑——多个客户端要尽量同步启动,否则先启动的客户端会把带宽占满,后面的客户端测出来就不准了。
重要提醒:不管用哪种拓扑,测试前一定要确认两端的时间同步。我遇到过因为NTP没配好,两边时间差了十几秒,结果测试数据对不上,排查了半天才发现是时间问题。
好了,硬件选型、软件选型、拓扑设计这三块,我就讲到这里。你搭建环境时,按这个思路来,基本不会出大问题。记住一句话:测试环境越简单,问题定位越容易。
最后一个小建议:每次测试前,先跑一遍 ping 检查连通性和延迟。延迟超过1ms就要警惕了,可能是链路有问题。我习惯用 ping -c 100 来采样,看有没有丢包和延迟抖动。
想要更多资料,联系可可