Network Attached Processing の Pauseless GC

昨日飯を喰ってたときに出ていたAzulのJava専用箱の話。
この記事では特にJVMGCをハードウェアサポートで高速化する方法について言及されている。世界を一切止めてGCする通常のプロセッサ上でのGCではなくて、ニーモニックレベルでの拡張をすることで非常にコストがかかる処理を現実的な速度で実行できるというもの。
基本的な考え方はマークアンドスイープなんだけど以下の点が違う

  • アライメントの関係で通常は使わないポインタの下位3bitを使ってマーキング状態を示すフラグとする
  • このフラグを見るような専用ロード命令がある
  • 未巡回のオブジェクトを通常スレッドが参照したときには、ハンドラがフラグを立てて巡回リストに追加する

みたいな感じ。確かにあらゆる参照について下位ビットを見るような処理が入るとかなりペナルティになりそう。
同じようにオブジェクトの再配置のときにもハードウェアの支援があって、これはTLBを拡張することで通常のスレッドの参照のみトラップするような仕掛けをいれている。これでGCによって移動されたオブジェクトへの参照のみをトラップして向け直しができる。これもあらゆる参照をすべて引っかけていたのでは現実的なコストでは済まないので、ハードウェア支援がないと現実的ではなさそう。
でもこのプロセッサを作っているAzulって結局どうなったんだろう。その後潰れたという話も聞かないが、大きな導入実績も聞かないし。どこかのサーバメーカが技術ごと買うと思っていたのだが。
Java(とJVM)自体が一時の熱狂的に評価される時期を過ぎて逆に過小評価されている時期なんだと思う。あと5、6年ぐらいしたらもう一度脚光を浴びる時期が来るのだと期待。