runtime: 帧级 ByRef 缓存,帧退出失效(#268) - #302
Conversation
733855d to
8dd90aa
Compare
iops N=2000 26.3ms → 23.0ms (−13%) prime_sieve N=100 29.6ms → 26.8ms (−9%) hash_table N=200 18.0ms → 15.6ms (−13%)
8dd90aa to
613ba14
Compare
本地复核:三仓 PR 组合 · 干净重编 · benchmark一、构建的 git 版本
先清空系统目录里 kvspace/kvlang 的库与可执行,四个组件全部从源码重编安装(消除残留与版本混装),再跑测试与基准。 二、benchmark
(ms)
本PR/关缓存 中位 1.134(1.052–1.253,27 点);关缓存/v0.2.18 中位 0.992。
三、为什么没有收益:父节点缓存当前没有生效runtime 用的
四、这个组合还会崩(不是性能问题)
五、CI 现在是盲的
另外 六、建议
|
ResolveRef 结果未初始化时 parent_id 是栈垃圾,GetByRef 越界 SIGSEGV。 嵌套 key 首次 ResolveRef 后 parent_id==0 则永久关闭父缓存(后端只写了叶子)。 Mach-O 用 weak_import + dynamic_lookup,避免旧 libkvspace 链接失败。
叶子 block_id 几乎打不中,改成缓存 ART 父节点,同一帧/同一张表的兄弟 key 共用。帧退出失效,不穿透 Ptr。
配合:
parent_id/depth,GetByRef 从父节点续走剩余字节kvspaceRef_t4 字段runtime 侧相对上一版:
kvspaceRef_t rr = {0},避免 kvspace-c 只写前 8 字节时把栈垃圾当父节点 → SIGSEGVparent_id == 0,永久关闭父缓存(叶子/hot 仍可用)weak_import+-Wl,-undefined,dynamic_lookupbenchmark 请用当前 master 做基线,并给「同树关缓存」对照;上一版描述里的 iops/prime_sieve/hash_table 数字相对 v0.2.17,与当前 master 不可比。