Skip to main content
QUICK REVIEW

[论文解读] Lock-Free and Practical Deques using Single-Word Compare-And-Swap

Håkan Sundell, Philippas Tsigas|ArXiv.org|Aug 5, 2004
Distributed systems and fault tolerance参考文献 19被引用 11
一句话总结

本文提出了一种仅使用单字长比较并交换(CAS)操作的无锁、支持不相交并行访问的双端队列实现——这些操作在现代系统中广泛可用,可在高并发和非统一内存访问(NUMA)环境下实现高性能。与依赖非可移植的双字长CAS(CAS2)或存在争用问题的先前无锁双端队列不同,该算法在保持线性化和内存安全的同时,在高度并发的NUMA系统上优于基于CAS2的替代方案。

ABSTRACT

We present an efficient and practical lock-free implementation of a concurrent deque that is disjoint-parallel accessible and uses atomic primitives which are available in modern computer systems. Previously known lock-free algorithms of deques are either based on non-available atomic synchronization primitives, only implement a subset of the functionality, or are not designed for disjoint accesses. Our algorithm is based on a doubly linked list, and only requires single-word compare-and-swap atomic primitives, even for dynamic memory sizes. We have performed an empirical study using full implementations of the most efficient algorithms of lock-free deques known. For systems with low concurrency, the algorithm by Michael shows the best performance. However, as our algorithm is designed for disjoint accesses, it performs significantly better on systems with high concurrency and non-uniform memory architecture.

研究动机与目标

  • 解决缺乏实用、无锁双端队列的问题,这些双端队列支持不相交并行访问,并且仅使用现代硬件中可用的标准原子原语。
  • 克服先前无锁双端队列的局限性,这些实现要么功能受限(例如,无法在两端同时进行并发push/pop操作),要么依赖非可移植的CAS2操作。
  • 设计一种支持动态最大尺寸的双端队列,仅使用标准CAS操作和无锁内存管理机制。
  • 通过线性化和内存安全保证正确性,即使在高争用和并发访问下也能保持正确。
  • 在高并发、NUMA架构系统上,与现有无锁实现相比,展示出优越的性能。

提出的方法

  • 使用双向链表结构实现双端队列,并在节点级别应用原子操作。
  • 所有同步操作均使用单字长比较并交换(CAS),避免使用非可移植的CAS2操作。
  • 设计操作(PushLeft、PushRight、PopLeft、PopRight)为不相交并行可访问,最大限度减少对端操作之间的干扰。
  • 集成无锁内存管理机制,支持动态内存分配与释放而无需阻塞。
  • 通过定义线性化点和不变式,应用线性化正确性证明,确保在并发执行下的正确性。
  • 在汇编语言中实现所有原子原语,并使用高优化级别的C编译进行性能评估。

实验结果

研究问题

  • RQ1能否仅使用标准单字长CAS操作实现无锁双端队列,同时支持完整功能和动态内存大小调整?
  • RQ2与易发生争用的无锁算法相比,不相交并行访问设计是否能在高并发、非统一内存访问(NUMA)系统上提升性能?
  • RQ3当CAS2通过软件模拟(如互斥锁或Harris等人提出的CASN)时,基于CAS的双端队列实现与基于CAS2的实现相比性能如何?
  • RQ4无锁双端队列能否在不阻塞的情况下支持两端的并发操作,同时保持线性化和内存安全?
  • RQ5所提出的算法是否在具有不同内存层次结构的多样化多处理器平台上具备实际应用性和可扩展性?

主要发现

  • 所提出的基于CAS的双端队列在所有测试平台上均优于基于CAS2的实现,尤其在高并发和NUMA环境下表现更优。
  • 在具有非统一内存访问特性的29核SGI Origin 2000系统上,自2个线程起,该算法显著优于Michael的基于CAS的实现,这得益于其不相交并行访问的设计。
  • 在低至中等并发和统一内存架构环境下,Michael的算法表现最佳;但在高争用和NUMA工作负载下,所提算法超越了它。
  • 使用软件模拟的CAS2操作(通过互斥锁或Harris等人提出的CASN)相比原生CAS会降低性能,证实了仅使用单字长CAS的优势。
  • 通过形式化引理和不变式证明,该算法保持了线性化和内存安全,确保在所有并发访问模式下的正确性。
  • 该实现具有实际可行性,已集成至NOBLE库中,表明其在并发系统中的真实世界适用性。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。