前回、いろいろな最適化にトライしました。
今回は更なる最適化をはかりたいと思います。

◆電源投入~カーネルまで


そもそもLinuxカーネルのログ出力が開始されるまでで、8秒程かかっているように感じます。
つまりLinuxカーネル到達前のブートローダ部分でそれだけかかっている?

NOOBS は便利で高機能ですが、それゆえに起動時間の足を引っ張っている可能性はあります。

以前の記事では NOOBS を使って Raspbian をインストールしましたが、NOOBS を経由せず Raspbian を起動させてみて、起動時間が短縮されるか見てみたいと思います。

http://www.raspberrypi.org/downloads/ から今度は Raspbian のイメージファイル(2014-09-09-wheezy-raspbian.zip)をダウンロードします。

Win32DiskImager (http://sourceforge.jp/projects/sfnet_win32diskimager/) をダンロード&インストールし、ダウンロードしたイメージファイルを展開し microSD 書き込みます。、

※ microSD の内容は全て消去されます。ご注意を!!


で、電源投入すると、、、
前より明らかに早いです!!

4秒くらいは早くLinuxカーネルに到達出来ている気がします。
パーティションも2個とスッキリしました。(NOOBSを使用したインストール時はパーティションが6個くらい出来ていました。)

こちらの環境をベース環境としたいと思います。
前記事で行なった初期設定最適化等を再度行ないます。。。(面倒くさいですが)

◆カーネル起動~ログインプロンプト表示まで

気を取り直して、、、

起動時にカーネルログがベロベロ出ますが、見てますか?特に見ませんよね?
なので、あのカーネルログ出力を抑制しようと思います。
下記のように、カーネルコマンドラインに quiet を追加するだけです。

/boot/cmdline.txt
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p6 rootfstype=ext4 elevator=deadline rootwait quiet
起動してみると、ログインプロンプト到達までが 1, 2秒短縮されたような気がします。

コンソールへの出力を抑制するだけで、内部的にはきちんとログ出力はされているので、
どうしても見たいという場合は
$ cat /var/log/syslog
とすれば、ブート時のカーネルログを確認することが出来ます。

実際に、/var/log/syslog 内のルートファイルシステムのマウント箇所のログが下記ですが、
quiet を付ける事で、ログ出力のタイミングが 1.3s 程早くなっている事が確認できます。
高速化は気のせいではなかったようです。よかった。よかった。

quiet なし
    : (略)
raspberrypi kernel: [   13.90288] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
quiet あり
    : (略)
raspberrypi kernel: [   12.670055] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)

◆オーバークロック
早く動かしたいならクロックを早くする。道理です。真理です。
やはり手っ取り早いのはオーバークロックでしょう。
$ sudo raspi-config
で、"7 Overclock" を選択します。
とはいいつつも、不安定になっては元も子もないので、とりあえず中間のやつにしときます。
Medium 900MHz ARM, 250MHz core, 450MHz SDRAM, 2 overvolt

◆fsckチェックの抑制

起動時のfsckチェックを省いてみます。

/etc/fstab
proc            /proc           proc    defaults          0       0
/dev/mmcblk0p1  /boot           vfat    defaults          0       0
/dev/mmcblk0p2  /               ext4    defaults,noatime  0       0
tmpfs           /tmp            tmpfs   defaults,size=32m 0       0
tmpfs           /var/log        tmpfs   defaults,size=32m 0       0

リブートしてみましたが、、、
あんまり、早くなったような感じはないです。体感的には分かりません。

これは諸刃の剣でもあるので、ここは変更しなくてもいいかもしれません。
自分は、毎回でなくてもたまにfsckするくらいでいいかな、というのと、ファイルシステム破損に対しては"ディスクイメージ自体のバックアップ"で対処しようと思っていますので、このままで行ってみます。

◆起動時のスクリプトは...(よく分からないので)現状維持
起動時間のボトルネックの大半はユーザー空間の起動スクリプトのように(体感では)思いますが、あのあたりのスクリプトは何をしてるのか自分はよく分かってないので、今は触らずに置いておきます。今度は(もやは自己満足ですが)カーネルをいじくって最適化をはかりたいと思います。(自分はこっちが本業なので)

次回はカーネルを自前ビルドし、差し替えたいと思います。