x86のスキマを活用するAzulのPauselessGC
(via: http://twitter.com/#!/hideaki_t/status/41647363726516224 )
- http://www.nminoru.jp/~nminoru/java/cms/pauseless_gc.html (一番下のコメントが興味深い)
- 独自プロセサ時代のPauselessGCの解説
- http://www.infoq.com/articles/azul_gc_in_detail
Azulは自社プラットフォームをやめてx86に移った( http://d.hatena.ne.jp/mjt/20101227/p2 )が、x86で従来同様のPauselessGCを実現するために2つのアプローチを行っている。
ここで議論されている"x86に無い機能"は"ロードバリア"で、あるポインタを参照したときに例外が起こるようにしたい。
- 仮想化機能(Nested Paging)の活用
(ここは何故必要なのかまだ理解できていない。GCとMutatorでメモリ空間を分けたいから? - Mutatorを仮想マシンに押し込めると"Mutatorが触るとTrapが発生するが、GCが触っても平気なメモリ"を作れる。しかし、単純に2つのプロセスでメモリを共有すれば同じことができてしまう。)
- 実行アーキテクチャの活用
x86のout-of-order実行アーキテクチャでは、not-takenな(あるいは、分岐予測がヒットする)分岐命令のコストはほぼゼロなので、普通にタグビットのチェックを挿入するという方法も取ることができる。