developments
- Fast FreeBSD reboots with kload
BSDCan 2012の初日はMicrosoftおよびNetAppからFreeBSDのHyper-Vサポートの発表があったことも印象的でしたが、
この日最も印象的だったのはIsilon SystemsでFreeBSDカーネルコンサルタントを務めるRussell Cattelan氏が発表したkloadではなかったかと思います。 kloadはFreeBSDの終了前に新しいカーネルメモリイメージを作成し、
現在実行中のカーネルメモリ領域を上書きし、 ハードウェアのリセットを実施することなくシステムの再起動を実現するための機能です。BIOSやファームウェア、 起動時における周辺機器の処理などを飛ばすことがき、 再起動にかかる時間を大幅に高速化できるという特徴があります。 この機能はBHyVe向けに開発されたuserboot.
soをベースに開発された機能です。再起動時にはkenvパラメータの上書きや、 特定のカーネルを指定してのシステム再起動もできると説明がありました。 kloadはまず1BG以下のメモリ領域に一時的なページ領域を確保します。ここに作成すべきカーネルメモリイメージを構築し、
マッピングすべきデータをコピーしたら、 現在のカーネルイメージに作成したカーネルイメージを上書きして、 処理を最初のコードへ移動させます。こうすることでH/ W的なリセット処理を実施することなく、 BIOS関連の処理を飛ばした高速な起動が可能になります。 発表の会場では実際にkloadを使った再起動のデモンストレーションがありました。rebootコマンドが実行されてから数秒してすぐに起動が開始されるといった様子でした。BIOS関連の処理が省略されており、
高速な再起動に効果的であることがわかります。 対応すべき課題としては、
ドライバがそれぞれ適切にハードウェアをリセットする処理を実施する必要があること、 アセンブラで開発されている部分のデバッグが困難であること、 kload自体はアンロードができないことなどが挙げられいました。なお、 デバッグに関しては今後はBochsを使って実施可能であること、 不必要なページのコピーを避けることでさらに高速化が期待できることなどの説明もありました。 FreeBSD HEADへのマージについてはいまのところ確かなスケジュールは持っていないということでした。しかし、
会場にきているFreeBSD committersはかなり関心を持って発表を聞いており、 質疑応答の様子をみても、 マージするための障壁はそれほど高くないように思いました。そう遠くない段階でマージが実施されるような印象を受けました。