Skip to content

perf: 复用冻结验证并聚合 Topology 诊断 - #515

Merged
Luo-root merged 1 commit into
mainfrom
perf/frozen-validation-20261028
Oct 30, 2026
Merged

Luo-root merged 1 commit into
mainfrom
perf/frozen-validation-20261028

Conversation

@Luo-root

@Luo-root Luo-root commented Oct 28, 2026 •

Copy link
Copy Markdown
Owner

关联 Issue

Closes #514。

改了什么

含 Sub 的已封口图在重复 Validate/Start 时,原先会在包级装配锁内重建静态验证树;嵌套 Topology 又会在每层祖先重复诊断后代。本次复用冻结声明结构,每个 Topology 层的诊断只构建一次。

  • 新增私有 validationPlan,仅在最终检查全部成功后发布。开放定义仍遵循 assemblyMu → graph.mu 的检查与封口边界;失败不安装计划、不封口任何层。冻结调用只取根图锁。
  • 静态切面存在性/checkpoint 共最多四种模式。任意根输入 skip 组合使用临时副本;有效根额度、独立池身份和真实宿主订阅仍逐轮核验。Start 保留输入、宿主透传、checkpoint 和恢复复验。
  • 保留声明剔除业务值以及 run/push/aspect 回调。挂载子执行复用根验证上下文;独立使用的子图可建立自己的根计划。
  • Topology 聚合局部问题与已构建子视图,保留来源/出口/环/流/子树顺序、挂载路径包装、接线失败时抑制子诊断、挂载环防护和返回副本隔离。它仍是逐层、非原子采样。
  • 更新实现契约、双语概念指南和 v0.5.2 候选安装入口;历史测量身份不改。

新增

私有验证计划与对应回归测试;无新增导出 API、公开包、依赖或调度器。

影响范围

运行语义保持兼容。没有 Durable 存储或 Provides 写权限优化。本 PR 是 v0.5.2 的兼容 patch 候选,标签/Release 发布须在维护者审阅和合并之后进行。

测试

Go 1.26.10、Windows/amd64;所有 Go 命令使用 GOWORK=off GOTOOLCHAIN=local。

  • go build ./...、go vet ./...:通过。
  • 工具链 gofmt -l 检查已跟踪与新增 Go 文件:输出为空。
  • go list -deps -f '{{if not .Standard}}{{.ImportPath}}{{end}}' .:非标准库仅根 pulse 包。
  • go test -race -count=1 -timeout=180s ./...:四包通过,根包 43.128s。
  • go test -count=1 -run '^TestDocs(ExamplesUseCurrentSignatures|ExampleGateNegativeControls)$' .:通过。
  • site/ 下 npm.cmd run build:通过,仅有既有打包体积提示。
  • 独立只读代码审查通过,未确认缺陷。定向 race、4,992 组缓存/原始首错逐字对照、并发计划发布、已封子图独立根初始化、Topology 诊断对照和 24 组封口/晚装配竞态均通过,探针均位于仓库外。
  • 独立公开 API 探针 go test -race -count=3 -timeout=90s -v . 通过:在同一冻结定义上交替 ready/skip、宿主登记、ExecAspects、额度 1/2/0、普通/checkpoint、恢复/新执行,并发 32 个不同值的 Sub 执行;探针在固定旧基线也通过。
  • 新回归覆盖固定 skip/WithoutAspects 继承、多挂载独立池、晚恢复计划复验、失败零封口/零缓存、冻结检查不等待装配/后代锁、Topology 顺序/包装/接线失败/副本隔离、深度 512 和分配增长。临时恢复旧 Topology 递归调用后,分配增长门禁确实失败。

定向性能证据

同一公开 API 测量程序、机器与输入形状;基线 75f5de031101f51940caf61c8df281867dc81b7c 对照本 PR 工作树候选。每组运行 go test -run '^$' -bench 'Benchmark(Frozen|Topology)' -benchtime=10x -count=3 -cpu=4 .;基线通过 -modfile=baseline.mod 选择独立检出。以下为三次中位数,MB 为十进制。

形状/操作 修改前 修改后 每次分配前 → 后
1,000 普通节点 + Sub/Validate 0.623 ms 0.0558 ms 1.220 → 0.126 MB
10,000 普通节点 + Sub/Validate 6.986 ms 0.656 ms 15.594 → 1.589 MB
1,000 普通节点 + Sub/Start 1.287 ms 0.356 ms 1.554 → 0.422 MB
嵌套 Topology/深度 128 4.531 ms 0.789 ms 8.436 → 0.888 MB
嵌套 Topology/深度 256 27.580 ms 2.260 ms 62.403 → 2.555 MB
嵌套 Topology/深度 512 171.924 ms 6.729 ms 487.788 → 8.209 MB

10 次迭代的 Validate 样本包含第一次模式求值。另跑预热 BenchmarkValidationPlanOrdinarySub/frozen,参数 -benchtime=1s -count=3 -cpu=4,该合成普通 Sub 形状为 13.88–14.92 ns/op、0 B/op、0 allocs/op。Start 仅测包含 goroutine 创建的提交阶段,不含 NewExecution/Wait,不是整轮吞吐。首次冻结/模式建立、任意根 skip 仍有成本;Topology 完整路径和祖先链仍有深度相关字节成本。

审查关注点

  • 执行事实与缓存模式不改变接受/拒绝结果。
  • 最终开放验证与整树封口仍是同一装配边界。
  • 缓存不保留运行状态或业务值,模式数有界。
  • 父 Topology 保留诊断顺序、路径、包装与接线失败行为。

自审

已检查完整差异、冻结边界与兼容性;未提交凭据;实现契约与双语使用说明已同步。

@Luo-root Luo-root changed the title perf: reuse frozen validation and aggregate Topology diagnostics perf: 复用冻结验证并聚合 Topology 诊断 Oct 29, 2026
@Luo-root
Luo-root merged commit 137e3c4 into main Oct 30, 2026
6 checks passed
@Luo-root Luo-root mentioned this pull request Oct 30, 2026
8 tasks done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

perf: 复用冻结图验证,避免重复遍历 Topology

1 participant