Linuxに限らずデスクトップで使用するOSの体感速度の多くはディスクアクセスの時間によって決まることが多くあります。このpreloadはよく使うファイルを動的に先にメモリに読み込んでおいて高速化してくれるものです。Windows VistaにもSuperFetchという同様な機能がありますね。果たして効果があるのかどうかUbuntuで試してみました。
インストール方法
Ubuntuでは既にリポジトリに含まれているので普通にaptで入れることが出来ます。
sudo apt-get install preload
設定
基本的にそのままの設定で普通に動作してくれますが、より細かい設定を/etc/preload.confで調整することが出来ます。詳細はファイルを読んで下さい。いじりそうなパラメータを抜粋すると以下のような感じです。
- デーモンの動作周期
cycle = 20 [秒] - プリロードする最小のプロセスサイズ。
小さくしすぎると多くのプロセスをプリフェッチしすぎるため遅くなる。大きくしすぎると意味がないとのこと。
minsize = 2000000 - メモリ関係
プリフェッチに使うメモリ総量は
max (0, TOTAL * memtotal + FREE * memfree) + CHACHED * memcached
で計算されます。TOTAL/FREE/CACHEDは/proc/meminfoから。
memtotal = -10 [%]
memfree = 100 [%]
memcached = 30 [%]
- 情報の自動セーブ間隔 (/var/lib/preload/preload.state)
autosave =3600 [秒]
- その他
スキャンを止めたり、プリロードするファイルパターンの指定など
動作状況のモニタ
- 20秒おきに/var/log/preload.logに動作状態がログされます。
- 1時間おき、またはシャットダウン時に/var/lib/preload/preload.stateにキャッシュされたファイルや統計情報等が保存されます。
動作
preloadをインストールするとデーモンが常駐します。このデーモンは定期的にファイルの読み込みをチェックし、プリフェッチ、トレーニングを繰り返します。これによってどのファイルがよく利用されるかをチェックし、readaheadシステムコールで先読みしてくれます。このあたりの詳細はpreload.pdfを参照。チラ読みしたところマルコフ過程を使った予測アルゴリズムを使っているとのことです。
感想その他
ログイン画面が待ちきれないほど急ぎの時には余り役には立たないかもしれませんし、インストール直後は全く効果がありません。が、Webブラウズなどでちょこっと使った後システムを再起動して普通にログインしてみると次回のfirefox起動等が高速になっていることがわかると思います。
Ubuntu等で使われているスタティックなファイルのリストを先読みしてくれるreadaheadと比べ、このpreloadはほとんど設定なしで動的に先読みを管理してくれるのが利点です。その分デーモンが実行されるので、少し負荷を食うかもしれません。
以前このコマンドのことをどこかで読んだときはアヤシゲで放置したのですが、今回試してみると確かに効果を感じました。まだ試していませんが、遅めのディスクではより効果があるのではないかと思います。逆に高速なディスク、例えばRAID0やSSDなんかを使用している方には恩恵は少ないと予想されます。
以前にもっとローレベルで単純な先読み機能を実装したことがあるのですが、その際には先読みをするセクタ群をソートすることで劇的な効果が得られました。このpreloadのpdfでは優先順位でソートとあるのですが、ディスク上の位置が考慮されていれば面白い(というかその辺はOSまかせな感じか)。
diggでの議論を 読むと、ユーザにもよると思うのですが、結構効果があるようで、その割りにさほどメモリを消費しないようです。 私のシステムでも劇的にキャッシュでメモリが食われているようではなさそう。使ってみて良ければラッキーでいいかもしれません。
コメント (1)
このサイトを発見して早速wubi
にpreloadをいれてみました。
確かに速くなりました。自分の
環境では2倍くらいの体感速度
に思えました。これを使えばwubi
でDTMも夢ではないかもしれませんね。貴重な技術提供をありがとうございました。
投稿者: hiro | 2009年07月18日 11:39
日時: 2009年07月18日 11:39