« Arch LinuxでもJupiterを使ってみる(11/24書き直し) | トップページ | NetworkManager とか日本語設定とか »

2011/10/14

e4ratで高速起動

Ureadaheadと別の方法で高速起動を実現しているのがe4ratです。元々はDebianのパッケージなんですが、良いものはどんどん取り入れる(といってもAURなんであくまでもユーザ責任ですが)Archな人々のこと、当然e4ratも動作出来るようにしてしまっています。
参考:ArchのWiki記事
Ureadaheadが起動しなければいけないモジュールやデーモンを先読みして効率化するのに対して、e4ratは起動しなければいけないものの物理的なディクス上の順番を並び替えることによってディスクのアクセスを効率化して高速化をする、という手法を取っています。このため、
  • 物理的なシークがなく、ランダムアクセスに強いSSDにはほとんど効果がありません。
  • デーモンだけでなく、プログラムも含めた効果があります(起動するプログラムが決まっている場合ですが)
  • Run level 5でのログイン(グラフィカルログイン)を使用する人に効果があります。つまりデスクトップユーザほぼ全員ですが。
  • その名前の通り当初はext4ファイルシステムにのみ有効で、他のファイルシステムで使うとシステムにダメージを与えるものでした。今は対応するファイルシステムも増えているみたいですが。

おもしろい考え方であるのですがSSDに対して効果がないという事で、現在のHDD環境からSSDに戻す前に試してみることにしました。
結果は破壊的な威力がありました。これじゃSSDの立場がないじゃん・・・・

(10/31 追記) AURからcommunity レポジトリに昇格してました! auditもついでに。AURのビルドは不要になりました。よってインストール手順を変更しました。
ちなみに半月使ってこの間結構な数のパッケージアップデートが落ちてきましたが、bootchart2で見る限り速度低下は全く無いです。1ヶ月位は全然大丈夫なのかな?アップデート内容にもよるんでしょうが。
自分はそろそろSSD環境に戻そうと思うので、実機でのe4ratのテストは終わりになりそうです。VMWare Playerでは使い続けると思いますが。

ちなみにkernel.orgは再開されたみたいですが、まだUreadaheadは入れていません。そっちはSSDに戻してからですかねぇ。
まずはe4ratのインストールです。以前はAURだったのですが、オフィシャルレポジトリに入ったので超簡単になりました。
sudo pacman -S e4rat
/boot/grub/menu.lstを開いて、init=/sbin/e4rat-collect をkernel 行に加えます。bootchart2を使っている場合には、init=/sbin/bootchartd ははずしておきます。
gksu leafpad /boot/grub/menu.lst
kernel /vmlinuz-linux root=/dev/disk/by-uuid/e90f2766-0063-4e9e-9271-2095fef807e7 resume=/dev/disk/by-uuid/d9952823-a9ce-44d8-b318-82b317b511cc ro quiet init=/sbin/e4rat-collect
しかしkernel 行が異常に長くなってますね。uuidが悪いんですが。
次にe4ratがデータを収集する時間を変えておきます。/etc/e4rat.confを開いて、timeout行のコメントアウトを外し、好きな時間に変えます。自分は1分30秒で十分だと思ったので90秒に。
通常の使い方で動くデーモン、アプリが全てディスクアクセスを終わらせる時間があれば良いです。
ちなみにext4以外のファイルシステムを使っている場合もこのファイルを編集する必要があります。自分はarchのデフォルトのままなので/boot がext2 ですが、そちらは無視です。
gksu leafpad /etc/e4rat.conf
timeout  90
変更したら保存して一旦電源断です。再起動しちゃいけません。最近のLinuxは賢いので電源断を伴わない再起動の時には通常よりもロードするものをかなり減らしています。再起動では正しい起動ログが取れません。

電源ONしたら、通常使うアプリケーション等を立ち上げます。timeout で指定した時間以上待ったら次のコマンドを実行です。run level 1に落ちるので、いきなりttyになりますよ。
sudo init 1
Contorl-Dしちゃいけません。必ずrootパスワード入れて、tty1にログインして下さい。ログインしたら、次のコマンドを実行します。
e4rat-realloc  /var/lib/e4rat/startup.log
ディスクの並び替えをしているので多少時間がかかりますが自分の場合には数十秒でした。ちょっと拍子抜けする位早かったです。終わったら、nanoで再度menu.1stを開いて先ほど追記したinit=/sbin/e4rat-collect を、init=/sbin/bootchartd に書き換えます。
これはbootchart2も一緒に使いたい場合の方法なので、bootchart2が不要な場合にはinit=/sbin/e4rat-preload に書き換えです。
bootchart2の記録をしなくなった時に注意です。
nano /boot/grub/menu.lst
次にnanoで/sbin/bootchartd を開いて145行目辺りにあるinit="/sbin/init" をinit="/sbin/e4rat-preload" に書き換えます。
nano /sbin/bootchartd
halt
で、電源ON。結果はSSDなの!?位に高速化されます。特にchromiumまで含めて高速化に入れた場合(つまり90秒以内にchromiumを起動していた場合)に、音速で起動してくるchromiumがすごいです。元々軽いEnlightenment環境のために非常に起動が早いchromiumが更に高速化しているのが体感出来る位の効果があります。
pcmanfmやlxterminalは元々一瞬で起動しますので差がわかりにくですが。
bootchartで見ると、e4rat前はenlightenmet_iの起動が始まるのが20秒、終わるのが25.5秒です。
これがe4rat後はそれぞれ18.5秒、21.5秒と劇的に早くなってます。
しかもDiskのスループットがなんと58MByte → 102MByte と完全にHDDの性能を飛び越えてしまっています。使っているのは1002HAのノーマルHDDなので102MByteなんて出るはずもないものですが。
負荷グラフでも見ても、e4rat前のグラフは収集が終わる60秒までずっと断続的に高負荷が続いていますが、同じようにchromiumを起動していてもe4rat後はすぐに負荷がなくなってしまっています。なんかいろいろスゴすぎでなんと言ったらいいかわからない位です。
というかこれだとSATA1.5なEeePC1002HAだとSSDとの差があまりないんですが。SSDでもスループット150MByteしか出てなかったよ--;

もちろんSSDの方が早いんですが、費用対効果で見るとどうなんでしょう?e4ratがない状態だとSSDの速さは圧倒的でしたが、e4rat適用後だとこれで十分なんじゃないかと思ってみたり。もちろん自分は既にSSD持っているのでSSDにしますけど。
それにディスクの並び替えをしているということはパッケージのアップデートがかかったら、その度に並べ替えをしなければ効率が落ちていくということですしね。

参考までにbootchartを載せておきます。まずはe4rat適用前。

Arch_hdd_nomal

次が適用後。こっちはスタートアップに登録したアプリが増えているので本来なら起動遅くなるんですけどねぇ。各々のチャート1番上と2番目のバーを見るだけでも効率の違いが一目で判ります。適用後は一番上のバーのピンク(I/O wait)が激減していて、I/O Waitがある場合でも2番目のバーのピンク(Disk Utilization)が最大化されている状態で、非常に効率が良いことがわかりますよね。
負荷の違いも一目でわかりますが。

Arch_hdd_e4rat

元々はDebian開発者が作ったものなので、Ubuntuなら使えるんじゃないでしょうか。HDDな人は使って見ることをおすすめです。

« Arch LinuxでもJupiterを使ってみる(11/24書き直し) | トップページ | NetworkManager とか日本語設定とか »

Arch Linux」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/28800/52988476

この記事へのトラックバック一覧です: e4ratで高速起動:

« Arch LinuxでもJupiterを使ってみる(11/24書き直し) | トップページ | NetworkManager とか日本語設定とか »