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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

あ、はい!すみません、博士。つい、お茶だけに…。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。