Skip to content

Go 重写的性能基准 ​

下面分别列出本次候选包的命令耗时,以及重写期间的历史资源测量。它们来自不同版本和场景,不能拼成同一次基准结果。

1.6.1 与 2.0.0rc1 的命令耗时 ​

测量日期:2026-09-21。使用 GitHub Actions 构建的 1.6.1 与 2.0.0rc1 草稿候选包,安装后逐个核验实际文件;Go 还核验了运行进程的二进制。两台 OpenWrt 虚拟机均为 1 CPU、128 MiB 内存、x86_64 TCG。每个操作、每个版本保留 60 次有效采样。

操作Python 1.6.1 中位 / P95(ms)Go rc1 中位 / P95(ms)中位耗时比
帮助4,383.53 / 6,746.9031.27 / 49.35140.18×
版本4,508.01 / 6,029.3530.18 / 45.76149.38×
读取配置4,366.32 / 6,016.1336.87 / 46.00118.41×
列出账号4,473.03 / 5,875.9337.23 / 50.63120.16×
列出内置认证策略4,646.86 / 6,022.2933.90 / 49.10137.07×
CLI 状态4,778.42 / 6,464.9536.79 / 61.17129.89×
导出配置4,909.43 / 7,140.7437.08 / 56.22132.40×

“中位耗时比”是 Python 中位耗时 ÷ Go 中位耗时,大于 1 表示 Go 更快。P95 使用排序后第 57 个样本。这些绝对耗时包含软件模拟 CPU 的开销,不能直接当作实体路由器的毫秒数或加速倍数。

串行执行速率 ​

以下速率为 1000 ÷ 平均耗时(毫秒),表示一个调用方连续完成命令的速度,不是并发容量或网络吞吐率。

操作Python 1.6.1(次/秒)Go rc1(次/秒)
帮助0.2227.79
版本0.2231.10
读取配置0.2325.99
列出账号0.2126.31
列出内置认证策略0.2127.27
CLI 状态0.2024.04
导出配置0.2024.92

LuCI 与后台响应 ​

LuCI 状态请求单独计时:包含宿主回环 HTTP、QEMU 端口转发、uhttpd、LuCI 和后端处理,不包含浏览器绘制或页面轮询等待。

操作Python 1.6.1 中位 / P95(ms)Go rc1 中位 / P95(ms)中位耗时比
LuCI 状态请求209.70 / 312.43222.96 / 357.830.94×

下表只测 Go 常驻服务的本地套接字往返:从建连到完整响应,不启动 CLI 进程。旧版没有相同的后台 RPC 接口,因此不编造一列可比的 Python 数字。

Go 后台接口中位耗时(ms)P95(ms)
status.get2.033.47
config.get2.493.75

help 和版本命令不需要校园网络响应,但仍包含新进程启动、初始化及命令自身工作,不是纯语言启动跑分;配置类命令还包含序列化、读取及 IPC。Python 的 status 会现场查询认证网关,Go 的 status 读取后台维护的状态,所以状态差距还包含调用方式的变化。命令响应变快不等于认证服务器变快,也不保证切换 IP/NAT 出口时游戏连接不断。

环境与复测 ​

  • Python 来源:3829f52,构建记录。Go 来源:6db20d9,构建记录。版本、包 SHA256 和签名验证情况见原始汇总。旧版 APK 按已核验来源手动安装;Go APK 使用固定维护者公钥通过原生验签。
  • 两台来宾使用同一官方 OpenWrt 25.12.2 基础镜像及相同 LuCI、模拟网卡;沿用各版本原生依赖。镜像压缩文件 SHA256:461926ed535d9185604a2ae57b7a167fe00b83fbeb23fdba7663072117f6e0dc。
  • 配置为同一个合成有线账号,自动认证、夜间切换和故障切换关闭。状态查询使用宿主本地模拟网关,确定返回未认证;没有真实账号、校园网往返、登录或切网操作。所有命令退出码为 0,HTTP 请求为 200,测量前后配置字节不变,内核没有 OOM 记录。
  • 每项分四轮、每轮 15 次,轮流交换版本先后次序;同一时刻只测一台来宾。第一轮先预热 5 次,其余轮预热 1 次。后台 RPC 每轮预热 5 次。这是热缓存下反复启动命令的测试,不是重启设备后的冷启动测试。
  • CLI 由来宾内 C 工具用 CLOCK_MONOTONIC 测量 fork → exec → wait,标准输入、输出和错误流接 /dev/null,不计 SSH 建连时间。原始样本还保留了 /bin/true 计时下限、宿主负载和轮次;测量不是独占物理 CPU 的跑分。

下载:汇总与命令参数、原始采样与复测工具 ZIP、下载文件校验和。ZIP 内含全部逐次样本、C 计时工具、汇总和逐文件校验和。

本次工具在 x86_64 Linux 宿主编译,然后复制到对应来宾执行;其他架构需要对应编译器。例如:

sh
gcc -O2 -static -Wall -Wextra -o cli-timer timer.c
# 在测试来宾中预热 5 次,再采样 15 次;重复四轮并交换版本次序。
./cli-timer 5 15 srunnet config show
./cli-timer 5 15 --rpc status.get  # 仅用于 Go 后台

重写期间的历史资源测量 ​

在相同 OpenWrt 基础镜像的配对实验中,Go 候选版的完整安装增量减少 54.94%,单账号守护进程 RSS 的第 95 百分位减少 32.45%。下表是重写期间保留的测量结果,不是最终 2.0.0rc1 的重新测量,也不代表所有路由器与校园网络。

指标Python 1.6 基线Go 候选版
完整安装增量,含新增依赖及包数据库22,724 KiB10,240 KiB
单账号守护进程 RSS p9520,784 KiB14,040 KiB
单账号守护进程 CPU0.2166%0.1533%
单账号 CPU,含已等待子进程0.3400%0.1767%
四账号守护进程 RSS p9520,852 KiB15,652 KiB
四账号守护进程 CPU0.4433%0.3350%
四账号 CPU,含已等待子进程0.7017%0.4250%

Go 的文件描述符数量维持 7;Python 单账号为 4–10、四账号为 4–6。两版各账号都只完成一次登录,测量窗口内无重复登录、登出、凭据拒绝或 OOM。

测量方式 ​

测量记录日期:2026-09-20。Python 来源为 9da28b5,内部版本 1.6.0_rc68;Go 来源为 1252165,内部版本 rc31。这两个测试包未作为正式版本发布。

两台独立 qcow2 虚拟机使用同一官方 OpenWrt 25.12.2 x86_64 ext4 基础镜像、相同 LuCI/CA 组件、8 个模拟认证网口、LAN 与管理接口。使用受信的原生 APK 安装。安装阶段为 256 MiB / 1 CPU;随后都以 128 MiB / 1 CPU、TCG 模式启动。

单账号和四账号场景分别预热 5 分钟,再记录 10 分钟稳定期。两版都采用 60 秒门户检测间隔、独立模拟认证网关,每 10 秒直接读取 /proc,避免反复启动应用 CLI 改变测量负载。宿主有 8 CPU,单账号和四账号实验所见最高负载分别为 1.31 和 1.34;当时另有隔离实验运行。

安装增量使用安装前后的 du -skx /:共同基础占用 24,252 KiB;安装 Python 后为 46,976 KiB,Go 后为 34,492 KiB。它包含新增运行时依赖。仅比较小体积 Python 脚本包和静态 Go 二进制会漏算 Python 运行时。

能说明什么 ​

这些数字说明在上述环境中,Go 降低了完整安装占用与常驻进程的资源消耗。安装数据是文件系统已分配空间,不等于实际闪存压缩和擦除块占用;RSS 是守护进程的采样分位数,不是整个插件所有进程的峰值。CPU 是持续维护门户会话时的消耗,不是空账号待机功耗。

这些结果不说明游戏切网可以无缝续传,也不替代真实无线、真实校园认证、24 小时稳定性或独立审查。网口、IP 或 NAT 出口改变时,原有连接仍可能中断。

原始安装与资源采样分别归档并逐项校验,归档 SHA256:

text
安装:851c003e9fcb73f4ebceef3efbbbc6ab5ab4a1eb54e120d8e7bdbd762a139c96
资源:77f0f27e8dd553f597fb4f69849adab90fbf4ad9a2f69da325427b315c08f9c5

新版本增加功能后应再次进行相同条件的配对实验,不能把早期数字自动当作最终发布版本的实测值。

Go 2.x 已正式发布;最新版本与验证范围见下载页,Python 1.x 资料独立归档。