Skip to content

Performance

shinyashen edited this page Sep 17, 2026 · 27 revisions

English | 中文

性能

方法学(先读这个,再看数字)

  • 微基准:PerfReportTest,单 JVM 5 轮独立 fixture(每轮真冷,不共享缓存),全样本池化,报告中位数与最小值;严肃结论至少 2 次 JVM 取最小值(hotMin 对调度噪声最稳);
  • 能力面:闪电套件 36 场景 × 3 库存模式(每场景单次执行,family 首场景含首次样板编译 + JIT 预热——生产端预编译 mixin 已消除,属测量口径)+ 边界套件 38 例;
  • informational 永绿:性能测试只断言正确性不变量,耗时打印为 [perf] 行,不断言墙钟(CI 机器速度不定);
  • 发版自动基准:每次 Release 时 CI 自动构建并把最新基准写入本页下方区块(GitHub runner 环境,仅供版本间趋势对比)。

最新发版基准

v1.1.0 · 2026-09-12 · GitHub Actions runner (ubuntu-latest, JDK 25) — values are for cross-release trend comparison only

Tests: 209 (OK)

Suite Result
Lightning benchmark 39/39 SUPPORTED, falsePositive=0, engineError=0, timeout=0, total 118.4 ms
Boundary benchmark 37/37 ok (feasible=36)

Micro-benchmarks

[perf] case=fib24x1e9empty rounds=5 coldMedian=0.912ms coldMin=0.687ms hotMedian=0.475ms hotMin=0.233ms (150 hot samples)
[perf] case=conversionRing cold=1.298ms hotMedian=0.273ms hotMin=0.243ms (25 hot samples)
[perf] case=solverFib12Minimum cold=6.577ms hotMedian=1.946ms hotMin=1.078ms (15 hot samples)
[perf] case=fib32x1e9 rounds=5 coldMedian=1.053ms coldMin=0.873ms hotMedian=0.440ms hotMin=0.288ms (100 hot samples)
[perf] case=deadCycleGuard rounds=5 ringMedian=5.12us ringMin=2.85us chain24Median=12.70us chain24Min=6.97us (10000 samples each)

参考数据(2026-09-17,手工测量,Windows 构建机 / JDK 25,feature/trace-replay @ 1a96dab)

忠实 CPU 副本改为步内批量点火(判定逐位等价,见 1.2.0 CHANGELOG)后的闪电套件 36 例实测:

全套件合计 173–194 ms(三次强制重跑;每例带判定门副本 + 任务序构造 + 全部样板冷编译)
裁定:36/36 干净判定 —— supported=36, falsePositive=0, engineError=0, timeout=0(初测 supported=34+2 项宿主变体路由 FALSE_POSITIVE,已按 1.12 真实形状修复:宿主复用工具翻译为通配耐久合成配方,详见 Architecture 第 3 节)
对照:v1.1.0 同机基线 195.6 ms/39 例(无判定门);判定门上线后批量点火前 3303–3455 ms

要点:

  • single-dag/fibonacci 三例(深度 32,每例计划合成总数 3,524,577):批量点火前 1036–1119 ms(判定门逐火副本占 92%+),点火后 8.1 / 11.9 / 8.2 ms——副本从 O(合成总数) 降到 O(任务×步),3.5M 次合成的重放 ~0.1 ms;
  • 其余 33 例 ±2 ms 内不变(判定门/自检在小型计划上的固定价格;多例快于 v1.1.0);
  • 首例 single-dag/dispersed/missing ~56 ms 为 JVM 类加载预热,一次性;
  • 微基准(VM 计算路径,不经过副本)与历史值同带:hotMedian fib24×10^9 空库存 0.75 ms、solverFib12 全管线 3.5 ms;
  • 2 个 ENGINE_TIMEOUT/NON_COOPERATIVE 状态随之消失——36 例全部被判定门干净裁定。

参考数据(2026-09-11,手工测量,Windows 构建机 / JDK 25,master @ 0b06429~0beec0e)

测试 190+ 失败 0 | 闪电 39/39 SUPPORTED,合计 118.0~132.5 ms | 边界 37/37,64 ms
对照 1.21 基线(2026-08-09):39 例 38 SUPPORTED + 1 FALSE_POSITIVE(本移植已关闭)

微基准(两轮 JVM,斜杠分隔):

用例 coldMedian hotMedian hotMin 说明
fib32 × 10^9 1.6 / 1.7 ms 0.59 / 0.59 ms 0.46 / 0.33 ms 需求聚合 O(patterns) + bundle 回放
fib24 × 10^9 空库存 1.4 / 1.4 ms 0.63 / 0.60 ms 0.48 / 0.40 ms 可合成中间项绝不报缺
conversionRing 0.77 / 1.27 ms 0.39 / 0.31 ms 0.30 / 0.21 ms 换算环 + 库存感知
solverFib12Minimum 全管线 3.4 / 3.8 ms 3.6 / 3.3 ms 3.1 / 2.7 ms greedy + 2^10 枚举 + 精修 + 确认
死环守卫单次 — 环 9.7 / 8.8 μs;链 23.6 / 22.5 μs 环 4.8 / 4.6 μs 单候选场景零成本

36 场景中少数几例 >5ms:首例 ~56–62 ms 为 JVM/类加载预热(一次性),其余为每场景样板冷编译口径——生产端预编译 mixin 已消除。

历轮优化(移植完成后的性能收官战)

轮次 内容 效果
基线 1.21 → 1.12 移植完成,全部能力对齐 功能等价,性能待调
P0–P3 求解器快路径(long[] 级联 + 库存预读)、计划记忆化 + 版本门控、resolverCache 跨 pass solver hot 8.9 → 4.3 ms;重复请求毫秒级 → 微秒级
确认守卫 + 死环单候选早退 模型无改善跳过确认重放;无争用跳过图分析 闪电合计 196.1 → 132.5 ms(≈ -32%);solver cold 8.0 → 3.4 ms
模糊族两层缓存 sandbox 族列表按键记忆 + VM 合成族按键记忆 fuzzy/missing 17.7 → 4.75 ms(-73%);闪电合计 → 118 ms
GAP-2(T2.5) 替换组可制造变体解析 正确性修复,无性能回退

结论:引擎常规路径与求解器已接近当前架构下限,引擎侧优化收官。

测量陷阱备忘(自用)

  1. BenchSimulationState 的模拟插入物跨 execute 残留——多请求测试每个请求用新 sim 实例;
  2. 构造测试链检查孤儿分支(曾有 m5/m6 不在链上、leaf 永不消耗而断言 0"通过"的乌龙);
  3. 模糊场景耗时对比注意 suite 的 family 冷启动口径(首场景含首次编译 + JIT 预热)。

Clone this wiki locally