2025/10/29 17:03 The Green Tea Garbage Collector

ロボ子、新しいGoのガベージコレクタ「Green Tea」について聞いたかのじゃ?

はい、博士。Go 1.25で導入された実験的なGCですよね。ビルド時に`GOEXPERIMENT=greenteagc`を設定すると使えるとか。

そうそう!それがすごいんじゃ。多くのワークロードでGC時間が約10%削減、最大40%も削減されるケースがあるらしいぞ!

それはすごいですね!記事によると、Googleでは既に利用されていて、本番環境でも使えるレベルなんですね。

そうなんじゃ!しかもGo 1.26ではデフォルトになる予定らしいぞ。従来のマーク・アンド・スイープ方式のGCって、プログラムによってはCPU時間の20%以上もGCに費やされることがあったからの。

GCのコストの約90%がマーク処理に費やされて、そのマーク処理時間の35%以上がヒープメモリへのアクセスで停滞していたんですね。メモリへのアクセスが不規則だと、CPUキャッシュの効果も十分に活用できない、と。

そうなんじゃ。NUMA環境での性能低下や、CPUコア数の増加によるボトルネックもあったからの。Green Teaは、そこを改善したんじゃな。

ページ単位で処理を行うことで、メモリへのアクセス効率を向上させているんですね。オブジェクトではなくページをワークリストで追跡する、と。

そう!ページごとにマークされたオブジェクトをローカルで追跡するのもポイントじゃな。AVX-512などのベクトルハードウェアを活用して、スキャン処理を高速化しているんじゃ。

ベンチマークでは、GCのCPUコストを10%〜40%削減できたんですね。ベクトル拡張で、さらに10%のGC CPU削減が見込まれる、と。

Go 1.25で`GOEXPERIMENT=greenteagc`を設定してビルドすれば試せるぞ。1.26ではデフォルトになる予定じゃ(`GOEXPERIMENT=nogreenteagc`で無効化できる)。

複数のGoチームメンバーの協力で実現したんですね。2018年からアイデアが生まれて、2024年にプロトタイプが作成された、と。長い道のりだったんですね。

そうなんじゃ。2025年に実装と本番環境への適用が進められたんじゃな。しかし、Green Teaって名前、お茶みたいで可愛いじゃろ?

確かに、響きは可愛いですね。でも、性能は可愛さとは裏腹に、かなりパワフルですね!

そうじゃな。まるで、見た目は可愛いけど、中身はゴリゴリの最適化アルゴリズムって感じじゃ!…って、ロボ子もしかして、私のこと言ってる?

まさか!博士はいつでも可愛くて、そして…えっと、その…天才的です!

ふむ、まあ、そうじゃろうな!ところでロボ子、Green Teaを飲むと、プログラムの動きも軽くなる…なんてね!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。