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)|Feb 17, 2020
Distributed systems and fault tolerance参考文献 26被引用数 6
ひとこと要約

本稿では、リソース管理に一定時間オーバーヘッドと上限のあるメモリを保証する、ロックフリーでウェイトフリーセマンティクスを採用した、取得・リタイアインターフェースを用いた、参照カウントの並列処理機構を提示する。単一ワードのアトミック操作と4つの基本操作(acquire, release, retire, eject)を活用することで、複数のワークロードにおいて予想される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、読み取り、書き込み)のみを用いること。
  • 提案されたインターフェースのパフォーマンスを、特に高競合状態および変動するストア頻度を伴う実世界のワークロードで評価すること。

提案手法

  • 本稿では、4つの基本操作(acquire:リソースハンドルを安全に読み取る、release:保護を解放する、retire:リソースを古くなったとマークする、eject:すべてのリーダーが終了した後に安全に破壊する)を備えた、取得・リタイアインターフェースを導入する。
  • リタイア・エジェクトペアの管理にスレッドごとのローカルハッシュテーブルを用いることで、競合が生じても予想される定数時間オペレーションを実現する。
  • acquire操作において、ファストパス/スローパス最適化を採用し、まずロックフリー版を試行した後、失敗した場合はウェイトフリー版にフォールバックする。
  • weak_atomicテンプレートを導入し、任意の型にコピーおよびデストラクタのセマンティクスをラップすることで、任意の型に対する安全な並列参照カウントを可能にする。
  • C++でアトミックプリミティブを用いて実装し、std::shared_ptr や just::thread の atomic_shared_ptr といった標準実装と比較評価する。
  • システムは線形化可能であることを保証しており、すべての操作が原子的であるように見える。また、同じリソースに対して複数の並列リタイア・エジェクトペアをサポートする。

実験結果

リサーチクエスチョン

  • RQ1ロックに依存しない状態で、アクセスおよび破壊の両操作において、期待される定数時間オーバーヘッドを達成できる並列リソース管理システムは構築可能か?
  • RQ2提案された取得・リタイアインターフェースは、ハザードポインターやRCUといった既存のロックフリー技術と比較して、パフォーマンスおよび空間効率の点で優れているか?
  • RQ3同一リソースに対して複数回のリタイア操作をサポートできるか。これにより、効率的な参照カウントおよびオブジェクト所有権の移管が可能になるか?
  • RQ4ストア頻度が高く、共有ポインタの更新が繰り返される高競合状態のワークロード下で、インターフェースのスケーリング特性はいかなるものか?
  • RQ5本インターフェースは、単なるメモリブロックにとどまらず、コピーおよびデストラクタのセマンティクスを持つ任意の型をサポートするよう一般化可能か?

主な発見

  • 提案された取得・リタイアインターフェースは、提示された仮定のもとで、acquire, release, retire, eject のすべての操作において、期待される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倍のスループット向上にとどまり、提案手法と同等のシングルコアパフォーマンスであったが、スケーリングが著しく制限された。
  • weak_atomic抽象化により、コピーおよびデストラクタのセマンティクスを持つ任意の型をサポートする、洗練され、再利用可能な並列参照カウントの実装が可能となり、フレームワークの汎用性と実用性が実証された。

より良い研究を、今すぐ始めましょう

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。