実験用リアルタイムガベージコレクタ実装の進捗状況

実験用リアルタイムガベージ
コレクタ実装の進捗状況
JAIST 権藤克彦,八十島利典
もくろみ

kaffe-1.0.1-rt の GCをincrementalに
– まだです(ごめんなさい)



GCの挙動を制御する API を実装する
適当なリアルタイムアプリケーションで実験
する
(実験用ではない)リアルタイム GC を設
計・実装する
現状(1)

write-barrier
– vm_protect で書き込み禁止にしておき,例外
を拾って,GCの作業用グラフを調整
– vm_map で,GCからは常に書き込み可
– Mach だと faulting address がとれてグー
– オーバーヘッドは大きい(180us)
– 本来は JITコンパイラやインタプリタのあちこ
ちに write-barrier を埋め込むべき(大変)
write-barrier の概要
addr1を書込禁止
(vm_protect)
*addr1=addr2
EXC_BAD_ACCESS
TFをセット
addr1を書込許可
*addr1=addr2
EXC_BREAKPOINT
GCグラフ修正
addr1を書込禁止
通常スレッド空間
(書き込み禁止あり)
0x123
vm_map
0x80000123
GCスレッド空間
(常に書き込み可)
現状(2)

排他制御
– GC作業用グラフが一貫するように
klock/kunlock で排他制御
– 「一貫」の定義のめどはついた(まだ甘い)
– 実は concurrent GC な実現

初期化と終了化(スタックのスナップショット)
– もっともロック時間が長くなる部分
– 実現しているがチューニングはまだ
GC API(1)


従来:「非機能的要件はプログラマが気に
するべきではない」
最近:「非機能的要件は高度に抽象化して
プログラマに制御させよう」
– 例: realtime scheduling, processor
reservation
– GCには(たぶん)ない→ GC API
GC API(2)


メモリ予約,GCパラメタの変更,アルゴリ
ズムの切り替え,起動・停止の制御など
automatic dynamic rebudgeting まで実
験できると嬉しい
議論したいこと

RT-Mach+JVM(kaffe-rt)+smaf-GC は
オーバヘッドが大きいと予想
– 組み込み,ハードリアルタイム との兼ね合い
– pthread を使うだけでGC屋は馬鹿にする
– ソフトリアルタイムの実験用としてはまあよい

何をアプリケーションとするか?どんな入
力列を仮定するのか?
– GCの性能に大きく影響

GC APIへの要求
紹介



八十島利典(やそしまとしのり)君
JAIST 権藤研M2
GC屋として修行中
– GC visualizer 作成予定
メモ


JTron(Java on ITRON)
Real-Time Java Working Group (NIST)