[논문 리뷰] Lock-Free and Practical Deques using Single-Word Compare-And-Swap
이 논문은 현대 시스템에서 널리 이용 가능한 단일 워드 비교 및 스왑(CAS) 연산자만을 사용하여 락 없는, 분리된 평행 액세스가 가능한 더블 엔드 큐(deque) 구현을 제안한다. 이는 고도의 동시성과 비균일 메모리 접근(NUMA) 환경에서도 높은 성능을 제공한다. 이전의 락 없는 더블 엔드 큐는 비가장성인 이중워드 비교 및 스왑(CAS2)에 의존하거나 경쟁 문제를 야기하지만, 본 알고리즘은 선형화 가능성과 메모리 안정성을 유지하면서도 고도의 동시성 및 NUMA 아키텍처에서 CAS2 기반 대안보다 뛰어난 성능을 보인다.
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) 환경에서 경쟁이 심한 락 없는 알고리즘보다 성능 향상을 이룰 수 있는가?
- RQ3CAS2 연산자가 소프트웨어에서 에뮬레이션될 경우, CAS 기반 더블 엔드 큐의 성능은 CAS2 기반 대안과 어떻게 비교되는가?
- RQ4잠금 없이 양쪽 끝에서 동시에 작업이 가능하도록 하되, 블로킹 없이 선형화 가능성과 메모리 안정성을 유지할 수 있는가?
- RQ5제안된 알고리즘이 다양한 메모리 계층을 가진 다중 프로세서 플랫폼에서 실용적이고 확장 가능한가?
주요 결과
- 제안된 CAS 기반 더블 엔드 큐는 모든 테스트 플랫폼에서 CAS2 기반 대안보다 뛰어난 성능을 보였다. 특히 고도의 동시성 및 NUMA 조건에서 두각을 나타냈다.
- 비균일 메모리 접근을 가진 29개 프로세서를 갖춘 SGI Origin 2000 시스템에서, 본 알고리즘은 2개 이상의 스레드부터 Michael의 CAS 기반 구현보다 뚜렷이 뛰어난 성능을 보였다. 이는 분리된 평행 액세스 설계 덕분이었다.
- 저~중간 수준의 동시성과 균일한 메모리 아키텍처 환경에서는 Michael의 알고리즘이 가장 우수한 성능을 보였지만, 고도의 경쟁 및 NUMA 워크로드에서는 본 알고리즘이 그를 뛰어넘었다.
- 소프트웨어에 의한 CAS2 에뮬레이션(상호 배제 또는 Harris 등의 CASN 방식)은 네이티브 CAS에 비해 성능 저하를 초래함을 확인하여, 단일 워드 CAS만을 사용하는 것이 유리함을 입증했다.
- 형식적 렘마와 불변식을 통한 증명을 통해 알고리즘이 고도의 동시 액세스 패턴에서도 선형화 가능성과 메모리 안정성을 유지함을 입증하였으며, 이는 정확성을 보장한다.
- 실제로 구현된 알고리즘은 실용적이며, NOBLE 라이브러리에 통합되어 동시성 시스템에서의 실제 적용 가능성을 입증했다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.