[论文解读] Nova: Safe Off-Heap Memory Allocation and Reclamation
本文提出 DEBRA,一种用于无锁数据结构的分布式基于纪元的内存回收方案,可降低同步开销并防止因进程崩溃导致的内存泄漏。通过使用信号量原语和一种新颖的中和技术,DEBRA+ 实现了容错内存回收,每项操作的摊销成本为 O(1),且相比 DEBRA 内存使用量降低高达 94%,在平均性能上比危险指针高出 70%。
In recent years, we begin to see Java-based systems embrace off-heap allocation for their big data demands. As of today, these system rely on simple ad-hoc garbage-collection solutions, which restrict the usage of off-heap data. This paper introduces the abstraction of safe off-heap memory allocation and reclamation (SOMAR), a thread-safe memory allocation and reclamation scheme for off-heap data in otherwise managed environments. SOMAR allows multi-threaded Java programs to use off-heap memory seamlessly. To realize this abstraction, we present Nova, Novel Off-heap Versioned Allocator, a lock-free SOMAR implementation. Our experiments show that Nova can be used to store off-heap data in Java data structures with better performance than ones managed by Java’s automatic GC. We further integrate Nova into the open-source Oak concurrent map library, which allows Oak to reclaim keys while the data structure is being accessed.
研究动机与目标
- 为解决无锁数据结构中安全内存回收的关键挑战,传统技术如危险指针和基于纪元的回收(EBR)存在高开销或容错性差的问题。
- 消除因基于纪元的回收中进程崩溃或停滞导致的内存泄漏风险,此类情况可能无限期阻塞所有内存回收。
- 设计一种模块化、可组合的抽象——称为记录管理器(Record Manager),将内存回收逻辑与数据结构实现解耦,仅带来极小的性能开销。
- 在各种工作负载和线程数量下实现高性能和可扩展性,尤其在高竞争和 NUMA 架构下表现优异。
提出的方法
- 提出 DEBRA,一种基于纪元回收(EBR)的分布式变体,利用系统信号量(如 Linux 上的 futex)在进程间协调纪元推进。
- 引入一种中和机制,使进程在被上下文切换出时可被有效“中和”,从而即使部分进程处于非活跃状态,也能持续进行内存回收。
- 采用记录管理器抽象,支持通过一行代码在运行时替换分配、释放和回收策略,提升模块化程度和性能可移植性。
- 使用有限数量的纪元计数器和每进程的纪元跟踪,确保仅当没有活跃进程可访问时,才会回收已退役的对象。
- 应用两阶段回收协议:首先,对象被退役并标记为可回收;其次,仅在所有进程均通过安全纪元边界后,才释放对象。
- 在部分实验中采用池化策略以减少系统调用开销,证明该方案即使在动态内存分配下仍保持高效。
实验结果
研究问题
- RQ1在存在崩溃或停滞进程的情况下,能否在不引入过度同步开销的前提下,使基于纪元的回收具备容错能力?
- RQ2能否通过限制等待回收的对象数量,降低基于纪元回收的内存开销,特别是在进程数量较多的系统中?
- RQ3如何将内存回收与数据结构逻辑解耦,以提升模块化程度,并支持不同回收策略的便捷比较?
- RQ4新型回收方案在不同工作负载、线程数和竞争水平下的性能开销如何?
- RQ5基于信号量的方法能否在真实无锁数据结构中超越传统的危险指针及其他非自动回收技术?
主要发现
- DEBRA+ 通过在进程崩溃后仍能持续回收,使内存使用量相比 DEBRA 平均降低 94%,其中等待释放的对象数量为 O(mn²),其中 n 为进程数,m 为小常数。
- DEBRA+ 在所有工作负载和线程数量下,平均性能比高度优化的危险指针实现高出 70%。
- 记录管理器抽象支持通过一行代码切换不同的分配、池化和回收策略,且性能开销可忽略不计。
- 在平衡二叉搜索树的实验中,DEBRA+ 相比无回收的基线,平均仅增加 10% 开销,且在某些情况下性能提升最高达 20%。
- 在 16 核系统(64 个硬件上下文)上,DEBRA+ 平均每轮试验中对进程进行中和 935 次,显著降低峰值内存使用量。
- 该方案实现了每项高级操作 O(1) 的摊销成本和每项对象退役 O(1) 的最坏情况成本,使其在生产环境中极具效率。
更好的研究,从现在开始
从论文设计到论文写作,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。