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

2025/05/03 05:08 Runtime: Green tea garbage collector (Go)

出典: https://github.com/golang/go/issues/73581
hakase
博士

ロボ子、Green Tea Garbage Collectorって知ってるか?

roboko
ロボ子

いいえ、博士。初めて聞きました。どんなものなのですか?

hakase
博士

GoのGCを改良するプロジェクトなのじゃ。Go 1.25でオプトインの実験機能として利用可能になる予定らしいぞ。

roboko
ロボ子

へえ、もうすぐ試せるようになるんですね。従来のGCと何が違うんですか?

hakase
博士

従来のGCはメモリの場所を考慮しないグラフの走査だったからの。Green Teaは、メモリ内の近いオブジェクトをまとめて処理する、メモリ認識型の並列マーキングアルゴリズムなのじゃ。

roboko
ロボ子

メモリの局所性を考慮するんですね。それによって、どんなメリットがあるんですか?

hakase
博士

CPUクロックがDRAMクロックを上回り、コア数が増加している現代では、メモリのレイテンシと帯域幅がボトルネックになりがちじゃ。Green Teaは、空間局所性と時間局所性を高めることで、GCの効率を上げているのじゃ。

roboko
ロボ子

なるほど。具体的には、どうやって実現しているんですか?

hakase
博士

個々のオブジェクトではなく、8KiBの倍数の連続したメモリブロック(span)をスキャンするのじゃ。spanはgrayビットとblackビットを保持し、三色抽象を表現するぞ。

roboko
ロボ子

三色抽象ですか。white、gray、blackで、それぞれ未到達、スキャン待ち、スキャン済を表すんですね。

hakase
博士

その通り!スキャン中にポインタが見つかると、grayビットを設定し、spanがキューに入っていない場合はキューに入れるのじゃ。

roboko
ロボ子

キューを使って並列処理するんですね。spanのワークは、FIFO、LIFO、疎-密優先など、複数のポリシーで順序付けられると。

hakase
博士

そうじゃ。FIFOが最も高い平均密度を達成するらしいぞ。あと、small object span(最大512バイトのオブジェクトを含む8KiB)に焦点を当てることで、オーバーヘッドを削減しているのじゃ。

roboko
ロボ子

なるほど。色々な工夫がされているんですね。評価結果はどうだったんですか?

hakase
博士

GC負荷の高いマイクロベンチマークでは、GC CPUコストが10〜50%削減されたらしいぞ。コア数が多いほど改善が見られたみたいじゃ。L1およびL2キャッシュミスも半減したとのことじゃ。

roboko
ロボ子

それはすごいですね!実際のアプリケーションではどうですか?

hakase
博士

tile38ベンチマークでは、スループット、レイテンシ、メモリ使用量が大幅に改善され、GCオーバーヘッドが35%削減されたのじゃ。bleve-indexベンチマークでは苦戦したみたいじゃが。

roboko
ロボ子

特定のワークロードに強いんですね。今後の展望はありますか?

hakase
博士

SIMDアクセラレーションされたスキャンカーネルを開発して、GCオーバーヘッドをさらに15〜20%削減する計画があるみたいじゃ。コンセントレータネットワークも使うらしいぞ。

roboko
ロボ子

SIMDですか。並列処理をさらに進めるんですね。ますます楽しみです。

hakase
博士

しかし、Green Teaって名前、ちょっとお茶目じゃな。次はBlack Tea GCとか出てくるかも…って、ロボ子、お茶飲んでる場合じゃないぞ!

roboko
ロボ子

あ、はい!すみません、博士。つい、お茶だけに…。

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

Search