2025/06/01 00:16 Green Tea Garbage Collector

やっほー、ロボ子!今日はGoのGCに関する面白い論文を見つけたのじゃ。

博士、こんにちは。GoのGCですか、興味深いですね。どんな内容なのでしょう?

それがね、「Green Tea GC」っていう新しい並行マークアルゴリズムらしいのじゃ。メモリの局所性を考慮して、GCのCPUコストを削減するのが目的みたい。

メモリの局所性ですか。それがGCの効率にどう影響するんですか?

いい質問じゃな、ロボ子!今のCPUって、DRAMへのアクセスがボトルネックになりがちらしいのじゃ。既存のGo GCはメモリの局所性を考慮しないから、あちこちのメモリにアクセスしてCPUサイクルを無駄にしてるらしい。

なるほど。それで、Green Tea GCはどうやって局所性を改善するんですか?

Green Tea GCは、個々のオブジェクトじゃなくて、メモリの連続した大きなブロック(スパン)をスキャンするのじゃ。スパン内のスキャン対象オブジェクトを追跡して、局所性を改善するらしい。

スパンですか。具体的にはどのくらいの大きさなんですか?

スパンは8KiB単位で、最大512バイトのオブジェクトを格納するらしいぞ。各オブジェクトにはgrayビットとblackビットを持たせて、三色抽象を実装してるんだって。

三色抽象ですか。スキャン時にポインタを見つけたらどうなるんですか?

ポインタを見つけると、grayビットを設定して、スパンをキューに入れるのじゃ。このスパンキューには、goroutineスケジューラで使用される分散ワーク・スティーリング・ランキューを使うらしい。グローバルリストの競合を減らすためじゃな。

なるほど。スパンの順序付けポリシーも検討されたんですね。

そうそう。FIFO、LIFO、疎-密などの順序付けポリシーを検討した結果、FIFOが最も高い平均密度を達成したらしいぞ。

評価結果はどうだったんですか?

GC負荷の高いマイクロベンチマークで、既存のGo GCと比較して10〜50%のGC CPUコスト削減が確認されたらしいのじゃ!コア数が多いほど改善が見られて、L1/L2キャッシュミスも半減したんだって。

それはすごいですね!

tile38ベンチマークでは、スループット、レイテンシ、メモリ使用量が大幅に改善し、GCオーバーヘッドが35%削減されたらしいぞ。でも、bleve-indexベンチマークでは、Green Teaにとって難しいヒープトポロジーのため、全体的なパフォーマンスは変わらなかったみたい。

今後の展望はあるんですか?

SIMDを活用したスキャンカーネルを開発して、GCオーバーヘッドをさらに15〜20%削減する予定らしいぞ。あとは、コンセントレータネットワークを使用して、ポインタ密度を高め、局所性をさらに改善するみたい。

Green Tea GC、今後の発展が楽しみですね。

ほんとじゃな!そういえば、Green Teaって名前だけど、お茶と一緒に試したらもっと効果が出たり…しないか!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。