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) —— 交换机 —— 服务器

注意,加速器要串接在路径中间。我曾经试过旁路模式,结果数据根本不走加速器,测了个寂寞。

下面这张图,是我常用的测试拓扑:

客户端 交换机A 加速器 (被测设备) 交换机B 服务器 数据流向:客户端 → 加速器 → 服务器 双向流量均经过加速器处理

小技巧:实际部署时,我会在交换机上配置端口镜像。把加速器的进出流量都复制一份到监控口,方便抓包分析。这招帮我定位过不少诡异问题。

软件环境配置

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配置与精度要求

时间同步是测试中最容易被忽视的环节。你想想看,如果客户端和服务器时间差了几毫秒,延迟测试结果还有什么意义?

我的做法是:

  1. 所有设备使用同一台NTP服务器
  2. 使用chrony替代ntpd,同步精度更高
  3. 测试前手动校准一次
# 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来采集基线。步骤很简单:

  1. 把加速器从链路中移除,客户端直连服务器
  2. 运行iPerf3测试TCP吞吐量
  3. 运行ping测试延迟和丢包率
  4. 记录数据,保存为基线文件
# 服务器端
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