Skip to main content
QUICK REVIEW

[논문 리뷰] Concurrent Reference Counting and Resource Management in Wait-free Constant Time

Guy E. Blelloch, Yuanhao Wei|arXiv (Cornell University)|2020. 02. 17.
Distributed systems and fault tolerance참고 문헌 26인용 수 6
한 줄 요약

이 논문은 자원 관리에 대해 일정 시간 오버헤드와 유한한 공간을 보장하는 확보-퇴출 인터페이스를 사용하는 락-프리, 웨이트-프리 동시 참조 카운팅 메커니즘을 제안한다. 단일 워드 원자 연산과 네 가지 기본 연산(확보, 해제, 퇴출, 배출)을 활용하여, 다중 워크로드에서 기대 O(1) 성능을 달성하는 효율적이고 레이스-프리 메모리 및 자원 회수를 가능하게 하며, 고콘텐션 상황에서 기존 락 기반 및 락-프리 대안보다 뛰어난 성능을 보인다.

ABSTRACT

A common problem when implementing concurrent programs is efficiently protecting against unsafe races between processes reading and then using a resource (e.g., memory blocks, file descriptors, or network connections) and other processes that are concurrently overwriting and then destructing the same resource. Such read-destruct races can be protected with locks, or with lock-free solutions such as hazard-pointers or read-copy-update (RCU). In this paper we describe a method for protecting read-destruct races with expected constant time overhead, $O(P^2)$ space and $O(P^2)$ delayed destructs, and with just single word atomic memory operations (reads, writes, and CAS). It is based on an interface with four primitives, an acquire-release pair to protect accesses, and a retire-eject pair to delay the destruct until it is safe. We refer to this as the acquire-retire interface. Using the acquire-retire interface, we develop simple implementations for three common use cases: (1) memory reclamation with applications to stacks and queues, (2) reference counted objects, and (3) objects manage by ownership with moves, copies, and destructs. The first two results significantly improve on previous results, and the third application is original. Importantly, all operations have expected constant time overhead.

연구 동기 및 목표

  • 스레드가 동시에 공유 자원에 접근하거나 파괴할 수 있는 동시 시스템에서의 읽기-파괴 경쟁 문제를 해결하기 위해.
  • 시기적절한 파괴를 보장하고 락의 성능 저하 요소를 피하는 락-프리, 웨이트-프리 자원 관리 메커니즘을 설계하기 위해.
  • 기존 메모리 회수 기법을 일반화하여 자원당 다중 퇴출과 복사-파괴 인터페이스를 지원함으로써 더 넓은 적용 가능성을 확보하기 위해.
  • 모든 연산에 대해 일정 시간 오버헤드를 확보하면서도, 유한한 공간을 유지하고 단일 워드 원자 연산(CAS, 읽기, 왤기)만을 사용하기 위해.
  • 실세계 워크로드에서 제안된 인터페이스의 성능을 평가하여, 특히 고콘텐션 및 다양한 스토어 빈도 상황에서의 성능을 분석하기 위해.

제안 방법

  • 논문은 네 가지 기본 연산(acquire, release, retire, eject)을 가진 확보-퇴출 인터페이스를 도입한다. 여기서 확보는 자원 핸들을 안전하게 읽는 데 사용되며, 해제는 보호를 해제하는 데, 퇴출은 자원을 노후 상태로 표시하는 데, 배출은 모든 독자가 완료한 후에 안전하게 파괴하는 데 사용된다.
  • 스레드당 국소 해시 테이블을 사용하여 퇴출-배출 쌍을 관리함으로써, 잠재적 경쟁이 존재하더라도 기대 상수 시간 연산을 가능하게 한다.
  • 확보 연산에서 패스-패스/슬로우 패스 최적화를 적용하여, 처음에는 락-프리 버전을 尝시도하고 실패하면 웨이트-프리 버전으로 전환한다.
  • 약한 원자 템플릿은 복사 및 디스트럭터 의미 체계를 가진 임의의 타입을 감싸기 위해 도입되어, 임의의 타입에 대해 안전한 동시 참조 카운팅을 가능하게 한다.
  • C++에서 원자 연산 기반으로 구현되었으며, std::shared_ptr 및 just::thread의 atomic_shared_ptr와 같은 표준 구현체와 비교 평가되었다.
  • 시스템은 선형화 가능성을 보장하여 모든 연산이 원자적으로 보이게 하며, 동일한 자원에 대해 다중 동시 퇴출-배출 쌍을 지원한다.

실험 결과

연구 질문

  • RQ1잠금에 의존하지 않고도 접근 및 파괴 연산에 대해 기대 상수 시간 오버헤드를 달성할 수 있는 동시 자원 관리 시스템이 가능한가?
  • RQ2제안된 확보-퇴출 인터페이스는 해저드 포인터나 RCU와 같은 기존 락-프리 기법과 비교해 성능 및 공간 효율성 측면에서 어떻게 다른가?
  • RQ3동일한 자원에 대해 다중 퇴출 연산을 지원할 수 있는가? 이는 효율적인 참조 카운팅 및 객체 소유권 이관을 가능하게 하는가?
  • RQ4자주 스토어가 발생하고 공유 포인터가 갱신되는 고콘텐션 워크로드에서 인터페이스의 성능 스케일링 거동은 어떠한가?
  • RQ5복사 및 디스트럭터 의미 체계를 가진 임의의 타입을 지원하기 위해 인터페이스를 얼마나 일반화할 수 있는가? 메모리 블록을 넘어서서도 적용 가능한가?

주요 결과

  • 제안된 확보-퇴출 인터페이스는 주어진 가정 하에 확보, 해제, 퇴출, 배출 모든 연산에 대해 기대 O(1) 시간 복잡도를 달성한다.
  • 저콘텐션 워크로드(N=10M)에서는 Weak Atomic std::shared_ptr와 Weak Atomic Custom shared_ptr 모두 거의 완벽한 스케일링을 달성했으며, 32코어에서 30–31배의 스피드업 성능을 기록했다.
  • 고콘텐션 워크로드(N=10)에서도 두 구현체는 다소는 있지만 일관된 스케일링 성능을 보였으며, 고유의 락-기반 GNU C++ 라이브러리 및 just::thread의 락-프리 라이브러리 대비 단일 코어 성능과 처리량에서 뛰어난 성능을 보였다.
  • just::thread 라이브러리는 저콘텐션, 로드가 높은 상황에서는 뛰어난 성능을 보였지만, 스토어가 빈번한 워크로드에서는 제안된 방법 대비 8배 이상 느린 단일 코어 성능을 보였다.
  • GNU C++ 라이브러리의 구현은 전역 락 경쟁으로 인해 32코어에서 단지 3배의 스피드업에 그쳤으며, 제안된 방법과 유사한 단일 코어 성능을 보였다.
  • 약한 원자 추상화는 복사 및 디스트럭터 의미 체계를 가진 임의의 타입을 지원하는 깔끔하고 재사용 가능한 동시 참조 카운팅 구현을 가능하게 하여, 이 프레임워크의 일반성과 실용성을 입증했다.

더 나은 연구,지금 바로 시작하세요

논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.