Skip to content

汇总:slotsboxmalloc 设计的工业参考(jemalloc / tcmalloc / BFC / GPU / JVM)及改进建议 #3

Description

@miaobyte

背景

在 review kvspace-c(https://github.com/array2d/kvspace-c)时,发现该项目依赖并使用了 slotsboxmalloc 作为变长 value 的持久化/共享内存分配器。基于 slotsboxmalloc 的 left-box / right-obj 设计,我整理并汇总了工业界常见的内存/显存分配器设计模式、各方案优缺点以及针对 slotsboxmalloc 和 kvspace-c 场景的可行改进建议,供仓库维护者参考。

主要内容要点(摘要)

  1. 常见分配器设计(简要)
  • bump-pointer / arena(高速、适合短生命周期)
  • free-list / segregated fits(按大小类维护 free lists)
  • slab / object-pool(固定对象、高效、低碎片)
  • buddy(按 2 的幂次分级、释放时合并伙伴)
  • TLSF(实时、O(1))
  • best-fit with coalescing(BFC,最小适配 + 合并)
  • pooling/arena(减少系统调用,常用于 GPU/显存)
  • 并发优化:per-thread caches、arenas、lock-free freelists
  1. GPU / PyTorch / 显存管理特点
  • 显存分配/释放开销高、需要 stream-aware delayed-free
  • 常用缓存分配器(sub-allocation from large blocks)和 driver-side pools(cudaMallocAsync)
  • PyTorch 使用 CachingAllocator / BFC 风格:suballocation + free-lists + 延迟释放
  1. 持久化 / mmap / 多进程场景要点(与 slotsboxmalloc 直接相关)
  • 不能用裸指针,需 offset/ID(slotsboxmalloc 已采用)
  • 尽量避免对象移动(compact 复杂),常用 no-compact 设计 + 外部 compaction
  • 崩溃一致性与元数据原子更新(需要写序/日志/检查点)
  1. slotsboxmalloc 的优势与局限(基于 include/slotsboxmalloc/doc.h)
  • 优势:持久化友好(physical==virtual)、O(1) 边界分配命中率高、局部元数据小、并发性通过 root-slot 分锁控制
  • 局限:不做合并/compact,长期碎片风险;最坏分配路径可能为 O(N);对大连续对象跨 box 的成本较高
  1. 建议(可作为仓库改进/文档/测试项)
  • 文档:把工业参考对比(jemalloc/tcmalloc/BFC/JVM/GPU pooling)写入 README 或 docs,帮助使用者理解设计权衡
  • 监控/统计:增加 per-root-slot 碎片率、扫描频率、alloc/free 分布的运行时统计
  • 压力测试:提供 benchmark 脚本(多线程、多进程、长时间碎片化场景)验证 N=64 的适应性
  • 可选回收策略:评估阈值触发的后台 compact/搬迁或 periodic defragmentation(需处理持久化一致性)
  • 快速路径优化:对常见小尺寸(L1)引入短期 free-list cache 降低位图扫描
  • 崩溃一致性:文档化关键元数据更新的写序/原子性假设;若需要,增加日志或版本+checksum 机制
  • 与 GPU/框架整合:若未来用于显存/类似场景,考虑 stream-aware delayed-free 与 driver pool 兼容性

附录 / 参考动作

  • 我可以把这份更详细的对比与建议写成仓库的 docs/allocator-design.md,并把基准脚本放到 tutorial/benchmark 下(如果你们愿意我提交 PR)。
  • 或者把当前 issue 作为讨论起点,邀请维护者指派具体关注点(文档/基准/实现改进)。

请求

将此 issue 作为对 slotsboxmalloc 设计与工业实践参考的汇总与讨论帖;如需我把文档或基准作为 PR 提交,请回复我想要的目标(docs / benchmark / 实现 patch)。

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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions