现象
callgrind 调用图显示,启动期 art_scan 全来自 Engine::layout_stdlib(inclusive 24.6%)→ write_func(20.3%)→ Kv::set/del_tree → art_scan。即 kvlang 每次启动都把整个 stdlib layout 进 kvspace,write_func 触发全树 DFS。小 N 时这段固定启动成本被放大(N=500 时占 ~37%)。
修法
stdlib 预 layout 一次并持久化,后续启动直接复用,不每次重建。
- 对短程序收益最大(启动成本占比高);
- 与 #267正交:后者降单次 List 成本,本 issue 降 List 次数(启动期批量 write_func)。二者叠加。
风险
中:需处理 stdlib 版本/失效(spec 变更时重建)、共享后端多进程首次 layout 竞争([[kvlang-tutorial-shared-backend-race]] 已知 flushall 冲空 /lib/*)。
关联 #212、#202(layout 定位)、kvspace #9。
现象
callgrind 调用图显示,启动期
art_scan全来自Engine::layout_stdlib(inclusive 24.6%)→write_func(20.3%)→Kv::set/del_tree→art_scan。即 kvlang 每次启动都把整个 stdlib layout 进 kvspace,write_func触发全树 DFS。小 N 时这段固定启动成本被放大(N=500 时占 ~37%)。修法
stdlib 预 layout 一次并持久化,后续启动直接复用,不每次重建。
风险
中:需处理 stdlib 版本/失效(spec 变更时重建)、共享后端多进程首次 layout 竞争([[kvlang-tutorial-shared-backend-race]] 已知 flushall 冲空
/lib/*)。关联 #212、#202(layout 定位)、kvspace #9。