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

做带宽测试,最怕什么?

我最怕环境没搭好,测了半天,结果全是假数据。你想想看,网卡跑不满、交换机丢包、驱动版本不对——这些坑我全踩过。今天咱们就聊聊,怎么搭一个靠谱的测试环境。

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 测试拓扑与连接

拓扑怎么搭?我画了一张图,你看一眼就明白。

服务器A 网卡: ConnectX-5 25G IP: 192.168.1.1/24 服务器B 网卡: ConnectX-5 25G IP: 192.168.1.2/24 交换机 Mellanox SN2700 100Gbps 背板 25G DAC 25G DAC 带宽测试拓扑图 点对点直连测试,避免中间设备干扰 说明:服务器A和B通过DAC线直连交换机,交换机配置为透传模式 测试时关闭交换机流控,避免干扰测试结果

拓扑很简单:两台服务器,一台交换机,直连。别搞复杂拓扑,什么三层路由、VLAN、ACL,统统关掉。测试环境越简单,结果越可信。

避坑指南:我曾经用光纤连接,结果发现光模块不兼容,速率协商失败。后来统一用DAC线,省心多了。还有,别忘了检查网线/光纤的规格,25G要用SFP28,100G要用QSFP28。

2.6 环境验证:搭好了先测一下

环境搭完,别急着跑大流量。先做几个基础验证:

  1. 连通性测试:ping -c 10 192.168.1.2,看延迟和丢包
  2. 链路速率确认:ethtool eth0,看Speed和Duplex
  3. 驱动版本检查:ethtool -i eth0,确认驱动版本
  4. 简单吞吐测试:iperf3 -c 192.168.1.2 -t 10,看能不能跑满

我习惯先跑一个10秒的iperf3,如果结果接近线速,说明环境没问题。如果差很多,别急着调优,先检查硬件连接和驱动。

我的经验:有一次我测25G,结果只有5G。查了半天,发现是网卡插在了PCIe 3.0 x4的槽位上。所以,一定要确认网卡插在正确的PCIe槽位上,最好是x16的。

好了,环境搭好了,下一章咱们聊聊怎么跑测试、怎么分析结果。记住,环境是测试的基石,别偷懒。

想要更多资料,联系可可