4、测试环境搭建:物理环境配置
做网络加速器性能测试,环境搭建是地基。地基不稳,后面测出来的数据全是废的。我见过太多团队,花大价钱买设备,结果因为环境没搭好,数据根本没法看。
这一节,咱们把物理环境拆开揉碎了讲。
4.1 服务器与客户端选型
先说硬件选型。我的原则很简单:被测设备要够强,辅助设备不能拖后腿。
服务器端,我一般推荐用双路Xeon或EPYC处理器,内存至少64GB。为什么?因为加速器要处理大量并发连接,CPU和内存不够,瓶颈就跑到服务器上了。你想想看,测出来的延迟到底是加速器的锅,还是服务器扛不住?
客户端这边,普通PC就行,但网卡得讲究。我习惯用Intel X710或Mellanox ConnectX系列,支持多队列和RSS(接收端缩放)。
关键配置清单:
- 服务器:双路Xeon Gold 6248R / 128GB RAM / 2×10GbE
- 客户端:Core i7-12700 / 32GB RAM / 1×10GbE
- 交换机:支持线速转发,关闭流控
4.2 网络拓扑设计
拓扑结构直接影响测试结果。我踩过最大的坑,就是拓扑设计不合理,导致数据包绕了远路。
标准拓扑是这样的:
客户端 —— 交换机 —— 加速器(DUT) —— 交换机 —— 服务器
注意,加速器要串接在路径中间。我曾经试过旁路模式,结果数据根本不走加速器,测了个寂寞。
下面这张图,是我常用的测试拓扑:
小技巧:实际部署时,我会在交换机上配置端口镜像。把加速器的进出流量都复制一份到监控口,方便抓包分析。这招帮我定位过不少诡异问题。
软件环境配置
4.3 操作系统与内核参数
操作系统我首选Ubuntu 22.04 LTS,内核5.15以上。为什么?因为新内核的TCP栈优化更好,对加速器测试更友好。
内核参数调优是重头戏。我直接给出一份经过实战检验的配置:
# /etc/sysctl.conf 关键参数
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.ipv4.tcp_rmem = 4096 87380 134217728
net.ipv4.tcp_wmem = 4096 65536 134217728
net.core.netdev_max_backlog = 50000
net.ipv4.tcp_congestion_control = bbr
net.ipv4.tcp_notsent_lowat = 16384
这里有个坑。我曾经把rmem_max设得特别大,结果内存直接爆了。后来学乖了,要根据实际带宽来算。公式很简单:缓冲区大小 ≥ 带宽 × RTT。比如10Gbps带宽、1ms延迟,缓冲区至少1.25MB。
4.4 防火墙与安全策略
测试环境里,防火墙能关就关。不是我不重视安全,而是防火墙会引入额外的延迟和CPU开销。
注意:如果必须保留防火墙,请确保:
- 关闭连接跟踪(conntrack)
- 关闭状态检测
- 使用裸规则(raw rules)
我习惯用iptables的raw表,跳过连接跟踪:
iptables -t raw -A PREROUTING -j NOTRACK
iptables -t raw -A OUTPUT -j NOTRACK
嗯,这样能减少30%以上的CPU开销。我在一次高并发测试中验证过,效果很明显。
时间同步与校准
4.5 NTP配置与精度要求
时间同步是测试中最容易被忽视的环节。你想想看,如果客户端和服务器时间差了几毫秒,延迟测试结果还有什么意义?
我的做法是:
- 所有设备使用同一台NTP服务器
- 使用chrony替代ntpd,同步精度更高
- 测试前手动校准一次
# chrony.conf 配置
server ntp.aliyun.com iburst
server ntp.tencent.com iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
配置完后,用chronyc sources -v检查同步状态。偏差超过100微秒就要排查原因。
避坑指南:我曾经遇到过虚拟机时间漂移严重的问题。后来发现是VM的时钟源没设置好。物理机用TSC,虚拟机用kvm-clock,千万别混用。
基线数据采集
4.6 什么是基线?为什么要采集?
基线就是加速器不工作时的网络性能数据。说白了,就是「裸奔」状态下的表现。
为什么要采集基线?两个原因:
- 对比基准:加速器效果好不好,得跟裸奔比
- 环境验证:确认测试环境本身没有瓶颈
4.7 基线采集步骤
我习惯用iPerf3和ping来采集基线。步骤很简单:
- 把加速器从链路中移除,客户端直连服务器
- 运行iPerf3测试TCP吞吐量
- 运行ping测试延迟和丢包率
- 记录数据,保存为基线文件
# 服务器端
iperf3 -s -p 5201
# 客户端
iperf3 -c 192.168.1.100 -p 5201 -t 60 -P 4
# 延迟测试
ping -c 1000 192.168.1.100
采集到的基线数据,我会整理成表格:
| 测试项 | 平均值 | 最小值 | 最大值 | 标准差 |
|---|---|---|---|---|
| TCP吞吐量 | 9.42 Gbps | 9.21 Gbps | 9.58 Gbps | 0.12 Gbps |
| 延迟(RTT) | 0.32 ms | 0.28 ms | 0.41 ms | 0.03 ms |
| 丢包率 | 0.00% | - | - | - |
重要:基线数据要保存原始日志。我习惯用iperf3 -J输出JSON格式,方便后续自动化分析。别问我为什么强调这个——有一次客户质疑数据,我直接把原始日志甩过去,问题秒解。
好了,环境搭建这部分就这些。记住一句话:测试环境越干净,测试结果越可信。别嫌麻烦,每一步都做到位,后面会省很多事。
公众号:蓝海资料掘金营,微信deep3321