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

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

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

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

それはすごいですね!

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

ほんとじゃな!そういえば、Green Teaって名前だけど、お茶と一緒に試したらもっと効果が出たり…しないか!

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

Search