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
它会:
- 启动 3 个 cell worker(
--secret bench)。 - 跑 3-Agent pipeline。
- 跑 100 个 echo cells。
- 跑 100 个 mock-LLM cells。
- 跑 100 LLM cells +
--kill-after 30 --kill n1。 - 跑
flow bench --repeat 100 --workers 4。 - 跑纯网
ain bench --pairs 10000 --repeat 5。 - 退出时清理 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, |
ain bench 100000/3(release) |
300,000 interactions, |
| 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/CLIdemo)。
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 有原生算术与多线程)。直接比较会把“语言/运行时成熟度”误读为“交互网模型优劣”。
公平对比需要:
- 为同一算法写 AIN 规则(或把 HVM/Inpla benchmark 自动翻译到 AIN);
- 完成原生 cell heap/原子 claim 后端,而不是参考解释器;
- 固定硬件、关闭后台任务,记录 commit/编译器/线程数。
因此 0.1.x 只发布 ain bench 的可复现数字,不做跨项目宣称。
正确做法:
- 固定硬件、关闭 Turbo/后台任务(或记录)。
- 纯网基准:fib、bitonic sort、Church exponentiation、树遍历;同一输入/输出。
- 指标:interactions/s、内存、扩展比(1/2/4/8/16 核)。
- HVM4/Inpla 使用其官方 benchmark 与推荐编译选项。
- 记录 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 压测。