2. 测试环境搭建:硬件选型与拓扑设计
环境搭建这件事,说简单也简单,说复杂能让你折腾一整天。我见过不少团队,工具选得挺好,脚本写得也漂亮,结果卡在硬件上——网卡丢包、交换机背板不够、线缆质量差,测出来的数据根本没法看。
说白了,吞吐测试的第一步不是跑命令,而是把物理环境搞扎实。你想想看,如果链路本身就有瓶颈,你测出来的到底是网络的极限,还是硬件的极限?
2.1 硬件选型:网卡
网卡是整个测试链路的起点。我个人习惯把网卡分成三类:
| 类型 | 代表型号 | 适用场景 | 注意事项 |
|---|---|---|---|
| 消费级 | Intel I225-V / Realtek 8125 | 原型验证、低负载测试 | 不支持 RSS 多队列,大包吞吐还行,小包直接崩 |
| 企业级 | Intel X710-DA2 / Mellanox ConnectX-4 Lx | 标准吞吐测试、性能基线 | 支持多队列、硬件卸载,稳定性好 |
| 专用测试卡 | Napatech / Solarflare XtremeScale | 高精度时延测试、线速发包 | 价格贵,但硬件时间戳精度在纳秒级 |
我的建议: 如果预算允许,直接上 Mellanox ConnectX-5。我在项目中遇到过用 Intel X710 测 64 字节小包,死活跑不满线速,换了 Mellanox 之后问题迎刃而解。不是 Intel 不好,而是小包场景下硬件队列调度差异很大。
选网卡时,有几个参数你必须盯死:
- 端口速率: 10G 起步,25G 是当前主流,100G 看预算
- PCIe 带宽: 一张 100G 网卡至少需要 PCIe 3.0 x16 或 PCIe 4.0 x8
- RSS 队列数: 至少 4 队列,最好 8 队列以上
- 硬件卸载: TSO、GSO、LRO 这些在测试时建议关闭,否则测的是卸载引擎的性能
避坑: 我曾经在测试前忘了检查网卡的固件版本。结果发现某批次 X710 的固件有 bug,小包转发率只有正常值的 60%。升级固件后恢复正常。所以拿到网卡第一件事——查固件版本,去官网更新到最新。
2.2 硬件选型:交换机
交换机是测试环境的中枢神经。很多人觉得交换机只要端口速率对上就行,其实不然。
我遇到过最典型的问题:用一台接入层交换机做背靠背吞吐测试,结果发现丢包率始终在 0.1% 左右下不来。查了半天,原来是交换机的 缓存深度 不够,微突发流量直接撑爆了。
选交换机时,我建议按这个优先级来:
- 线速转发能力: 背板带宽必须大于所有端口速率之和的 2 倍
- 缓存大小: 每端口至少 1MB,最好 4MB+
- 流表容量: 如果做多流测试,流表至少 16K 条目
- 支持 PFC/ECN: 如果后续要做 RoCE 或无损网络测试,这个必须有
| 场景 | 推荐型号 | 关键参数 |
|---|---|---|
| 10G 测试 | Mellanox SN2010 | 18x25G,背板 1.44Tbps |
| 25G 测试 | Cisco Nexus 93180YC-FX3 | 48x25G,缓存 12MB |
| 100G 测试 | Juniper QFX5210-64Y | 64x100G,线速转发 |
核心原则: 测试环境中的交换机,性能必须高于被测设备。否则你无法判断瓶颈到底在哪。我习惯把交换机配置成「透明桥接」模式,关闭所有流控和 QoS,让测试流量裸跑。
2.3 硬件选型:线缆
线缆是最容易被忽视的环节。我见过有人用一根 3 米的 Cat5e 线跑 10G,结果协商速率只有 1G,还以为是网卡坏了。
不同场景的线缆选择:
- 短距离(< 5m): DAC 直连铜缆,成本低、延迟小、功耗低
- 中距离(5m - 30m): AOC 有源光缆,比 DAC 轻,抗干扰好
- 长距离(> 30m): 光模块 + 单模光纤,注意模块和交换机的兼容性
个人经验: 测试前一定要做线缆质量检测。我习惯用
ethtool -t eth0 跑一遍自检,再用 iperf3 -c 做一次双向打流,确认没有 CRC 错误。如果发现 RX errors 持续增长,先换线,别急着调参数。
2.4 软件工具选型
工具选型其实看你的测试目标。我一般按这个逻辑来:
| 工具 | 核心能力 | 适合场景 | 我的评价 |
|---|---|---|---|
| iPerf3 | TCP/UDP 吞吐、单流/多流 | 快速基线测试、带宽验证 | 上手快,但单线程性能有限 |
| Netperf | TCP/UDP/SCTP、RR 测试 | 请求响应场景、小包性能 | 比 iPerf3 更灵活,但配置稍复杂 |
| TRex | 状态ful 发包、线速模拟 | 大规模并发、复杂流量模型 | 思科开源,功能强大,学习曲线陡 |
我个人习惯的组合是:
- 快速验证: iPerf3,一条命令出结果
- 深度分析: Netperf 的 TCP_RR 和 UDP_STREAM 测试
- 压力测试: TRex,模拟真实业务流量
注意: iPerf3 默认使用单线程,跑 10G 以上链路时 CPU 会成为瓶颈。记得加
-P 4 或更多并行流。我曾经用 iPerf3 测 25G 链路,不加 -P 只能跑到 8Gbps,加了 -P 8 直接跑满 24.5Gbps。
2.5 拓扑设计原则
拓扑设计决定了测试结果的可靠性。我总结了三句话:
- 直连最干净: 两台机器背靠背,中间不加交换机,测的是网卡和驱动的极限
- 串联看转发: 中间加一台交换机,测的是交换机的转发性能
- 并联看叠加: 多台机器同时发包,测的是整体吞吐能力
下面这张图展示了三种典型拓扑:
实际项目中,我建议按这个步骤来:
- 先直连: 排除交换机干扰,确认网卡和驱动没问题
- 再串联: 加入交换机,看转发性能是否达标
- 最后并联: 多客户端同时发包,模拟真实网络压力
一个重要的原则: 测试拓扑越简单,问题定位越容易。我见过有人一上来就搭了 8 台机器的复杂拓扑,结果丢包了,查了三天才发现是其中一根线缆有问题。所以我的习惯是——从最简单的拓扑开始,逐步增加复杂度。
2.6 环境验证清单
搭建完环境后,别急着跑测试。先做一轮快速验证:
- 网卡协商速率是否达标?
ethtool eth0 | grep Speed - 是否有 CRC 错误?
ethtool -S eth0 | grep crc - 中断是否均匀分布在多个 CPU 上?
cat /proc/interrupts | grep eth0 - 驱动版本是否最新?
ethtool -i eth0