本文由 Codex 根据一次网络设备性能测试讨论辅助整理生成。文中的数值用于说明方法,不代表某台设备的实测结果。

测试路由器、交换机或软路由时,只跑一次 iperf3,最多只能回答“这组 TCP 流量跑了多快”,不能完整说明设备性能。

一套有意义的测试,至少应该同时观察:吞吐、PPS、丢包、时延、并发流和长时间稳定性。如果被测对象带有 NAT、防火墙或负载均衡功能,还要增加并发连接数和每秒新建连接数等指标。

先明确测试对象和指标

DUT 是 Device Under Test 的缩写,即被测设备。例如:

1
2
流量发生器 A ────── DUT ────── 流量接收器 B
路由器

A 负责产生流量,B 负责接收流量,测试流量必须经过 DUT。

常见指标如下:

指标 含义 主要反映什么
Throughput 无丢包时可持续转发的最大速率 带宽与综合转发能力
PPS 每秒转发的包数 逐包处理能力
Frame Loss 输入帧与输出帧的数量差 是否超过设备极限
Latency 帧经过 DUT 所需的时间 转发和排队时延
Jitter 时延的波动程度 实时业务体验
Concurrent Flows 同时存在的流数量 NAT、防火墙、负载均衡容量
CPS 每秒新建连接数 有状态设备的连接建立能力
Stability 持续高负载下的表现 温度、内存泄漏、降频等问题

其中最容易被忽略的是:Gbps 高不代表 PPS 高。

什么是线速

线速(Line Rate 或 Wire Speed)不是五类线、六类线的分类,而是物理链路的额定传输速率。

例如一个 10GbE 网口的线速是:

1
10,000,000,000 bit/s

如果 DUT 能在持续输入 10 Gbit/s 流量时全部转发,没有丢包,通常称为“线速转发”。

网线类别与线速属于不同层次:

1
2
3
4
5
6
7
8
9
10
11
Cat5e / Cat6 / Cat6A

传输介质的规格

1GbE / 10GbE

链路协商出的额定速率

线速转发

DUT 能否在该额定速率下持续无丢包转发

为什么要测试 64B 小包

Ethernet 规定,从目的 MAC 到 FCS 的最小帧长度是 64B。以无 Payload 的 IPv4 + TCP 帧为例:

1
2
3
4
5
6
7
8
9
Destination MAC       6B
Source MAC 6B
EtherType 2B
IPv4 Header 20B
TCP Header 20B
Padding 6B
FCS 4B
-------------------------
Ethernet Frame 64B

源、目的 MAC,源、目的 IP,源、目的端口只是各层 Header 的一部分。IPv4 和 TCP 还需要长度、TTL、协议号、序列号、确认号、Flags、Checksum 等控制字段。

Padding 是什么

Padding 是没有业务含义的填充字节。当 Ethernet Header、上层 Header 和 Payload 不足以组成最小帧时,网卡会自动补齐。

上面的 IPv4 + TCP 内容在 FCS 前只有 54B,而 FCS 前至少需要 60B,因此需要:

1
60B - 54B = 6B Padding

接收端根据 IP 层的长度字段识别有效内容,不会把 Padding 当成上层数据。

为什么计算 PPS 时按 84B

64B 是 Ethernet Frame 本身的大小,但连续发送一个最小帧所占用的链路时间还包括:

1
2
3
4
5
Preamble + SFD        8B
Ethernet Frame 64B
Inter-Frame Gap 12B 等效时间
-------------------------
链路时间占用 84B

其中 IFG 是 96 bit-times 的线路空闲时间,并不是真的发送了 12B 数据。为了计算方便,可以把它折算成 12 Byte-times

因此,1GbE 上 64B 小包的理论最大包速率是:

1
2
3
1,000,000,000 ÷ ((64 + 8 + 12) × 8)
≈ 1,488,095 packet/s
≈ 1.488 Mpps

10GbE 则约为:

1
14.88 Mpps

同一条 10GbE 链路发送大帧时,每秒需要处理的帧少得多:

Ethernet Frame 10GbE 理论帧率
64B 14.88 Mpps
128B 8.45 Mpps
256B 4.53 Mpps
512B 2.35 Mpps
1024B 1.20 Mpps
1280B 0.96 Mpps
1518B 0.81 Mpps

计算公式为:

1
PPS = 链路速率 ÷ ((Ethernet Frame + 8B Preamble/SFD + 12B IFG) × 8)

因此,64B 小包会把 ASIC、CPU、FIB 查询、ACL、conntrack、队列、DMA 和网卡描述符的逐包开销放大。设备可能在 1518B 大帧下跑满 10GbE,却无法在线速下转发 64B 小包。

可以简单记成:大包主要测带宽,小包主要测 PPS。

搭建隔离测试拓扑

路由器的基础拓扑可以是:

1
2
3
Server A                  DUT                   Server B
10.0.0.1/24 10.0.0.254 10.0.1.254 10.0.1.1/24
└────── 10GbE ────────┘ └────── 10GbE ──────┘

交换机则让 A 和 B 接在不同端口,并确保流量经过待测转发路径。

测试环境应满足以下条件:

  • A、B 的网卡和 CPU 能产生、接收高于 DUT 极限的流量;
  • 固定链路速率、MTU、流数量、帧大小、方向和测试时长;
  • 同时记录 DUT 与测试机的 CPU、IRQ、丢包计数和网卡统计;
  • 分别测试单向、反向和双向流量;
  • 使用独立实验网络,避免互联网、共享链路和其他业务流量污染结果。

RFC 6815 明确指出,RFC 2544 的方法用于隔离实验环境,不应直接用于承载用户流量的生产网络。它会主动制造过载,既可能影响业务,也无法在存在外部丢包时得到可靠结果。

第一阶段:用 iperf3 检查基本吞吐

先在 Server B 启动服务端:

1
iperf3 -s

在 Server A 测试单条 TCP 流:

1
iperf3 -c 10.0.1.1 -t 60

再逐步增加并发流:

1
2
3
iperf3 -c 10.0.1.1 -P 4 -t 60
iperf3 -c 10.0.1.1 -P 8 -t 60
iperf3 -c 10.0.1.1 -P 16 -t 60

反向测试:

1
iperf3 -c 10.0.1.1 -P 8 -t 60 -R

如果单流只有 5 Gbit/s,八条流可以达到 9.8 Gbit/s,不能直接认定 DUT 的单流转发上限只有 5G。TCP 窗口、RTT、单核 CPU、IRQ、RSS 和网卡队列都可能限制单流结果。

还可以使用 UDP 逐步提高发送速率,观察 Lost/Total Datagrams

1
2
3
iperf3 -c 10.0.1.1 -u -b 8G -t 60
iperf3 -c 10.0.1.1 -u -b 9G -t 60
iperf3 -c 10.0.1.1 -u -b 10G -t 60

iperf3 适合做基础连通性和 TCP/UDP 吞吐检查,但它不是专业的 PPS 基准测试工具。

第二阶段:用流量发生器测试 PPS

测试不同帧长、精确控制发包速率时,可以使用:

  • TRex
  • MoonGen
  • Linux pktgen
  • DPDK pktgen
  • Ostinato

按照 RFC 2544 的建议,Ethernet 至少覆盖:

1
64、128、256、512、1024、1280、1518B

对每种帧长逐步提高 offered load,寻找无丢包的最大速率。RFC 2544 对 Throughput 的定义,就是 DUT 收到的测试帧数量与发出的测试帧数量相等时,所能达到的最高速率。最终确认应使用不少于 60 秒的完整测试轮次。

结果不能只写“跑到 10G”,而应记录:

Frame Size Offered Load Throughput PPS Loss Latency DUT CPU
64B 待测 待测 待测 待测 待测 待测
128B 待测 待测 待测 待测 待测 待测
256B 待测 待测 待测 待测 待测 待测
512B 待测 待测 待测 待测 待测 待测
1024B 待测 待测 待测 待测 待测 待测
1280B 待测 待测 待测 待测 待测 待测
1518B 待测 待测 待测 待测 待测 待测

第三阶段:测负载下的时延

空载 ping 只能提供基础 RTT。更有价值的是比较不同负载下的时延:

1
空载 → 50% → 90% → 接近最大无丢包吞吐

设备可能空载时延只有 0.2 ms,接近满载时却因为队列堆积增长到几十毫秒。此时即使吞吐看起来很高,实时业务体验也会明显下降。

记录时至少应包含:

  • 平均时延;
  • P50、P95、P99;
  • 最大时延;
  • 抖动;
  • 测量时的 offered load 和帧大小。

有状态设备还要测连接能力

如果 DUT 开启了 NAT、conntrack、防火墙或负载均衡,单纯测试无状态转发不够,还应覆盖:

1
2
3
4
5
并发连接数
每秒新建连接数(CPS)
不同五元组数量
短连接与长连接
连接建立和释放过程

10GbE stateless routing10GbE NAT + conntrack 的处理成本不同,必须把测试模式、规则数量和功能开关写入报告。

路由器还可以增加不同路由表规模下的数据面测试,并单独观察路由收敛、路由写入 FIB 和 Withdraw 等控制面性能。控制面与 Gbps、PPS 等数据面指标不能混为一谈。

一套可复现的验收矩阵

实验室中可以按以下顺序执行:

  1. iperf3 验证正向、反向 TCP 基础吞吐;
  2. 增加 TCP 并发流,排除单流与单核瓶颈;
  3. 用 UDP 初步定位出现丢包的负载区间;
  4. 用 TRex 等流量发生器测试 64~1518B 的 PPS;
  5. 对每种帧长搜索 0 丢包的最大持续转发速率;
  6. 在不同负载下记录时延、抖动和丢包;
  7. 重复正向、反向、双向和多流测试;
  8. 开启真实使用的 ACL、NAT、conntrack 等功能后重新测试;
  9. 进行数小时长稳测试,观察 CPU、温度、内存和接口计数;
  10. 保存拓扑、配置、软件版本、流量模型和原始结果。

最后,报告至少要回答四个问题:

  • 哪种帧长、方向和流量模型?
  • offered load 是多少,测试持续多久?
  • 最大无丢包吞吐和 PPS 分别是多少?
  • 瓶颈确实在 DUT,还是在流量发生器、网卡或测试方法?

只有把这些边界写清楚,不同设备、不同版本和不同测试轮次之间的结果才真正可比较。

参考资料