Files
Easytier/docs/quic-proxy-memory-benchmark-2026-07-27.md
T
KKRainbow afbba5d928 refactor(core): migrate packet processing from pnet to smoltcp (#2456)
Replace pnet_packet parsing and mutation across gateway packet paths with the existing smoltcp wire APIs. Preserve length validation, fragmentation classification, TCP flags, and checksum behavior while removing the core pnet_packet feature dependency.
Reject stale non-initiator OSPF sync sessions: only initiator requests may create missing sessions, and a rejection clears the old initiator role only when the remote session generation is unchanged. This fixes an unbounded RPC storm caused by a delayed route sync recreating a session after both peers relinquished the initiator role, with regression tests for session creation and response reordering.
2026-08-01 10:57:23 +08:00

7.9 KiB
Raw Blame History

QUIC TCP Proxy 内存对比(2026-07-27

结论

在相同的双节点 network namespace 环境中,当前分支相对 2.6.4:

  • 空闲且未建立 TCP proxy 连接时,两端合计 USS 从 15.95 MiB 降至 11.66 MiB,下降 26.9%
  • 66 条空闲 TCP proxy 连接时,两端合计 USS 从 19.45 MiB 降至 13.85 MiB,下降 28.8%
  • 固定 1 Gbit/s 的单流 TCP proxy 传输中,两端平均 USS 从 20.69 MiB 降至 14.75 MiB,下降 28.7%,同步峰值从 21.50 MiB 降至 15.02 MiB
  • 从 0 增长到 66 条空闲连接推算,每条连接在两个 core 上合计 增加约 33.9 KiB USS2.6.4 为 54.2 KiB,下降 37.4%
  • 当前分支的匿名内存下降约 40% 至 44%,说明堆和连接缓冲区开销 确实降低。

当前分支的 RSS 比 2.6.4 高约 5% 至 11%,但这部分差异没有出现在 Anonymous 中,主要体现为非匿名或共享驻留页。PSS 在高连接数及 固定吞吐场景基本持平,USS 和 Anonymous 则显著更低。因此不能 只根据 RSS 判断发生了内存回退。

测试对象

版本 标识 二进制
当前分支 commit 9e2ed33aeb37,版本 2.6.4-9e2ed33a target/x86_64-unknown-linux-musl/release/easytier-core
2.6.4 版本 2.6.4-8428a89d /data/tickets/easytier/easytier-linux-x86_64/easytier-core

当前分支使用以下命令重新构建,确保被测二进制准确对应 HEAD:

cargo build --release \
  --target x86_64-unknown-linux-musl \
  -p easytier \
  --features jemalloc \
  --bin easytier-core \
  --bin easytier-cli

两个二进制均为 stripped static PIE。当前分支明确使用 musl 和 jemalloc。

测试拓扑

  • 两个 easytier-core 分别运行在独立的 network namespace
  • namespace 通过 Linux bridge 和 veth 连接;
  • underlay 地址为 10.251.89.10/2410.251.89.11/24
  • EasyTier 虚拟地址为 10.144.144.1/2410.144.144.2/24
  • 两个节点之间使用 UDP listener 建立 EasyTier peer 连接;
  • 源节点启用 --enable-quic-proxy true
  • 两个节点均保留默认 QUIC input;
  • TCP client 从 10.144.144.1 访问绑定在 10.144.144.2 上的 server
  • tcp_proxy_connect 指标的 protocol 标签确认为 QUIC
  • 66 条连接场景通过两端各 132 个 established TCP socket 条目 确认当前连接数。

采样口径

数据读取自 /proc/<pid>/smaps_rollup

  • RSS:进程映射的全部驻留页,包含共享代码页;
  • PSS:共享页按共享进程数量分摊后的驻留内存;
  • USSPrivate_Clean + Private_Dirty,表示进程独占内存;
  • Anonymous:匿名页,主要反映堆、栈和运行时缓冲区。

空闲场景每隔 2 秒采样一次,共 5 次,表格记录均值。固定吞吐场景 持续 20 秒,每隔 2 秒采样一次,共 8 次,同时记录均值和峰值。 所有容量单位均为 MiB。

空闲连接结果

以下数据均为两个 EasyTier core 的合计值:

当前连接数 当前 RSS 2.6.4 RSS 当前 PSS 2.6.4 PSS 当前 USS 2.6.4 USS USS 变化 当前 Anonymous 2.6.4 Anonymous
0 40.42 36.33 26.03 24.50 11.66 15.95 -26.9% 8.89 15.62
1 41.52 38.46 26.49 25.98 11.46 16.82 -31.9% 9.08 16.23
10 41.63 38.79 26.59 26.32 11.56 17.15 -32.6% 9.19 16.55
66 43.68 41.11 28.76 28.63 13.85 19.45 -28.8% 11.22 18.79

0 条和 1 条连接之间的小幅反向波动属于分配器回收和采样时序噪声, 不能解释为连接产生负开销。使用 0 到 66 条连接的跨度估算单位 连接成本更稳定。

分节点 USS

当前连接数 当前源端 当前目的端 2.6.4 源端 2.6.4 目的端
0 5.45 6.21 8.07 7.88
1 5.43 6.03 8.68 8.14
10 5.49 6.07 8.90 8.25
66 6.60 7.25 10.19 9.25

单位连接增量

以 0 到 66 条连接的 USS 增量计算:

版本 两端 USS 增量 每连接两端合计 每连接单端平均
当前分支 2.19 MiB 33.9 KiB 17.0 KiB
2.6.4 3.50 MiB 54.2 KiB 27.1 KiB

当前分支的每连接独占内存增量下降约 37.4%。

固定 1 Gbit/s 活跃流量

为排除两个版本最大吞吐不同造成的缓冲区差异,使用 iperf3 -b 1G -P 1 -t 20 将两个版本都限制为 1 Gbit/s。 两次测试均实际完成 2.33 GiB 传输,接收端报告 1000 Mbit/s。

平均值

版本 节点 RSS PSS USS Anonymous
当前分支 源端 22.89 15.41 7.94 6.88
当前分支 目的端 21.77 14.29 6.82 5.27
当前分支 两端合计 44.67 29.70 14.75 12.14
2.6.4 源端 22.59 16.34 11.70 11.35
2.6.4 目的端 19.95 13.67 8.99 8.77
2.6.4 两端合计 42.53 30.01 20.69 20.13

对比

指标 当前分支 2.6.4 变化
两端平均 RSS 44.67 42.53 +5.0%
两端平均 PSS 29.70 30.01 -1.0%
两端平均 USS 14.75 20.69 -28.7%
两端平均 Anonymous 12.14 20.13 -39.7%
两端同步峰值 USS 15.02 21.50 -30.2%

分节点原始统计

下表保留各场景所有样本计算出的均值;max_uss 是该节点采样期间 的最大 USS。

版本 场景 节点 样本数 mean_rss mean_pss mean_uss mean_anon max_uss
当前 0 连接 源端 5 19.830 12.636 5.451 4.314 5.582
当前 0 连接 目的端 5 20.587 13.393 6.208 4.579 6.320
当前 1 连接 源端 5 20.463 12.944 5.432 4.401 5.465
当前 1 连接 目的端 5 21.061 13.541 6.030 4.682 6.051
当前 10 连接 源端 5 20.522 13.002 5.491 4.459 5.496
当前 10 连接 目的端 5 21.105 13.585 6.073 4.726 6.086
当前 66 连接 源端 5 21.513 14.050 6.595 5.498 6.672
当前 66 连接 目的端 5 22.169 14.706 7.251 5.723 7.375
当前 1 Gbit/s 源端 8 22.893 15.410 7.936 6.877 8.188
当前 1 Gbit/s 目的端 8 21.773 14.291 6.816 5.266 6.832
2.6.4 0 连接 源端 5 18.278 12.355 8.071 7.876 8.328
2.6.4 0 连接 目的端 5 18.048 12.144 7.880 7.747 8.203
2.6.4 1 连接 源端 5 19.535 13.279 8.676 8.262 8.727
2.6.4 1 连接 目的端 5 18.920 12.705 8.143 7.971 8.191
2.6.4 10 连接 源端 5 19.762 13.506 8.902 8.473 8.910
2.6.4 10 连接 目的端 5 19.027 12.812 8.250 8.078 8.297
2.6.4 66 连接 源端 5 21.069 14.805 10.194 9.702 10.320
2.6.4 66 连接 目的端 5 20.045 13.822 9.252 9.088 9.293
2.6.4 1 Gbit/s 源端 8 22.588 16.343 11.697 11.354 12.258
2.6.4 1 Gbit/s 目的端 8 19.946 13.670 8.993 8.774 9.277

解释和限制

  1. 以固定 1 Gbit/s 场景为例,当前分支 RSS 增加 5.0%,但 Anonymous 下降 39.7%PSS 下降 1.0%。这说明差异主要体现 在非匿名或共享驻留页;本次没有保存逐 VMA 数据,因此不进一步 将它归因到某一个具体映射。
  2. 两个相同版本进程运行在同一宿主机时会共享可执行文件代码页, 所以 PSS 比 RSS 更适合估算该测试拓扑的宿主机总成本,USS 和 Anonymous 更适合判断 EasyTier 私有堆及缓冲区的变化。
  3. 这是一轮受控 A/B 测试,而不是长期统计分布。数值可用于确认 差异方向和量级;若作为发布门禁,应固定机器负载并增加多轮重复。
  4. 本文只比较 QUIC TCP proxy 内存,不使用未限速吞吐结果推断性能, 避免吞吐差异污染内存结论。