ext3fs のパフォーマンスについての覚え書き
つまり、data=writeback によるジャーナリングはシステムが停電や電源プチッって場合にはタイムスリップしてしまう可能性が大いにあるというわけです。
...
data=journal
メインファイルシステムより前に、全てのデータがジャーナルに記録される。
data=ordered
デフォルト。メタデータがジャーナルに記録される前に、全てのデータがメインファイルシステムに直接書き出される。
data=writeback
Linux チューニング - Ext3 のパフォーマンスを最大化させる - drk7jp
データの順番は保存されない。メタデータがジャーナルに記録された後で、データがメインファイルシステムに書き込まれる。これはスループットを高くするオプションらしい。このオプションは内部ファイルシステムの完全性を保証する。しかし、クラッシュした後のジャーナルによる回復で、ファイルが昔のデータになることも許されている。
これに関しての知識不足過ぎて、正直この説明はさっぱり分からないw
明日調べてみよう。
追記:
後述のアドバンスト・ファイルシステム・インプリメンター・ガイドを一通り読んで、やっと理解できた。さすがに基礎知識無しに上記の説明で理解できる人はおるまい・・・。
EXT3にはデフォルトのorderedモードの他に、堅牢性重視のjournalモードと、高速性重視のwritebackモードがあります。このうちで、writebackモードを使うのです。また、readが発生する度にファイルの最終アクセス時刻のメタデータが更新されるのを防ぐために、noatimeオプションもつけます。fstabの設定は以下のようになります。
LABEL=/hoge /hoge ext3 rw,noatime,data=writeback 1 2
これらをやるだけでTCおよびTTのパフォーマンスは3倍くらいになり、晴れて実運用の要件を満たすことができました。
mixi engineer blog
noatime はすぐにでも使えそうだな。こんなの最初からOFFにしてそうだけど。。。
ファイルの作成についてはdir_indexが無い場合ファイル数が増えるにつれて指数的にアクセスが遅くなっているのがわかります。
dir_indexがある場合は、ファイル数が増えても時間は比例的に増えます。
ファイルのアクセスについても同じような結果になっています。
これを見る限り dir_indexは非常に有効そうです。
ちなみに、bonnie++ というソフトウェアでも同じようなテストができるようです。
http://labs.unoh.net/2007/07/ext3_dir_index.html
結果に影響ができないようにテストの度に以下のコマンドで ページ,dentry,i-nodeキャッシュを解放します。
sudo sysctl -w vm.drop_caches=3; sudo sysctl -w vm.drop_caches=0;
http://labs.unoh.net/2007/07/ext3_dir_index.html
umount, mount の方が確実では?という意見もあり。実際ためしてみた。
$ cat meminfo MemTotal: 2071388 kB MemFree: 59456 kB Buffers: 632072 kB Cached: 1002812 kB ... $ sudo sysctl -w vm.drop_caches=3; sudo sysctl -w vm.drop_caches=0; vm.drop_caches = 3 vm.drop_caches = 0 $ cat meminfo MemTotal: 2071388 kB MemFree: 1642772 kB Buffers: 6612 kB ←開放されている Cached: 86628 kB ...
うちのPCも見てみたら、dir_index が有効になっていた。
$ sudo tune2fs -l /dev/sda1
IBM Developer 日本語版 : 大変申し訳ありません。このページは無効です。
ext3fs について詳しく書いてある気がする(まだ全部読めてない・・・)
実際のところ、ReiserFSの小さなファイルのパフォーマンスはどの程度でしょうか。驚くほど良好です。実際、サイズが1kより小さいファイルを扱う場合、ReiserFSはext2より約8倍から15倍も高速です。さらにいいことに、このパフォーマンスの改善で、他のファイル・タイプのパフォーマンスが犠牲になることはありません。
IBM Developer 日本語版 : 大変申し訳ありません。このページは無効です。
細切れファイルキャッシュの置いてあるストレージだけ ReiserFS にしてマウントしてやればいいのか・・・とか考えてると楽しそうな気がした。