ファイルアクセスを高速化する方法を調べてみた

ファイルアクセスを高速化する方法

ライトスルー・ライトバックについて

▼ライトスルー

CPUがメインメモリにデータを書き込む際に、同時にキャッシュメモリへも同じデータを書き込むことを言う。

・キャッシュメモリとメインメモリとの整合性が取れるので制御が容易
・キャッシュによる高速化は望めない

▼ライトバック

CPUがメインメモリにデータを書き込む際に、キャッシュメモリに書き込む事をいう。
CPUの空き時間を利用して、キャッシュメモリからメインメモリに書き込む。

・キャッシュメモリとメインメモリの整合性が取れないので、制御が複雑
・当然キャッシュメモリのみの動作のためCPU処理が高速になる。

ページキャッシュの効率化

http://raymonmon.blog38.fc2.com/blog-entry-25.html
カーネル2.6系では「pdflush」デーモンがライトバックしているので、
pdflushのタイミングを変更していく事になります。

変更方法はカーネルパラメータで、以下の4種類が主なパラメータになります。

▼vm.dirty_backgroud_ratio

これは、キャッシュ上でまだディスクに書き込まれていないページ(dirtyな)が、
全物理ページに対する割合(%)を超えているとpdfluashによるライトバックが行われます。
但し、ライトバック処理は優先度の低いバックグラウンドプロセスとして動きます。
デフォルト値は10%です。

▼vm.dirty_ratio

これはvm.dirty_backgroup_ratioと全く同じ意味ですが、唯一異なるのはこの値を
超えた場合は、優先度が高いフォアグラウンドプロセスとして動くという事です。
デフォルト値は40%です。

この二つはお互い関連していて、通常 vm.dirty_backgroud_ratioは
vm.dirty_ratioの半分ぐらいの値を目安にして設定していきます。

ちなみにvm.dirty_backgroud_ratioの値を
vm.dirty_ratioより大きくするとその値は無視されます。

▼vm.dirty_expire_centisecs

これは、キャッシュ上に存在しているページの
存在時間がこの値を過ぎた場合にライトバックされます。
デフォルト値は3000です(単位は 10m/s)

▼vm.dirty_writeback_centisecs

これは、 pdflushの起動間隔を指定するパラメータです。
デフォルト値は500です(単位は10m/s)

まとめ

これらの値を適宜変更してあげれば効率化が出来ます。

環境によって違いがあるので一概には言えませんが、
vm.dirty_ratioの値を低くしてあげるのが一番効果が高いと思います。

ちなみに、ライトバックが完了しても解放可能となるだけで、
実際にページを解放するのはまた別の処理になります。

なのでライトバックと同時に「ページ回収」も早めてやる必用があります。
ページ回収処理もカーネルパラメータで調整可能です。

値はmin-free-kbytes

空きメモリーがこの値を下回った場合にページ回収処理が動くので、
この値を大きくしてあげればページの解放処理も早くなります。

但し、この値を大きくし過ぎてしまうと常にシステム上に大量の空きメモリが必要となり、
メモリーを有効に活用出来なくなってしまうので注意が必用です。

アクセス時刻の記録を省略しファイル読み込みを高速化

http://itpro.nikkeibp.co.jp/article/COLUMN/20080528/304432/
http://itpro.nikkeibp.co.jp/article/COLUMN/20080528/304432/?ST=oss&P=2
ファイルにアクセスしたときには,最終アクセス時刻が属性情報として記録される。
この情報を記録しないように設定することで,ファイルの読み込み速度を向上できる。
最終アクセス時刻の記録を止めるには,ファイル・システムのマウント時に,noatimeオプションを指定する。
ベンチマークでは,読み込み速度が2倍強に改善できた。

パフォーマンス診断

http://blogs.yahoo.co.jp/shuichi_ceres/14837213.html
●ett3のジャーナリングモード
ext3のジャーナリングモードには3種類あり「writeback」モードにすると
信頼性は下がるがパフォーマンスが高くなる。
●RAMディスクによる高速化
メモリ領域を仮想的なディスクと見なす仕組みで、高速な読み込み書き込みが実現できる。