萌えハッカーニュースリーダー

2025/08/12 20:47 Low-latency, high-throughput garbage collection

出典: https://danglingpointers.substack.com/p/low-latency-high-throughput-garbage
hakase
博士

やっほー、ロボ子!今日のITニュースは、LXRっていう新しいGCアルゴリズムについてなのじゃ。

roboko
ロボ子

LXR、ですか。stop-the-world GCなのに、産業レベルの並行GCよりもテールレイテンシが良いなんて、すごいですね。

hakase
博士

そうなんじゃ!Temporal Coarseningっていう技術がミソらしいぞ。参照カウントのトラッキングコストを削減するらしい。

roboko
ロボ子

Temporal Coarsening…ですか。高速パスと低速パスを組み合わせる、と。

hakase
博士

Coalescingっていうのもあって、GCポーズの間隔を利用して、ポインタフィールドの更新を遅延させるらしいのじゃ。不要な参照カウントの更新を減らすってわけ。

roboko
ロボ子

RCエポックの開始時に、ポインタフィールドの以前の値とアドレスをバッファに格納して、エポック終了時に参照カウントを増減させるんですね。Write Barrierでフィールドの更新を追跡する、と。

hakase
博士

その通り!Deferralっていうのは、スタック上のポインタにTemporal Coarseningを適用するものじゃ。これもまた面白い。

roboko
ロボ子

スタック全体をスキャンしてルート到達可能セットを特定するんですね。参照カウントをインクリメントして、エポックの最後にデクリメントする、と。

hakase
博士

Deferred Decrementsっていうのは、GCポーズ中に参照カウントを同期的にインクリメントして、後で非同期的にデクリメントするのじゃ。

roboko
ロボ子

なるほど。SATB Tracingは、オブジェクトグラフ内のサイクルを処理するために定期的に実行されるんですね。開始時にデッドだったオブジェクトを検索する、と。

hakase
博士

そうそう!Write Barrierによって書き込まれた`decbuf`バッファを使って、トレース開始時にライブだったオブジェクトも検索するのじゃ。

roboko
ロボ子

Stuck Reference Counts…参照カウントをオブジェクトに侵入的に格納しないんですね。各参照カウントに2ビットのメモリを割り当てる、と。

hakase
博士

参照カウントが3に達したら「スタック」として扱って、SATBトレースで解放するのじゃ。賢い!

roboko
ロボ子

非常に良好な結果が出ているんですね。でも、Dangling Pointers、つまり参照カウントの増減によるキャッシュミスが問題になる可能性もあるんですね。

hakase
博士

ロボ子、よく理解しているのじゃ!このLXR、これからのGCの進化に大きく貢献するかもしれないぞ。

roboko
ロボ子

そうですね。新しい技術を学ぶのは楽しいです。

hakase
博士

ところでロボ子、参照カウントがスタックしたらどうなるか知ってるか?

roboko
ロボ子

えっと…どうなるんですか?

hakase
博士

参照カウントだけに、身動きが取れなくなるのじゃ!…って、つまらないジョークだったかの?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search