第二章:测试环境搭建——硬件选型与软件栈配置

做网络性能测试,最怕什么?

怕你折腾半天,最后发现瓶颈在硬件上。或者更惨——硬件买对了,驱动没装对,内核参数一塌糊涂,测出来的数据根本没法看。

这一章,我就带你一步步把测试环境搭扎实。说白了,就是让你少走弯路。

2.1 硬件选型:别在起跑线上输掉

硬件选型这事儿,我踩过不少坑。记得有一次,客户非要拿家用级网卡做数据中心测试,结果丢包率惨不忍睹。嗯,从那以后我学乖了——测试环境的硬件,必须按生产标准来。

2.1.1 服务器选型

服务器是测试的基石。我个人习惯,至少准备两台同配置的机器,一台当客户端,一台当服务端。

组件 推荐配置 我的经验
CPU Intel Xeon Gold 或 AMD EPYC,8核以上 别用桌面级CPU,中断处理能力差太多
内存 64GB DDR4 起 大页内存需要预留,32GB有时候真不够
PCIe 插槽 至少 x16 插槽,支持 PCIe 3.0/4.0 网卡带宽吃不满,多半是插槽问题
存储 NVMe SSD,500GB+ 日志和抓包文件写起来很快,别用机械盘
⚠️ 注意: 我曾经遇到过两台服务器CPU微架构不同,导致测试结果偏差超过15%。所以,两台机器最好完全同型号。

2.1.2 网卡选型

网卡是测试环境的核心。你想想看,如果网卡本身就有硬件offload问题,那测出来的延迟数据能信吗?

  • Mellanox ConnectX-5/6:我的首选。RDMA支持好,驱动成熟,社区活跃。
  • Intel XXV710:性价比之选。25Gbps测试够用,但别指望它跑满100G。
  • Solarflare SFN8xxx:延迟敏感场景的神器。硬件时间戳精度极高。
💡 小技巧: 买网卡时,记得确认固件版本。我见过一批旧固件的卡,开启RSS后直接丢包。升级固件后问题消失。

2.1.3 交换机选型

很多人忽略交换机,觉得直连就行。但真实场景下,交换机引入的延迟和抖动不可忽视。

我个人建议:

  • 测试延迟和吞吐时,优先用直连(DAC线缆或光纤直连)
  • 测试拥塞控制和多路径时,必须用管理型交换机,支持PFC、ECN
  • 交换机端口缓存至少8MB,否则小包测试时丢包率会飙升

2.2 软件栈配置:驱动和内核是隐形杀手

硬件选好了,软件配不对,等于白搭。我见过太多人,网卡插上去就跑默认驱动,结果性能只有一半。

2.2.1 操作系统选择

做网络性能测试,我推荐用 Ubuntu 22.04 LTSCentOS Stream 9。为什么?

  • 内核版本新(5.15+),原生支持很多网络优化特性
  • 驱动仓库更新及时,不用自己编译
  • 社区文档丰富,遇到问题好查
🔧 我的习惯: 装完系统第一件事,关掉防火墙和NetworkManager。这两货在测试时会偷偷改路由表,坑了我好几次。

2.2.2 驱动安装与调优

以Mellanox网卡为例,驱动安装其实不复杂,但有几个关键点:

# 安装MLNX_OFED驱动
wget https://content.mellanox.com/ofed/MLNX_OFED-5.8-1.0.1.1/MLNX_OFED_LINUX-5.8-1.0.1.1-ubuntu22.04-x86_64.tgz
tar xzf MLNX_OFED_LINUX-*.tgz
cd MLNX_OFED_LINUX-*
sudo ./mlnxofedinstall --force

# 验证驱动版本
ibstat | grep "Firmware version"
ethtool -i eth0 | grep driver

装完驱动后,记得调优:

  • 开启硬件时间戳ethtool -T eth0 确认支持
  • 关闭节能特性ethtool --set-priv-flags eth0 rx_energy_efficient off
  • 设置中断亲和性:把网卡中断绑定到物理核,别让它们抢L2缓存
⚠️ 避坑指南: 我曾经在某个项目里,驱动版本和内核不匹配,导致RDMA写操作直接卡死。后来发现是内核模块符号冲突。所以,驱动版本一定要和内核版本对应。

2.2.3 内核参数优化

内核参数是性能优化的最后一块拼图。我一般会改这几个:

参数 推荐值 说明
net.core.rmem_max 134217728 接收缓冲区最大128MB
net.core.wmem_max 134217728 发送缓冲区最大128MB
net.ipv4.tcp_rmem 4096 87380 134217728 TCP接收缓冲区自动调优
net.ipv4.tcp_wmem 4096 65536 134217728 TCP发送缓冲区自动调优
net.core.netdev_budget 600 每次轮询处理的数据包数
vm.nr_hugepages 1024 启用大页,减少TLB miss
# 一键应用上述参数
cat >> /etc/sysctl.conf << EOF
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_budget = 600
vm.nr_hugepages = 1024
EOF
sysctl -p
💡 提示: 改完参数后,用 sysctl net.core.rmem_max 确认生效。我见过有人改了文件但没执行 sysctl -p,结果参数根本没变。

2.3 知识体系总览

下面这张图,是我自己总结的测试环境搭建逻辑。你照着这个顺序来,基本不会漏东西。

测试环境搭建知识体系 硬件层 服务器(CPU/内存/PCIe) 网卡(Mellanox/Intel/Solarflare) 交换机(直连/管理型) → 同型号、PCIe带宽、固件版本 → 硬件offload、时间戳、RSS → 端口缓存、PFC/ECN支持 操作系统层 Ubuntu 22.04 LTS / CentOS Stream 9 内核版本 ≥ 5.15 → 关闭防火墙、NetworkManager、irqbalance 驱动层 MLNX_OFED / 原生驱动 固件升级、中断亲和性 → 版本匹配、关闭节能、硬件时间戳 内核参数层 缓冲区大小 / 大页 / 轮询预算 / TCP调优

这张图从左到右,从上到下,就是搭建环境的完整路径。你每完成一层,就打个勾。等四层都走完,测试环境才算真正就绪。


公众号:蓝海资料掘金营,微信deep3321