Safepoint patent

HotSpot の Safepoint に関するパテント発見。斜め読み。

US Patent 6523059 SYSTEM AND METHOD FOR FACILITATING SAFEPOINT SYNCHRONIZATION IN A MULTITHREADED COMPUTER SYSTEM

GC の様な global operation の際にはオブジェクトの位置、参照するポインタの位置が分かっていなければならない。stop 命令で単に止めても safe region にいるかもしれないし、unsafe region にいるかもしれない。safe region はポインタを触っていない事が分かっている領域。unsafe はポインタを触っているかもしれない。スレッドをサスペンドして、safe ならよし、unsafe なら resume して後でまた suspend でもいいのだが、スレッドが多いと重い処理になる。

各スレッドに safepoint に関する状態と、その遷移時の処理を持たせ、また safepoint lock を設けて、比較的軽い処理を実現したというもの。

各スレッドが safe, unsafe, transitional の状態を持つ様にするとサスペンドしなくても状態が分かる。スレッドが safe region にいるなら、global safepoint operation の最中でも動作可能。global safepoint operation 中にtransitional region に入ると自動的に(ロックで)ブロックされる。

safepoint を開始する方は safepoint lock を取り、global safepoint operation が終わったら解放する。

lock を取った後、各スレッドの状態を調べて、safe, blocked で無い物に関しては、suspend して状態を確認する事を繰り返し、それらが 0 になるまで待つ。

カウンタの操作をどこでやるか、実際のグローバルな safepoint 同期をどのように伝えるか、細かい違いはあるけれど、OpenJDK と基本的な流れは変わらない様だ。

safe region にいるスレッドは unsafe への transition までは global safepoint operation 中でも動作できるとしている。