中文

发表预约:内存 reclaiming 中并发数据结构预约发布的改进方法

分布式、并行与集群计算 2025-06-05 v2 编程语言

摘要

安全的内存回收技术,如 hazard pointers 等,常通过每个读者预约来实现,但在遍历链表等并发数据结构时会造成显著开销。这主要源于在每次读取前都需要声明预约并设置内存屏障以确保适当的排序。在读密集型工作负载中,这种开销被放大,因为即使实际的内存回收相对较少,遍历数据结构时仍会 incurring 完整的预约开销。本文提出一种新颖的内存回收技术,通过结合 POSIX 信号和延迟回收,引入一种基于 ping 的发布方法。该方法消除了在使用前使预约全局可见的需求。取而代之的是,线程私有地跟踪其正在访问的记录,并在需要时与计划回收内存的线程共享此信息。该方法可作为 hazard pointers 和 hazard eras 的即插即用替换方案。此外,能够在数据结构操作中保留预约并按需发布的能力,促进了 hazard pointers 变体(EpochPOP)的构建。该变体使用 epoch 在线程不频繁延迟的情况下(同时保持 hazard pointers 的鲁棒性)接近 epoch-based 回收的性能。我们基于 hazard pointers (HP) 和 hazard eras 的 publish-on-ping 实现,在 various 数据结构上展现出显著的性能提升。各类工作负载和数据结构上的改进范围为 1.2X 至 4X 相对于原始 HP,最高可达约 20% 相对于 Folly 开源库中高度优化的 HP 实现,以及相对于 hazard eras 最高可快 3 倍。EpochPOP 在保持更强保证的同时,实现了类似于 epoch-based 回收的性能。

关键词

引用

@article{arxiv.2501.04250,
  title  = {Publish on Ping: A Better Way to Publish Reservations in Memory Reclamation for Concurrent Data Structures},
  author = {Ajay Singh and Trevor Brown},
  journal= {arXiv preprint arXiv:2501.04250},
  year   = {2025}
}

备注

Extended version of full paper accepted at PPoPP '25: The 30th ACM SIGPLAN Annual Symposium on Principles and Practice of Parallel Programming Proceedings