第二章:测试环境搭建——硬件选型与软件栈配置
做网络性能测试,最怕什么?
怕你折腾半天,最后发现瓶颈在硬件上。或者更惨——硬件买对了,驱动没装对,内核参数一塌糊涂,测出来的数据根本没法看。
这一章,我就带你一步步把测试环境搭扎实。说白了,就是让你少走弯路。
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 LTS 或 CentOS 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 知识体系总览
下面这张图,是我自己总结的测试环境搭建逻辑。你照着这个顺序来,基本不会漏东西。
这张图从左到右,从上到下,就是搭建环境的完整路径。你每完成一层,就打个勾。等四层都走完,测试环境才算真正就绪。
公众号:蓝海资料掘金营,微信deep3321