You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
分区独立动态扩容:拆分后每个区可独立 ftruncate + mremap——ART slab 满扩 key shm、sbo data 满扩 value shm、sbo meta 满扩 head shm,互不影响,消除"创建时容量锁死"(shm 运行期动态扩缩容:容量在创建时锁死,缺 mremap/回收路径 #15)。
背景(现状事实)
kvspaceShmOpen(src/kvspace.c:668-756)当前把全部内容塞进 单块 file-backed mmap(普通文件open(O_RDWR|O_CREAT|O_EXCL)+ 一次ftruncate+ 一次mmap,非 POSIXshm_open),按固定偏移切成 5 段:ART_SLAB_SZ = 256MB(kvspace.c:23)。sbo meta(head)+sbo data两段,存变长 XValue TLV。data_size由kvspaceShmOpen(path, data_size)传入,要求data_size/8为 2 的幂(:696-700),durable 层默认8 × 64^4。ftruncate(:704-706),此后不再变。ART slab 满(blocks_alloc返回 -1)或 sbo data 满(sbo_alloc返回 -1,:959)时操作直接失败。art_grow(:209)只是 ART 节点类型升级,非 shm 扩容。即:key 与 value 混处同一 shm 文件、四个功能区(hdr / key-ART / sbo-head / sbo-data)容量在创建时锁死(参见 #15)。
目标
ftruncate+mremap——ART slab 满扩 key shm、sbo data 满扩 value shm、sbo meta 满扩 head shm,互不影响,消除"创建时容量锁死"(shm 运行期动态扩缩容:容量在创建时锁死,缺 mremap/回收路径 #15)。落点与约束
kvspaceShmOpen(kvspace.c:668-756):由「一次 open+ftruncate+mmap」改为「多个 fd + 多次 mmap」,art_data/sbo_data(:728-730)指向不同映射。kvspace_hdr_t(:62-67)已有art_slab_size/sbo_data_size字段,可承载扩容后的新容量,作为 reopen 校验源。int32_t children[]block_id、value 用box_offset相对偏移,均不依赖绝对基址——mremap换基址后偏移语义不变。data_size未按8×64^k校验)。关联