第二章:测试环境搭建——硬件选型与软件栈配置
做带宽测试,最怕什么?
我最怕环境没搭好,测了半天,结果全是假数据。你想想看,网卡跑不满、交换机丢包、驱动版本不对——这些坑我全踩过。今天咱们就聊聊,怎么搭一个靠谱的测试环境。
2.1 服务器选型:别在CPU上省钱
服务器是测试的根基。我个人习惯,选服务器时重点关注三点:CPU、PCIe通道、内存带宽。
CPU怎么选?
别用低端Xeon。我建议至少用Xeon Silver级别,或者AMD EPYC。为什么?因为带宽测试需要CPU能快速处理中断和内存拷贝。低端CPU的L3缓存小,内存控制器也弱,很容易成为瓶颈。
我在项目中遇到过,用E-2300系列测10Gbps,CPU直接飙到100%。换了Gold 6418H,占用率降到30%。
核心建议:
- CPU核心数:至少8核,推荐16核以上
- 主频:3.0GHz以上,睿频越高越好
- PCIe版本:至少PCIe 4.0,最好PCIe 5.0
- 内存:DDR5,频率4800MHz以上
内存别省。带宽测试时,内存要存大量数据包。我一般配128GB起步。你想想看,跑64字节小包时,每秒几百万个包,内存带宽不够直接丢包。
2.2 网卡选型:决定测试上限
网卡是测试的咽喉。选错了,后面全白搭。
主流网卡对比:
| 型号 | 速率 | PCIe接口 | 适用场景 |
|---|---|---|---|
| Mellanox ConnectX-5 | 25/50Gbps | PCIe 3.0 x16 | 通用性能测试 |
| Mellanox ConnectX-6 | 100Gbps | PCIe 4.0 x16 | 高吞吐场景 |
| Intel E810 | 100Gbps | PCIe 4.0 x16 | 兼容性要求高 |
| Broadcom BCM57508 | 200Gbps | PCIe 5.0 x16 | 极限性能测试 |
嗯,这里要注意:别只看标称速率。我曾经用某款25G网卡,跑大包没问题,一跑64字节小包就掉到10G。后来发现是硬件队列太少,只有8个。所以选网卡时,一定要看队列数、RSS支持、硬件卸载能力。
我的经验:测试100Gbps以下,ConnectX-5足够。测100Gbps以上,建议ConnectX-6或E810。别贪便宜买杂牌,丢包率会让你怀疑人生。
2.3 交换机选型:别让网络成为瓶颈
交换机是测试的中间人。很多人只关注服务器,忽略了交换机。
关键参数:
- 背板带宽:至少是端口总速率的2倍
- 包转发率:能处理线速小包
- 缓存大小:越大越好,避免突发丢包
- 支持流控:802.3x PFC
我曾经在项目中,用一台低端交换机测40Gbps。结果发现,只要流量超过30G,交换机就开始丢包。查了半天,发现是背板带宽不够。后来换了Mellanox SN2700,问题解决。
避坑指南:我曾经以为所有交换机都能线速转发。后来发现,很多交换机标称48个25G端口,但背板带宽只有1Tbps。算一下,48×25×2=2.4Tbps,根本不够。所以一定要算清楚。
2.4 软件栈配置:OS、驱动、工具
硬件选好了,软件配置更不能马虎。
操作系统:
我推荐Ubuntu 22.04 LTS或CentOS Stream 9。为什么?因为内核新,驱动支持好。别用太老的系统,比如CentOS 7,内核太旧,很多新网卡驱动装不上。
内核参数调优:
# 网络缓冲区
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.core.rmem_default = 65536
net.core.wmem_default = 65536
# 中断合并
net.core.netdev_budget = 600
net.core.netdev_budget_usecs = 4000
# 连接跟踪
net.netfilter.nf_conntrack_max = 1000000
# 网卡队列
net.core.rps_sock_flow_entries = 32768
这些参数怎么来的?我一个个试出来的。你想想看,默认的缓冲区只有几十KB,跑100Gbps时,一个RTT就填满了。不改参数,性能直接腰斩。
驱动安装:
别用系统自带的驱动。我建议去官网下载最新版。比如Mellanox的驱动,一定要装MLNX_OFED。Intel的网卡,装ice驱动。
# Mellanox驱动安装示例
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-5.8-1.0.1.1-ubuntu22.04-x86_64.tgz
cd MLNX_OFED_LINUX-5.8-1.0.1.1-ubuntu22.04-x86_64
sudo ./mlnxofedinstall --force
小技巧:装完驱动后,用ethtool -i eth0检查驱动版本。我习惯用ethtool -g eth0查看队列数,确保硬件队列和CPU核心数匹配。
测试工具:
工具选对了,事半功倍。
| 工具 | 用途 | 安装方式 |
|---|---|---|
| iperf3 | TCP/UDP吞吐测试 | apt install iperf3 |
| netperf | 多流并发测试 | 源码编译 |
| pktgen | 高速发包测试 | 内核模块 |
| tcpdump | 抓包分析 | apt install tcpdump |
我个人习惯,先用iperf3做基准测试,再用netperf压多流。如果发现性能异常,用tcpdump抓包分析。pktgen我一般不用,因为它需要内核支持,配置起来麻烦。
2.5 测试拓扑与连接
拓扑怎么搭?我画了一张图,你看一眼就明白。
拓扑很简单:两台服务器,一台交换机,直连。别搞复杂拓扑,什么三层路由、VLAN、ACL,统统关掉。测试环境越简单,结果越可信。
避坑指南:我曾经用光纤连接,结果发现光模块不兼容,速率协商失败。后来统一用DAC线,省心多了。还有,别忘了检查网线/光纤的规格,25G要用SFP28,100G要用QSFP28。
2.6 环境验证:搭好了先测一下
环境搭完,别急着跑大流量。先做几个基础验证:
- 连通性测试:
ping -c 10 192.168.1.2,看延迟和丢包 - 链路速率确认:
ethtool eth0,看Speed和Duplex - 驱动版本检查:
ethtool -i eth0,确认驱动版本 - 简单吞吐测试:
iperf3 -c 192.168.1.2 -t 10,看能不能跑满
我习惯先跑一个10秒的iperf3,如果结果接近线速,说明环境没问题。如果差很多,别急着调优,先检查硬件连接和驱动。
我的经验:有一次我测25G,结果只有5G。查了半天,发现是网卡插在了PCIe 3.0 x4的槽位上。所以,一定要确认网卡插在正确的PCIe槽位上,最好是x16的。
好了,环境搭好了,下一章咱们聊聊怎么跑测试、怎么分析结果。记住,环境是测试的基石,别偷懒。
想要更多资料,联系可可