Skip to content

perf: 消除重复图遍历与输出查找 - #517

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

Luo-root merged 1 commit into
perf/frozen-validation-20261028from
perf/algorithm-scaling-20261028

Conversation

@Luo-root

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

Copy link
Copy Markdown
Owner

关联 Issue

见 #516。本 PR 是两份后续修复的第一份,不能单独关闭 Issue;基于尚未合并的 #515。

改了什么

共享 Graph 定义导致挂载环可达性搜索指数重复访问;宽输出节点与 Mermaid 接线反复扫描声明;检查点元数据枚举在每层拷贝完整后代结果。

本次对定义可达性去重,为多输出写权限和 Mermaid 接线建立索引,并用同一结果累加检查点元数据。真实挂载位置仍保持独立。环见证顺序/文本、类型权限、声明顺序、返回容器隔离和 Mermaid 输出保持兼容。

新增

新增私有索引和算法回归/规模测试;没有新增公开 API、依赖或预期运行语义变化。单输出节点不分配权限 map。

影响范围

Mermaid 用临时索引减少重复查找,同时增加每次渲染分配;完整挂载路径仍是元数据输出成本的一部分。失败来源 Stop 语义和存储绘图统计不在本次范围。

测试

Go 1.26.10、Windows amd64;GOWORK=off GOTOOLCHAIN=local。

  • 完整候选的 go build ./...、go vet ./...、工具链 gofmt、Core 仅标准库依赖闭包,以及 go test -race -count=1 -timeout=180s ./... 均通过。
  • go test -race -count=3 -timeout=90s -run '^Test(Mermaid|OutputPermissions|UndeclaredWrite|NewNodeCopiesDeclarations|SetSkipConflict|Linear)' . 通过。
  • 回归覆盖合法共享挂载、全部可达目标、精确环见证、检查点顺序/类型/路径/容器隔离、并发装配采样、写权限类型拒绝,以及一个父 key 对应多条子接线。
  • 本补丁曾独立导出并应用到 b383aae,单独 build 与定向 race 通过,再准备堆叠缓存修复。

同输入规模检查

合成测试,同机器,CPU=1、benchtime=100ms、count=3,取中位数;不是生产吞吐结果。

形状 修改前 修改后 分配字节前 → 后
19 个 Graph 定义、36 条挂载边;创建父图再新增一次 Sub 89.747 ms 2.668 µs 375,391,792 → 3,432
预建槽位后写完 8,000 个声明输出 55.284 ms 1.134 ms 0 → 0
1,024 层 CheckpointNodes 24.402 ms 0.927 ms 70,131,552 → 3,827,288
1,024 层 CheckpointPorts 20.220 ms 0.982 ms 57,230,752 → 3,737,272
预建 Topology 上渲染 Mermaid,4,096 条绑定 68.216 ms 11.102 ms 8,746,368 → 10,095,640

审查关注点

已访问表示跳过,不表示出现环;定义去重不能用于挂载实例元数据。重点检查类型权限报错、渲染首条匹配和绑定声明顺序。

自审

已检查差异与前后对照,写明 Mermaid 的时间/空间取舍;未提交凭据,未改发布状态。

@Luo-root Luo-root changed the title perf: remove repeated graph traversal and output lookup work perf: 消除重复图遍历与输出查找 Oct 29, 2026
@Luo-root
Luo-root merged commit d1f06f4 into perf/frozen-validation-20261028 Oct 30, 2026
4 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.

1 participant