OBASE:通过基于对象的地址空间重组改善内存分层(OSDI 2026)

原题:OBASE: Object-Based Address-Space Engineering to Improve Memory Tiering

一句话总结:热对象与冷对象混排会让少量访问把整页留在 DRAM;OBASE 在受限的 C++ 指针数据结构中跟踪对象访问并安全迁移对象,为现有分页后端整理冷热布局,在 YCSB 上将页面利用率提高 2–4 倍、RSS 降低 65–72%,无回收压力时平均吞吐开销为 2.5%。

问题与动机

内存分层系统按页决定哪些数据留在 DRAM、哪些移到较慢介质,应用却以大小不一的对象为单位访问数据。分配器按照大小组织对象,不保证同页对象具有相似访问频率。只要页内一个对象持续被访问,其余冷数据也可能无法被回收。论文将这种现象称为热度碎片化(hotness fragmentation)。

Google 六组内存访问轨迹提供了动机证据。例如 Bravo 只有 3.2% 的字节被访问,却触及 91.8% 的页面(图 1)。这里的冷数据是指观察窗口内未访问的数据,不等同于可以永久删除的数据;轨迹约覆盖最多 30 秒,测量按 64 B 缓存行计数。因此它证明了短窗口内的布局浪费,不能直接证明长期可节省同等比例的 DRAM。

OBASE 将内存管理拆成两层:前端按对象访问热度重组虚拟地址空间,后端继续按页回收或迁移。它避免要求每个后端理解对象结构,但应用必须采用受约束的间接引用方式。论文的贡献范围是可迁移对象的布局管理,不是任意 C++ 程序的透明内存分层。

关键观察 / 隐含假设

  • 观察 1:页级热度会掩盖对象级冷数据。 图 2 中,Tahoe 和 Yankee 的页面利用率中位数约为 3%;部分工作负载的 2 MB 页面有 85–90% 利用率低于 10%。
    • 依赖假设:对象小于页,且冷热对象确实交错;热数据聚集后能留下后端可识别的冷页。
    • 可能失效场景:大对象内部冷热不均、数据全部活跃,或者应用本来已按访问模式紧密布局。OBASE 不拆分单个对象内部的冷热字节。
  • 观察 2:热度不是分配时可以固定下来的属性。 Meta 与 Twitter 轨迹中,中等大小对象分别占键的 94% 和 98.2%;75% 的键,其访问间隔第 75 与第 25 百分位的比值超过 5(§2.3)。
    • 依赖假设:热度变化仍慢于观测与重组的反应速度,复制开销能够被后续驻留收益摊薄。
    • 可能失效场景:秒级热点切换、高频更新或对象寿命短于数分钟。默认扫描周期为 120 秒,并非即时冷热分类。
  • 假设 3:应用能够提供唯一的权威引用和有界访问作用域。 一个可迁移对象只由一个 guide 拥有;操作结束后不能继续保留解引用得到的裸指针。
    • 证据强度:中。 CrestDB 用插入时深拷贝满足该契约,十种数据结构验证了多种同步算法的兼容性;隐藏别名仍由开发者排除,共享图节点等结构明确不支持(§3.2、§7)。
  • 假设 4:冷堆访问比例可作为分类质量的代理。 控制器把冷堆访问比例控制在 1% 附近,但不知道页面实际位于哪一层。
    • 证据强度:中。 图 13 展示单条长轨迹的适应过程;这一比例不是缺页率,也不是延迟 SLO,不能直接跨 SSD、压缩内存和 CXL 复用为相同风险预算。

核心方法

用 guide 分离对象身份与地址

Guide 是持有对象当前位置及访问元数据的间接引用。开发者标记可迁移指针字段,Clang/LLVM 转换声明和访问,并在公共方法边界插入跟踪代码。对象移动时只需要替换这一个 guide,无需遍历并修补任意裸指针。Guide 不跨数据结构公共 API 传递,调用者通过普通键值参数使用数据结构(图 7)。

当前实现用指针的低 48 位表示地址,高 16 位记录访问位、迁移标志、堆编号、活跃线程计数和连续不活跃窗口数。访问路径原子更新 guide;普通时期已置位的访问标志可避免重复写入。它依赖特定地址编码,也可能与占用高位的硬件或检测工具冲突。

持续整理 NEW、HOT、COLD 三个堆

新对象进入 NEW;后台对象收集器根据 guide 的访问标志,将对象提升到 HOT 或降到 COLD(图 4、图 5)。稀疏对象活动位图 SODA 记录 guide 所在槽位,使后台扫描不必理解树或哈希表的内部结构。基于 jemalloc 的空间感知分配器 SAMA 为三个堆分别保留连续虚拟地址范围。

连续不活跃窗口计数 CIW 提供降温滞后,避免一个安静窗口就迁移。冷阈值初始为三个窗口,范围为 1–32;控制器每次扫描按冷堆访问比例相对 1% 目标的高低,将阈值增减一个窗口(§4.4)。这是分类反馈,不是对慢层实际服务时间的直接控制。

用操作作用域与乐观提交保证迁移安全

线程局部活跃作用域守卫 TAG 覆盖最外层公共操作,记录该操作触及的 guide;活跃线程计数 ATC 用于判断对象是否仍被操作引用。为避免一直付出计数成本,收集器采用 INACTIVE、PREPARE、ACTIVE 三个时期。PREPARE 等待旧操作退出或线程满足新时期参与条件,再开始迁移;应用线程不等待收集器(§3.5、§4.5)。

迁移仅尝试处理 ATC 为零的对象。收集器设置迁移标志、复制对象,并以 CAS 发布新地址。复制期间的并发访问会清除迁移标志、改变 guide,使提交失败;失败后丢弃副本,保留旧对象(表 1、算法 2)。因此频繁被访问的对象可能持续否决迁移,协议优先保证应用继续运行,不保证每个候选对象及时移动。

保持布局前端与回收后端分离

基础 OBASE 不发送主动回收提示,仅让后端看到更均匀的冷热页面。OBASE Hinted 则在分类稳定后对 COLD 使用 MADV_PAGEOUT;还可按堆提供其他 madvise 提示。实验中必须区分两者,不能把主动换出带来的 RSS 下降全部归因于布局本身。

论文另修改 Linux shrink_folio_list(),以最多 512 个基础页为批次合并 TLB 失效和 I/O 提交,报告换出 10 GiB 时 IPI 减少超过 99%(§4.6)。这不改变分层策略,但属于额外内核工程,不能与“无需修改后端即可获益”的基本设计主张混为一谈。

设计取舍

  • 兼容页级后端,换取应用侧改造。 分层策略可以保留,但开发者要标记字段、保证无隐藏别名,并放弃跨操作地址稳定性、共享所有权和跨对象指针算术。
  • 以对象复制换取更少的热页。 小对象且冷热差异大的长寿命数据更适合;频繁更新会持续向 NEW 注入对象,降低热数据聚集效果。论文中 YCSB-A 最终页面利用率约 40%,低于只读 YCSB-C 的约 80%。
  • 以较慢的分类换取较低跟踪成本。 默认分钟级滞后有利于抑制误迁移,但限制短期热点适应;延长冷阈值也会推迟内存节省。
  • 无应用停顿不等于无控制面延迟。 长操作可阻止迁移时期推进,高争用对象可反复使复制失败。论文没有量化这些情况下的最长收敛时间和浪费的复制带宽。

实验与结果

实验平台为 Xeon Gold 5218、16 核、关闭 SMT,Ubuntu 22.04、Linux 6.12;DRAM 32 GB,慢层为 Optane PMEM,换出实验使用 Optane SSD。所谓 CXL 配置实际以 Optane 模拟较慢内存,不能视为真实 CXL 设备测量。CrestDB 默认使用六个服务线程和六个客户端线程(§5.1)。

  1. 布局与驻留内存: 十种并发数据结构,YCSB-A/B/C,1000 万键、30 B 键、1024 B 值,数据集约 13 GiB。收敛后页面利用率由 18–20% 提高到约 40–80%;主动换出冷堆后 RSS 比无回收基线减少 65–72%。YCSB-B 的例子从 12.4 GiB 降至 3.5–4.0 GiB,通常需 6–8 分钟收敛(图 8)。RSS 下降表示数据转移到其他存储层,并非总数据量减少。
  2. 分页后端: MassTree、YCSB-C、约 4 GiB 活跃集。无 OBASE 时,Kswapd 与 TMO 分别将 RSS 降到约 7 和 6.5 GiB;强制 4 GiB 的 Cgroup 限制使吞吐下降 38%。加入不带主动提示的 OBASE 后,各后端均达到约 4 GiB,吞吐接近无回收基线(图 9、§5.3.1)。
  3. 分层后端: MassTree、YCSB-B、5000 万键、约 67 GiB 数据。被访问页面的容量从 16.3 GiB 降到 6.33 GiB,页面利用率从 21% 提高到 57%。在 DRAM:慢层为 1:16 时,TPP 相对全慢层基线的吞吐由 1.25 倍升至 1.45 倍;OBASE+TPP 的这一结果仍比 TPP 单独在 1:8 时的 1.55 倍低约 6.5%。因此“DRAM 减半而性能相同”应理解为近似折中,不能理解为严格等吞吐(图 10)。
  4. 运行开销: 无回收或分层后端时,平均吞吐降低 2.5%,P90 延迟增加 5%;不同结构吞吐开销约 1.5–5%。三种代表结构在 2–32 服务线程下开销约 1–8%,收集器报告占用不到 1% CPU 时间(图 11)。这些结果不能替代内存压力下的 P99/P999 延迟测量。
  5. 真实轨迹与生成式负载回放: 在 ART 上使用 Meta CacheLib、模拟 ZippyDB 的 DBench Mixgraph,以及 Twitter 两组轨迹,页面利用率提高 1.8–3.4 倍。OBASE Hinted 相对无回收基线减少 RSS 36–58%;OBASE+TMO 相对 TMO 单独使用再节省 15–30%(图 12)。这不是直接部署到原始生产服务。
  6. 适应速度: 约 2.3 小时 CacheLib 回放中,初始冷堆访问比例升至 14%;正文报告约 25 分钟后接近 1% 目标,阈值运行中大致在 10–20 个扫描窗口间变化(图 13)。收益形成需要时间,控制器启动期不可忽略。

论断—证据表

论断证据评测边界置信度
冷热混排是页级回收的实际障碍图 1–2:Bravo 访问 3.2% 字节但触及 91.8% 页面六组 Google 短轨迹、64 B 计数;不是长期节省量强:限于观测窗口
对象热度聚集能释放可回收冷页图 8:利用率提高 2–4 倍,主动换出后 RSS 降低 65–72%CrestDB、固定键值大小、YCSB、收敛后强:限于该测试集
布局改善可以独立增强现有后端图 9:不带提示的前端使多种后端达到约 4 GiB RSS 且吞吐接近基线MassTree、只读 YCSB-C;内核优化贡献未单列消融中高
可用更小 DRAM 换取接近的吞吐图 10:OBASE+TPP 在 1:16 为 1.45 倍,TPP 在 1:8 为 1.55 倍Optane 替代 CXL、单机、YCSB-B;不是严格等性能
跟踪和迁移成本在测试范围内有界图 11:平均吞吐开销 2.5%,2–32 线程开销 1–8%无回收压力;未覆盖更高并发和极端长操作

批判性分析

论证链条

论文从对象与页的粒度差异出发,用真实轨迹说明碎片,再用可执行系统证明重组能增强多种后端,这条链条较完整。图 9 将基础前端与主动提示分开,是比只展示 RSS 下降更有说服力的证据。

但 Google 测量覆盖整个地址空间,OBASE 评测主要管理 CrestDB 的键值对象。两者之间缺少“完整生产进程中多少浪费属于可安全迁移对象”的量化连接。轨迹中的潜在冷内存比例不能直接当成该实现的可获取收益。

假设压力测试

CAS 失败撤销迁移给出了并发协议的操作性解释,但本文并未给出完整 C++ 内存模型证明。尤其复制与应用写入并发时,提交失败如何与语言级数据竞争规则相容,仍需结合实现审计;不能仅凭最后一次 CAS 失败就推断任意对象类型都安全可复制。

应用层唯一所有权、裸指针不逃逸以及 guide 所在位置的生命周期是安全前提。论文承认开发者负责排除隐藏别名,所以少量字段注释并不代表集成验证成本必然很低。原有迭代器、外部缓存地址、回调与长操作都应纳入迁移前审计。

实验可信度

十种同步机制不同的数据结构和多种后端提供了横向证据,但性能实验仍集中在一个测试框架、一个主硬件平台。缺少跟踪、作用域计数、复制、分配器和内核批处理的独立消融,因此难以分离各部分的收益与成本。

原 PDF 的 §5.1 同时写 Optane 使用 Memory Mode、又作为独立 NUMA 节点暴露,配置描述存在歧义;还需解释 16 核关闭 SMT 平台上的 32 服务线程实验如何调度。图 13 的目标线与正文 1% 的视觉对应也不够清晰。这些是原文复现信息的缺口,不宜由读者自行补成确定配置。

系统性缺陷

正文没有完整报告迁移峰值额外内存、失败复制次数、共享缓存行争用、控制器对前后台 I/O 的干扰,也未展示多租户隔离或内存压力下的极端尾延迟。高位编码进一步限制地址宽度与工具链组合;ATC 位宽所允许的计数边界和溢出处理需要实现级说明,不能从 32 线程测试外推到大机器。

此外,“后端保持原样”与内核回收批处理应分别评估。策略无需修改是设计上的模块化优势,但当前结果没有明确量化去掉 §4.6 补丁后主动换出的成本。

局限与后续工作

  • 已承认的适用边界: 不支持共享对象的多个 guide、跨操作裸指针稳定性、跨对象指针算术或依赖连续布局的数组与列存;当前语言实现依赖 C++ 运算符重载(§7)。
  • 验证短期热点边界: 将热点切换周期从秒级扫到小时级,记录迁移字节、失败复制、驻留内存和 P99 延迟,寻找复制成本超过节省收益的分界。
  • 拆分前端与内核贡献: 交叉运行有无重组、有无主动提示、有无批量 TLB 失效的配置,比较相同 RSS 下的吞吐与尾延迟。
  • 验证真实慢层与 SLO: 在实际 CXL 和 SSD 上分别扫描冷堆访问目标,记录慢层访问率、缺页率和延迟,检验固定 1% 是否合理。
  • 验证并发契约: 对指针逃逸、嵌套公共调用、长操作、并发写入及计数边界构造测试,明确编译器能拒绝哪些误用、哪些仍需人工保证。
  • 验证生产可覆盖比例: 在完整键值服务中统计可迁移对象占用、无法迁移的元数据和集成改动量,而不只回放请求到 CrestDB。

相关

  • 概念: Memory-TieringCXLNUMA。本文将对象级布局作为页级策略的输入质量问题。
  • 页级后端: TPP、Memtis、TMO;它们与 OBASE 是可组合关系,不是相互替代的对象管理系统。
  • 相关路线: AIFM、Mira、Atlas 优化远端对象访问;Alaska 用句柄支持堆压缩;ObjecTier 提出对象聚集的相近愿景。本文 §6 未直接对这些对象级系统做性能对比。
  • 原始材料: osdi26-banakar.pdfosdi26-banakar