背景
resolve_path 快速路径(已提交 kvspace-c 639d16c,resolve=1 从 ~12× art_search 降到 1×)之后,稳态每次 key 访问的理论地板已是 1× art_search + 1× DecodeHead(定位 + 验非指针 + 取值)。要再降,只能跳过 root→node 的树下降本身,即缓存句柄。
三判据裁决(profile + art 结构调研已定)
| 判据 |
结论 |
约束 |
| 覆盖写迁移? |
叶子变量 a 不新增子节点→不 grow,block_id 稳定;但 box 写路径每次 free+alloc,box_offset 会变 |
可缓存 block_id,不能缓存 box_offset,命中后从节点重读 |
| 复用/epoch? |
无 epoch/version;block_id 永不复用(不张冠李戴)但 grow 遗弃旧块→静默 stale |
必须自建失效,不能靠引擎信号 |
| key 稳定? |
✓ 循环内 /vthread/vt0/[d]/a 逐轮字节相同 |
命中率≈100%,值得做 |
block_id 换算是乘加两步、位置无关、跨进程/重启有效 → 缓存 block_id 跨 SHM 安全。
设计
新 ABI(不透明句柄):
kvspaceResolveRef(kv, key) -> ref{ block_id, gen } # 走一次完整下降,建缓存
kvspaceGetByRef(kv, ref, key_fallback, ...) # 命中: block_id→ptr 一次乘加
kvspaceSetPartByRef(kv, ref, key_fallback, off, ...) # 读 has_value+box_offset,直取
命中校验(无 epoch,用 forwarding tombstone):
- node grow 搬迁时,旧块写 moved 标记 + 新 block_id;
- ByRef 命中旧块见 moved → 跟随 forwarding + 刷新 ref;见 has_value=0(被删)→ miss 回退 key;
box_offset 不进 ref,命中节点后重读。
kvlang 侧:解析缓存键 = (frame_root, name),帧退出时失效(不能挂帧无关共享 inst,递归会串帧读错值);首次 miss 填 ref,之后直取。
收益:每次访问从「1× art_search + 全下降」→「一次 block_id 乘加 + 读 box_offset」。
风险 / 落地
中高:forwarding tombstone + 帧级失效 + 跨仓 ABI(kvspace-c / kvspace / kvspace-durable / kvlang runtime 四处)。建议先完成 #267再评估此增量收益是否值这个复杂度。
关联 #212、#204、#203(PC/帧寻址)、kvspace-c #16。
背景
resolve_path快速路径(已提交 kvspace-c 639d16c,resolve=1 从 ~12× art_search 降到 1×)之后,稳态每次 key 访问的理论地板已是 1× art_search + 1× DecodeHead(定位 + 验非指针 + 取值)。要再降,只能跳过 root→node 的树下降本身,即缓存句柄。三判据裁决(profile + art 结构调研已定)
a不新增子节点→不 grow,block_id稳定;但 box 写路径每次 free+alloc,box_offset会变block_id,不能缓存box_offset,命中后从节点重读block_id永不复用(不张冠李戴)但 grow 遗弃旧块→静默 stale/vthread/vt0/[d]/a逐轮字节相同block_id换算是乘加两步、位置无关、跨进程/重启有效 → 缓存block_id跨 SHM 安全。设计
新 ABI(不透明句柄):
命中校验(无 epoch,用 forwarding tombstone):
box_offset不进 ref,命中节点后重读。kvlang 侧:解析缓存键 =
(frame_root, name),帧退出时失效(不能挂帧无关共享 inst,递归会串帧读错值);首次 miss 填 ref,之后直取。收益:每次访问从「1× art_search + 全下降」→「一次 block_id 乘加 + 读 box_offset」。
风险 / 落地
中高:forwarding tombstone + 帧级失效 + 跨仓 ABI(kvspace-c / kvspace / kvspace-durable / kvlang runtime 四处)。建议先完成 #267再评估此增量收益是否值这个复杂度。
关联 #212、#204、#203(PC/帧寻址)、kvspace-c #16。