アプリの起動、ブートの起動を高速化するというprefetchなるものを発見。ちょっとカーネルをリコンパイルする元気がないのでメモだけ。今年のGoogle Summer of Codeのプロジェクトの成果のようです。
Introのページによると、"今日のコンピュータのメインのボトルネックはCPUではなく、CPUに比べ非常に遅いディスクとメモリへのアクセスである。このような状況において、アプリケーションのパフォーマンスを向上させる方法はデータが必要とされる前に読み込むことであり、それがプリフェッチ技術の重要な点である。"
このprefetchで行うのは
- カーネルに手を加え軽いサブシステムでアプリケーションの起動中に必要とされたファイルをトレースし、記録する。
- 次はそれをdaemonで再現する
- ディスクのシークを減らすためにext3上でのファイルレイアウトを変更するツール
といった感じのことを行うようです。上の2つをブート時、アプリ起動時に行うのは既に使いものになるとのこと。ファイルレイアウト変更は全く実験的でうんぬんとあります。プロジェクトによると実装的にはブートに使うディスクがマウントされている状況でやるのが難しいとのこと。
アクセスされたファイルのトレースはカーネル内部でのページフォルトをトレースするとのこと。なかかなややこしそうです。
結果としてはブートが10%〜20%高速化、OpenOfficeの起動もざっと10%位でしょうか。体感的に感じるかどうか微妙な線ですが、成果は出ていますね。
思うに効果の判定やチューニングが難しそうなのはext3のファイルレイアウト変更ですね。 いかにシーク動作を抑えて連続アクセスにするかがハードディスクの性能を引き出すポイントとなりますが、Linuxはもともとなるべく連続的なセクタにファイルを配置しようとするようになっている上、ブート時の様に並列にアプリケーションが立ち上がっていく状況ではシーケンシャルアクセスが崩れてしまい性能が低下しがちですしね。
試してみたい方は以下のリンクにインストール方法が書いてあります。Ubuntu Gusty向けバイナリもあります。
こういう積み重ねが性能を向上させていく訳で、ReadyBoostの様にプリフェッチすべき結果の一部をFlashに記録しておくことで、ディスクのシーク動作に足を引っ張られる部分を改善出来るかもしれませんね。
おまけ:prefetchのハードな内容と対照的な、タイトルと内容がなんだそれな記事。
要するにusbメモリをswapに使ったら速くなるよ、という話です。やりかたは以下の通り。
- df -h で自動mountされたUSBメモリのデバイスを確認
- sudo umount /dev/<usbdisk>
- sudo mkswap /dev/<usbdisk>
- sudo swapon -p 32767 /dev/<usbdisk>
特にノートPCでメモリの少ないPCを使っている方はやってみる価値があるかもしれませんね。なるべく速いUSBメモリを使えればスワップ発生時の性能が少しましになるかもです。