Skip to content

Latest commit

 

History

History
122 lines (88 loc) · 6.94 KB

File metadata and controls

122 lines (88 loc) · 6.94 KB

Performance

本文用于长期记录 tswn_coretswn-cli bench win-rate 路径上的性能结果,方便横向比较:

  • Bun / JS 历史参考
  • 0.2.12
  • 0.2.13
  • 0.2.14
  • 0.2.20
  • 0.3.1
  • 0.3.2
  • 0.4.0 Runtime

当前这份记录重点对应:

  • 0.2.20 在一轮结果一致性 / SBY diff 收口后,继续回收 pre_action / Hide / alive-group 热路径的性能回退
  • 0.3.1 在补齐 WASM 查询接口后,按同口径补跑 benchmark,确认当前版本没有新异常,但相较 0.2.20 有一小段性能回退
  • 0.3.2 新增 DIY / overlay 覆盖系统,按同口径补跑确认非 DIY 通路无性能回退
  • 当前表格已同步到 0.3.2 的稳定重跑结果,可直接和 0.3.10.2.200.2.14 做横向比较
  • 0.4.0 的 fixed30、score、win-rate 与 CQP/CQD 统一结果另见 docs/perf/runtime_0.4.0_baseline.md
  • 0.5.0 主 Runtime 独立化后的完整发版结果与 0.4.3 同机交替 A/B 见 docs/perf/runtime_0.5.0_749fcd1_release_benchmark.md

1. 口径

  • 编译参数:正式留档使用 --release --features no_debug;日常快速试跑可用 --profile release-fast --features no_debug,但不要和长期表格混用。0.4.0 起原生默认 feature 包含 mimalloc_alloc;旧版本未启用 allocator 的历史数据保留原口径,不反向改写。
  • CLI:tswn-cli bench win-rate ... --perf
  • 单线程:追加 --single-thread
  • 多线程:直接使用 CLI 默认线程策略
  • 样本:
    • aaa vs bbb
    • 喘际瞬爆@昀澤 vs 蕾蒂·怀特洛可-65HEZHB264LFPFQ@Squall

说明:

  • Runtime 0.4.0 的当前回归基线与 legacy score 硬目标见 runtime_0.4.0_baseline.md

  • Runtime 0.5.0 的发版基准与 3% 回退门禁见 runtime_0.5.0_749fcd1_release_benchmark.md

  • Bun0.2.12 的数据来自 docs\update\0.2.12.md 中的同机历史记录;

  • 0.2.13 数据来自 detached worktree:f9b0e3c

  • 0.2.14 数据来自当时主线;

  • 0.2.20 数据来自当前工作树(已步进版本号并继续回收本轮性能回退);

  • 0.3.1 数据来自当前工作树(2026-05-10 按同口径补跑);

  • 100k 更适合做快速横向参考;

  • 1M 更适合做当前版本之间的稳定吞吐比较。


2. 30-case 固定 benchmark

docs/perf/fixed_cases_30 保留了覆盖 1v1、2v2、多人、队伍、FFA 与复杂状态链的 30 个固定输入。0.5.0 删除旧执行器时,同时删除了依赖双栈对账的 track_perf_casestrack_score_perf 等辅助 binary;历史文档中的对应命令不再适用于当前分支。

0.5.0 的 fixed30 与 score 发版测量使用只调用公开主 Runtime API 的临时外部 harness, 构建后未保留源码。被测提交、输入哈希、逐轮中位数和同机 A/B 结果见 runtime_0.5.0_749fcd1_release_benchmark.md。 固定输入与 0.4.x 的旧工具输出格式说明继续保存在 fixed_cases_30_benchmark.md,仅作为历史口径。

当前仓库可直接复测的长期入口是 tswn-cli bench win-rate --perf 与 OpenBox openbox_mem_probe;命令和发布要求见根目录 rule.md。如需恢复 fixed30 自动化, 应新增只依赖公开主 Runtime API 的独立 benchmark harness,不得恢复旧执行器或 parity 入口。


3. 100k 参考总表

3.1 单线程

样本 Bun 参考 0.2.12 0.2.13 0.2.14 0.2.20 0.3.1 0.3.2
aaa vs bbb 12.674s (1.00x) 1.981s (6.40x) 1.992s (6.36x) 1.825s (6.94x) 1.887s (6.72x) 1.922s (6.59x) 1.901s (6.67x)
复杂样本 15.524s (1.00x) 3.014s (5.15x) 3.077s (5.05x) 2.792s (5.56x) 2.891s (5.37x) 2.985s (5.20x) 2.951s (5.26x)

3.2 CLI 多线程

样本 Bun 参考 0.2.12 0.2.13 0.2.14 0.2.20 0.3.1 0.3.2
aaa vs bbb 12.674s (1.00x) 0.269s (47.12x) 0.279s (45.43x) 0.278s (45.59x) 0.291s (43.55x) 0.294s (43.11x) 0.301s (42.11x)
复杂样本 15.524s (1.00x) 0.411s (37.77x) 0.403s (38.52x) 0.375s (41.40x) 0.471s (32.96x) 0.400s (38.81x) 0.396s (39.20x)

注:100k 的多线程 wall-clock 很短,容易受机器瞬时负载和调度抖动影响,因此真正判断版本间稳定差异时,应继续看下面的 1M 表。


4. 1M 长跑表

4.1 单线程

样本 0.2.13 0.2.14 0.2.20 0.3.1 0.3.2 0.3.2 vs 0.3.1 0.3.2 vs 0.2.20
aaa vs bbb 19.636s 18.144s 18.438s 19.339s 19.333s ~持平 4.9%
复杂样本 30.239s 27.851s 28.488s 30.181s 29.437s 2.5% 3.3%

4.2 CLI 多线程

样本 0.2.13 0.2.14 0.2.20 0.3.1 0.3.2 0.3.2 vs 0.3.1 0.3.2 vs 0.2.20
aaa vs bbb 2.523s 2.516s 2.784s 2.884s 2.800s 2.9% 0.6%
复杂样本 3.859s 3.473s 3.749s 3.811s 3.885s 1.9% 3.6%

5. 当前 0.3.2 快速查看

样本 单线程 100k 多线程 100k 单线程 1M 多线程 1M
aaa vs bbb 1.901s 0.301s 19.333s 2.800s
复杂样本 2.951s 0.396s 29.437s 3.885s

6. 结论

  • 0.3.2 vs 0.3.1:四项 1M 偏差均在 ±3% 以内,属于同机重跑的正常波动。DIY overlay 的修改没有造成非 DIY 通路的性能回退 —— 所有新增判断都是对 Option<PlayerOverlay>None)的指针判空,分支预测器稳定命中,热路径无变化。
  • 相较 0.2.200.3.2 在 1M 口径下:
    • 单线程慢约 3.3%~4.9%
    • 多线程慢约 0.6%~3.6%
  • 相较 0.2.14 基线仍有一定回退(与 0.3.1 基本一致),这部分回退来自 0.3.0 引入的 WASM 相关接口层展开,非本次改动引入。
  • 综合来看:0.3.2 = 0.3.1 的性能 + overlay 新功能,无额外性能代价。