Skip to content

拆分 key(ART) 与 value(sbo) shm 文件、sbo head/data 独立映射,实现分区动态扩容 #18

Description

@miaobyte

背景(现状事实)

kvspaceShmOpensrc/kvspace.c:668-756)当前把全部内容塞进 单块 file-backed mmap(普通文件 open(O_RDWR|O_CREAT|O_EXCL) + 一次 ftruncate + 一次 mmap,非 POSIX shm_open),按固定偏移切成 5 段:

[kvspace_hdr_t] [blocks_meta_t×1] [ART slab = 256MB] [sbo meta(head)] [sbo data]
  • key 区 = ART slab:blockmalloc 管理 ART 节点(N4/N16/N48/N256),固定 ART_SLAB_SZ = 256MBkvspace.c:23)。
  • value 区 = sbo(slotsboxmalloc)sbo meta(head) + sbo data 两段,存变长 XValue TLV。data_sizekvspaceShmOpen(path, data_size) 传入,要求 data_size/8 为 2 的幂(:696-700),durable 层默认 8 × 64^4
  • 完全无 grow/resize/remap:总大小创建时一次算定并 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)。

目标

  1. 拆分 shm 文件:把单块 mmap 拆成多个独立 shm 文件——
  2. 分区独立动态扩容:拆分后每个区可独立 ftruncate + mremap——ART slab 满扩 key shm、sbo data 满扩 value shm、sbo meta 满扩 head shm,互不影响,消除"创建时容量锁死"(shm 运行期动态扩缩容:容量在创建时锁死,缺 mremap/回收路径 #15)。

落点与约束

关联

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions