2. 测试环境搭建:硬件选型与软件栈
吞吐测试这件事,说白了就是「用硬件堆出确定性」。我见过太多团队在软件层面死磕,结果发现瓶颈在网卡中断分配不均,或者交换机 buffer 太小。环境搭对了,问题就暴露了一半。这一章,我把这些年踩过的坑和验证过的方案,掰开揉碎讲给你听。
2.1 服务器选型:别让 CPU 成为瓶颈
很多人觉得吞吐测试嘛,CPU 够用就行。其实不然。我遇到过一台 32 核的机器,跑 10G 线速时 CPU 直接飙到 90%,后来发现是 NUMA 架构没对齐。你想想看,数据从网卡进来,跨 NUMA 节点访问内存,延迟直接翻倍。
我的建议是:
- CPU 主频 > 2.5GHz,核心数至少 8 核以上。别用低频节能型 CPU,那玩意儿跑吞吐测试就是给自己挖坑。
- NUMA 节点数越少越好。单节点最好,双节点也能接受。我曾经在 4 节点机器上做测试,光调中断亲和性就花了两天。
- 内存至少 64GB,DDR4 3200 以上。吞吐测试时,内存带宽往往先于 CPU 成为瓶颈。
关键参数速查表
| 组件 | 最低要求 | 推荐配置 | 我的备注 |
|---|---|---|---|
| CPU | 8 核 @2.0GHz | 16 核 @3.0GHz | 别用 AMD EPYC 的某些低频型号 |
| 内存 | 32GB DDR4 | 128GB DDR5 | 带宽比容量更重要 |
| PCIe 插槽 | PCIe 3.0 x8 | PCIe 4.0 x16 | 网卡带宽全靠它 |
2.2 网卡选型:决定吞吐上限的关键
网卡这东西,一分钱一分货。我见过有人用消费级网卡跑 40G 测试,结果丢包率惨不忍睹。说白了,服务器级网卡和桌面级网卡,根本是两个物种。
我个人习惯这样选:
- Mellanox ConnectX 系列:做吞吐测试的首选。驱动成熟,工具链完善。我手头有块 ConnectX-5,跑了三年没出过问题。
- Intel E810 系列:兼容性最好。如果你用的是 Intel CPU,这套组合基本不会踩坑。
- Broadcom NetXtreme 系列:性价比高。预算有限时可以考虑,但驱动调优要花些功夫。
避坑指南:我曾经贪便宜买了块「拆机」网卡,结果 firmware 版本太老,死活不支持 PTP 时间戳。后来花了三天才刷好固件。记住,网卡 firmware 版本一定要和驱动匹配,这是血的教训。
2.3 交换机选型:别让网络成为瓶颈
很多人只关注服务器,忽略了交换机。其实,交换机才是吞吐测试的「隐形杀手」。我遇到过一台交换机,标称 40G 端口,实际跑 30G 就开始丢包。为什么?因为它的 buffer 只有 4MB。
选型要点:
- 端口速率:至少 25G/100G。别用 10G 交换机测 25G 网卡,那叫自欺欺人。
- Buffer 大小:至少 8MB 每端口。吞吐测试时,突发流量全靠 buffer 扛。
- 支持 PFC/ECN:如果你要做 RoCEv2 测试,这两项必须支持。
注意:有些交换机标称「线速转发」,但实际开启 ACL 或 QoS 后性能会下降。我建议你在选型时,要求厂商提供「最差情况」下的吞吐数据,而不是「理想情况」。
2.4 软件栈:OS、驱动与工具链
硬件选好了,软件就是灵魂。我见过有人用 Ubuntu Desktop 做吞吐测试,结果被 GUI 进程抢了 CPU。嗯,这里要注意:吞吐测试的 OS,越干净越好。
我的推荐组合:
| 组件 | 推荐版本 | 理由 |
|---|---|---|
| OS | Ubuntu Server 22.04 LTS / CentOS Stream 9 | 内核新,驱动支持好 |
| 内核 | 5.15+ 或 6.x | 支持 XDP、AF_XDP 等新特性 |
| 网卡驱动 | mlx5_core 最新版 | Mellanox 官方驱动,性能最优 |
| DPDK | 22.11 LTS | 稳定,社区活跃 |
| 测试工具 | iperf3 / pktgen-dpdk / TRex | 覆盖 TCP/UDP/原始包 |
驱动安装要点:
# 以 Mellanox ConnectX-5 为例
# 1. 下载官方驱动
wget https://www.mellanox.com/downloads/MLNX_OFED/MLNX_OFED_LINUX-5.8-1.0.1.1/MLNX_OFED_LINUX-5.8-1.0.1.1-ubuntu22.04-x86_64.tgz
# 2. 安装依赖
sudo apt-get install -y gcc make libelf-dev
# 3. 安装驱动
sudo ./mlnxofedinstall --force
# 4. 重启后检查
ibdev2netdev -v
小技巧:安装完驱动后,记得执行 sudo mlxconfig -d /dev/mst/mt4119_pciconf0 set ADVANCED_PCI_SETTINGS=1。这个参数能开启网卡的高级 PCIe 特性,吞吐能提升 5-10%。
2.5 整体架构图
下面这张图,是我做吞吐测试时的标准拓扑。你照着搭,基本不会出大问题。
2.6 环境验证清单
硬件和软件都搭好了,别急着跑测试。先做一轮验证,确保环境没问题。我每次都会按这个清单走一遍:
- 链路层验证:
ethtool eth0 | grep -i link,确认端口 up,速率正确。 - 驱动版本检查:
ethtool -i eth0,确认驱动版本和 firmware 匹配。 - 中断亲和性:
cat /proc/interrupts | grep eth0,确认中断均匀分布在各个 CPU 核心上。 - 基础连通性:
ping -c 10 -s 1472 192.168.1.2,确认 MTU 1500 下无丢包。 - 吞吐基线:
iperf3 -c 192.168.1.2 -t 30 -P 4,确认能达到预期带宽的 90% 以上。
重要:如果 iperf3 测试结果低于预期,不要急着调优。先检查网卡配置:ethtool -K eth0 gro on gso on tso on。我遇到过好几次,都是因为 offload 没开导致性能腰斩。
环境搭好了,下一步就是抓包。但抓包工具怎么选、参数怎么配,那又是另一门学问了。不过别急,先把这套环境跑稳了再说。