ΓDocsInteractiveNet

20 · 基准与性能方法

目的:给出可复现的本项目基准;外部对比(HVM4/Inpla)仍待补。 这些数字不是受控论文级 benchmark:同一台开发机、后台任务、release 构建都会影响结果。

20.1 本机环境

  • macOS / Apple Silicon(具体型号以 sysctl -n machdep.cpu.brand_string 为准)。
  • Rust release 构建(cargo build -q -p ain-cli --release)。
  • Node 仅用于 Netbook;不参与后端基准。

20.2 一键脚本

./scripts/bench.sh

它会:

  1. 启动 3 个 cell worker(--secret bench)。
  2. 跑 3-Agent pipeline。
  3. 跑 100 个 echo cells。
  4. 跑 100 个 mock-LLM cells。
  5. 跑 100 LLM cells + --kill-after 30 --kill n1。
  6. 跑 flow bench --repeat 100 --workers 4。
  7. 跑纯网 ain bench --pairs 10000 --repeat 5。
  8. 退出时清理 worker。

20.3 结果(2026-11-11,开发机)

场景 结果
3-Agent pipeline(3 cell workers) 3 steps、4 effects、~0.000322 USD
100 echo cells / 3 nodes 100 steps、100 sends
100 mock-LLM cells / 3 nodes 100 steps、100 effects、~0.007584 USD
100 LLM cells + kill-after 30(mock provider) 34 cells failover、100 effects、output 不变
100 OpenAI-compatible cells(本地 fake server) 100 effects、output mock provider response;kill-after 30 仍 100 effects
100 真实 OpenCode Go cells(step-5-preview) 100 effects、34 failover、316–358s、ledger 100 行;state hash 随模型输出变化
2-node × 20 flow(flow scheduler) 10/10 分配、~28ms
3-node × 100 flow 34/33/33、~75ms
flow bench 100/4(单机 batch) ~4–20ms(release)
ain bench 10000/5(release) 50,000 interactions,308ms,162k interactions/s,~6.2µs/interaction
ain bench 100000/3(release) 300,000 interactions,2.15s,140k interactions/s
trace replay 100 次 live + replay,state hash 全等

单次运行有抖动;以 scripts/bench.sh 多次取中位数。

20.4 指标定义

  • steps:cell 消息投递次数(不是交互网 interaction 数)。
  • effects:effect 调用次数(mock provider 也计数)。
  • failover:因节点失联而重新 spawn 的 cell 数。
  • unique_hashes:同一批 flow 的最终 state hash 去重数;应为 1。
  • ms:端到端 wall clock,含 TCP 连接/调度。
  • interactions:纯网 ain-core 的规则点火数(Netbook/CLI demo)。

20.5 纯网微基准(ain bench)

ain bench --pairs 10000 --repeat 5
  • 构造 N 个互不连接的 γ-γ 活跃对;每对 4 个 cell(2 γ + 2 ctr),归约 N 次后到范式。
  • 计时只包含 reduction,不含构图;without_trace() 关闭每步 SHA-256/trace,with_worklist() 用 redex 工作队列避免每步全图扫描。
  • 指标:interactions/s、ns/interaction;hash 用于确认两种调度顺序得到同一范式。
  • 这是参考解释器的原语吞吐,不是 HVM 风格的紧凑运行时;不能直接当作算法性能对比。

本机(Apple Silicon,release,2026-11-11):

pairs interactions elapsed interactions/s ns/interaction
10,000 50,000 308ms 162k 6,164
100,000 300,000 2.15s 140k 7,159

debug 构建约 22k interactions/s;release 约 6–7 倍。数字会随机器/后台负载变化。

20.6 与 HVM4/Inpla 的对比(0.1.x 暂不做)

0.1.x 的立场:ain-core 是语义参考实现(字符串 ID、BTreeMap、可选 trace),不是 HVM/Inpla 那样的紧凑原生运行时;两者原语集也不同(HVM2 有 U60 整数与编译式 reducers,Inpla 有原生算术与多线程)。直接比较会把“语言/运行时成熟度”误读为“交互网模型优劣”。

公平对比需要:

  1. 为同一算法写 AIN 规则(或把 HVM/Inpla benchmark 自动翻译到 AIN);
  2. 完成原生 cell heap/原子 claim 后端,而不是参考解释器;
  3. 固定硬件、关闭后台任务,记录 commit/编译器/线程数。

因此 0.1.x 只发布 ain bench 的可复现数字,不做跨项目宣称。

正确做法:

  1. 固定硬件、关闭 Turbo/后台任务(或记录)。
  2. 纯网基准:fib、bitonic sort、Church exponentiation、树遍历;同一输入/输出。
  3. 指标:interactions/s、内存、扩展比(1/2/4/8/16 核)。
  4. HVM4/Inpla 使用其官方 benchmark 与推荐编译选项。
  5. 记录 commit/tag、编译器版本、命令、原始日志。

当前不做数字宣称;docs/15 的发布清单将其列为待办。

20.7 与 Agent 框架的对比(待做)

  • 场景:3-Agent 研究流水线、100 个短任务、失败重试、预算限制。
  • 指标:p50/p99 延迟、吞吐、token/$、重放一致率。
  • 对比:Temporal+自研、LangGraph checkpoint、Ray actor。
  • 注意:Ainet 是执行层,不是 prompt/工具生态;对比要限定在编排/重放/成本。

20.8 性能瓶颈(当前观察)

  • 纯核每步使用 BTreeMap/字符串 ID,且默认计算每步 hash;bench 模式已关闭 trace/hash 并改用 worklist。
  • 每个 RPC 新建 TCP 连接(cluster);连接池/多路复用可降开销。
  • 单线程 coordinator 队列;吞吐上限受调度循环限制。
  • effect 同步在 worker 内执行;LLM 长尾会占住该 worker 的处理线程(M5 可改异步)。
  • 100 cells 规模尚小;需要 1k–10k cell 压测。

在 GitHub 编辑本文