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