Raspberry Piの起動高速化したい
Raspberry Piでデジカメ作ったのですが、起動速度が遅くて気になっていました。
まあLinuxだし仕方ないなと思いながらも、もうちょい早くならないかなと思い高速化にチャレンジしてみました。ちなみに最初に行っておきますとタイトル詐欺ですので起動時間半分とかを期待しているなら別のサイト行って下さい。
起動時間を分析してみよう
起動時間実測
まずは現状把握してみます。電源を入れてから起動するまでiPhoneのストップウォッチで測定。
実測 47秒
bootchartインストール
次は、下記のサイトを参考にbootchartというソフトを使って起動時間を分析します。
まずはbootchartというソフトでを入れて起動時間の内訳を調べてみます。ネットに接続したRaspberry Piを起動して以下のコマンドを実行。
$ sudo apt-get install bootchart
後は参考サイトの手順通り
bootchart測定
以下のファイルを修正
/boot/cmdline.txt
内容は以下
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait init=/sbin/bootchartd
あとは再起動すると /var/log/bootchart.tgz に起動時間の分析結果が保存されますので、これをSFTP等でパソコンにダウンロードしてやります。
bootchart画像化
以降の手順はRaspberry Piではなくて、クライアントのパソコンで行います。次にbootchartを画像化します。ちなみにMac向けですのでWindowsの人はグーグル先生に聞いて下さい。まずは以下のファイルをダウンロード
bootchart-09.tzr.bz2
次に、参考サイトの手順ではantというアプリでビルドするのですが、自分の環境には入っていなかったので下記のコマンドを入力してインストール
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" $ brew install ant
あとはbootchartをインストールしたフォルダで以下のコマンドを実行して、bootchartを画像ファイル化して見えるようにします。
$ ant
$ java -jar bootchart.jar bootchart.tgz
これで bootchart.pngというファイルが生成されます。
bootchart分析
中身は以下です。起動時、どんなプロセスにどのくらい時間がかかっているか一目でわかるようになります。と言いたいところですが、まあ大して詳しいわけじゃないのでほとんどよくわからないですw
起動時間は41秒くらい。実測とずれているのは、電源投入してからbootchartが起動するまでにかかる時間が5,6秒あるからでしょう。
起動時間改善
起動時間改善にとりかかります。一番簡単な、起動時に時間がかかっている不要なサービスを起動しないようにします。ここからは、またRaspberry Piで作業行います。chkconfigというアプリがサービスの自動起動を管理しやすいのでインストールします。以下のコマンドでOK。
$ sudo apt-get install chkconfig
次に以下のコマンドで自動起動しているサービスをチェック
$ chkconfig -list
Raspberry Piはランレベル2で実行するので、ランレベル2でonになっているサービスをoffしてやります。自分の場合は以下。
$ sudo chkconfig alsa-utils off
$ sudo chkconfig avahi-daemon off
$ sudo chkconfig dbus off
$ sudo chkconfig triggerhappy off
$ sudo chkconfig netatalk off
$ sudo chkconfig plymouth off
効果確認
再度起動して、bootchartを分析します。offにしたサービスの分が削られて起動時は36秒になっています。
実測時間は42秒でした。はい、5秒くらい高速化しました。やったね!
更なる高速化
これ以上高速化するのは簡単には難しそうです。自分が使っているRaspberry PiのOSはRaspbianで、DebianというLinuxディストリビューションがベースのOSですが、Fedora CoreというLinuxディストリビューションだと起動の仕組みが変わって高速化されているようなので、Fedora CoreベースのOSを使うと高速化できるのかも。あとは、オーバークロックしたり、OSのカーネルにまで手を入れるとか。
いずれにせよここからはかなりハードル高そうなので、自分は今回はここまでにしておきます。