BSD界隈四方山話

第14回2015年第2四半期、FreeBSDステータスレポート-ASLR、高速再起動、対応アーキテクチャ増加

FreeBSDプロジェクトから2015年第2四半期分のステータスレポートFreeBSD Quarterly Status Report - Second Quarter 2015が公開されました。中から特に興味深いものを取り上げて紹介します。

FreeBSD Release Engineering Team

FreeBSDリリースエンジニアリングチームからは第2四半期に進んだビルドツールに関する内容と、8月末のリリースが予定されているFreeBSD 10.2-RELEASEに関して状況説明が行われました。FreeBSDリリースエンジニアリングチームはリリーススケジュールの策定と発表、コードフリーズ、ブランチの管理などリリースに関する作業をとりまとめているチームです。

この第2四半期は特にビルドツールの開発が進められたと説明があります。まず、Andrew Turner氏によって取り組まれたarm64(aarch64)への移植の成果物をビルドツールに取り込み、FreeBSD/aarch64のメモリスティックイメージとQEMUで使用するための仮想マシンイメージが作成できるようになりました。arm向けのビルドコードも大幅な書き換えが実施され、特別な外部ツールを使わなくともFreeBSD/armのイメージがビルドできるようにもなっています。

FreeBSD/armイメージとして生成されるのは次のマシン向けのイメージです。

  • BEAGLEBONE
  • CUBOX/HUMMINGBOARD
  • GUMSTIX
  • RPI-B
  • RPI2(これは今のところFreeBSD-CURRENTのみ)
  • PANDABOARD
  • WANDBOARD

また、すでにサポートしているホスティングサービス向けの仮想マシンサポート(Microsoft Azureプラットフォーム)に加えて、新しく次の3つの仮想ディスク作成機能が追加されました。

  • Amazon EC2(Colin Percival氏)
  • Google Compute Engine(Steve Wills氏)
  • Vagrant/Hashicorp Atlas(Brad Davis氏)

FreeBSDプロジェクトはFreeBSD Foundationの支援を受けながら、リリースエンジニアリングの改善およびスケジュール通りにオンタイムでリリースするための改善作業に取り組んでいます。FreeBSD 10.2-RELEASEのリリース作業は今のところオンタイムで進んでおり、今までのリリースの中でもかなりよく作業が進んでいるように思います。

アドレス空間レイアウトのランダム化(ASLR)

FreeBSDのダウンストリームディストリビューションにあたるHardenedBSDを開発するチームからは、まだ多少の作業は必要なものの、アドレス空間レイアウトのランダム化(Address Space Layout Randomization、ASLR)の実装がほぼ完了したことが伝えられました。FreeBSDカーネルは今のところASLRの機能を持っていませんので、将来的にはこのHardenedBSDの成果物をバックポートする形でASLRの機能を取り込むことになると思います。

HardenedBSDチームが実装したASLRはスタックに対して42ビットのエントロビーを使っており、ASLRをサポートしているオペレーティングシステムの中でもっとも高いものになります。OpenBSDをはじめWindows、Mac OS X、Linuxなど主要オペレーティングシステムのいくつかはASLRを実装していますが、その強度はオペレーティングごとにまちまちです。

また同チームは仮想ダイナミック共有オブジェクト(Virtual Dynamic Shared Object、VDSO)に関してもランダム化を実施したと説明しています。VDSOはカーネルとユーザランドの間で共有されるいくつかのページのことです。この実装はすでにプロダクションユースで活用されており、動作も堅牢だと説明があります。

高速再起動を可能にするrootfs

今回のステータスレポートで最も興味を惹かれるものが、FreeBSD Foundationの支援のもとでEdward Tomasz Napierała氏が取り組んでいるrootfsの実装です。この機能に関しては2012年のBSDCanで発表があったFast reboots with kloadにおけるkloadと結果的に同じ結果をもたらすものですが、実現するアイディアはだいぶ違っているように見えます。

現在のFreeBSDの実装では、システムを再起動する時にはハードウェアのブート処理も実行されるようになっています。BIOSやUEFIが起動処理をはじめ、必要に応じて搭載されているチップやRAIDカードなどが初期化処理を行い、メモリのチェックなどが走ります。数百GBとか数TBといったクラスのメモリを搭載していると、システムを起動するだけで数分から数十分ほどの時間が必要になります。これはシステム運用上あまり好ましくないものです。

rootfsでは再起動時のこうしたハードウェアの初期化処理/ブート処理を飛ばすというものです。再起動時の処理が次のような順序になり、ハードウェアの処理にかかる時間の分だけ再起動にかかる時間が短くなります。ハードウェアの初期化にかかる時間は起動時間のかなりの部分を占めているので、rootfsを使った高速再起動は体感的にかなり高速化されたと感じるのではないかと思います。

  • すべてのプロセスを終了
  • rootfsをアンマウント
  • 新しいrootfsをマウント
  • initを実装
  • 起動スクリプトの実装

ダウンタイムの大幅な短縮が期待されますし、すでに今後リリースされるどこかのバージョンで取り込まれる機能とみられるあたりがとても魅力的です。rootfsに関しては今後機会を見つけてより詳しく取り上げたいと思います。

おすすめ記事

記事・ニュース一覧