ページキャッシュは、そこそこのサイズが良い

ファイルシステムのページキャッシュがデカいと、ダーティーキャッシュをディスクにライトバックするのに時間がかかるので、その間に謎のエラーが出まくるのだ。 …という口伝のまとめ。
4
M. Watanabe @labidochromis

キャッシュ周りのパラメーターって、2.4系までと2.6系以降のカーネルで違うのに、後者の情報ってあんまり流布していないんですよね。 QT @satodainu: ライトバックのサイズって、そんなとこに設定があったのか。

2010-08-18 11:41:02
M. Watanabe @labidochromis

vm.dirty_ratio のデフォルト値は 40 (実メモリの40%) で設定可能な最小値は 5

2010-08-18 12:10:05
M. Watanabe @labidochromis

vm.dirty_background_ratio の最小値は 10。vm.dirty_ratio より大きい値に設定されたときは vm.dirty_ratio/2 として扱われるんだったかな?

2010-08-18 12:11:46
M. Watanabe @labidochromis

あー、いや、デフォルト値はカーネルバージョンによって違うかも。

2010-08-18 12:12:16
M. Watanabe @labidochromis

実メモリの量が64GB はともかくとして、2GB でもデフォルト設定でフォアグラウンドライトバックが働き始めるときにはダーティーキャッシュが 800MB 溜まっている。ディスクの書き込み速度が 50MB/s だとするとライトバックに 16 秒かかる。

2010-08-18 12:19:39
M. Watanabe @labidochromis

フォアグラウンドライトバック中にはかなりのふんづまり状態になる。ディスクアクセスランプが点きっぱなしで応答しなくなって「暴走?」とかあせっちゃったりするのだ。

2010-08-18 12:21:32
M. Watanabe @labidochromis

Linux のリアルタイム性云々は、制御や組み込みだけではなく普通の使い方でも気をつけなければいけないのだ。

2010-08-18 12:24:55
M. Watanabe @labidochromis

「grep uaaa abc > hoge; sort hoge」なんてやると、尻切れトンボの(あるいはまだ存在しない)ファイルをソートしているかもしれない。

2010-08-18 12:30:20
M. Watanabe @labidochromis

「grep uaaa abc > hoge; sync; sleep 1; sort hoge」だと、まぁたいてい大丈夫。

2010-08-18 12:32:57
こなみひでお @konamih

@labidochromis わたなべさんのマシンってどういうんだろう?というか,どういうファイルを扱ってるんだ? abc は何行あるんですかね?

2010-08-18 12:38:08
M. Watanabe @labidochromis

2回 sync したほうが安心なのだが。

2010-08-18 12:41:17
こなみひでお @konamih

@labidochromis grep と sort を続けてやってくれるプログラムを書いた方がいいんじゃない?

2010-08-18 12:43:48
M. Watanabe @labidochromis

@konamih abc は1文字でも(それどころか0文字でも)、それ以前にメモリがダーティーキャッシュに埋められていればこの現象はおきます。キャッシュを開放するまで新規ファイルを作れないから。

2010-08-18 12:46:24
M. Watanabe @labidochromis

@konamih grep uaaa abc | sort なら問題ないんだだけれど、途中経過をファイルに保存しておきたい事もあるでしょ?他のプログラムが生成したファイルをプログラムに読ませたいことはあるでしょ?

2010-08-18 12:48:08
M. Watanabe @labidochromis

メモリが 2GB のLinux マシンでデフォルト設定なら、touch したあと ls するまで 16 秒くらい待たなければ駄目なことがあるのだ。

2010-08-18 12:49:04
M. Watanabe @labidochromis

小波さんのマシンでも「touch abc; ls abc」を何万回かやれば「No such file or directory」が出るんじゃないかな。

2010-08-18 12:53:29
こなみひでお @konamih

学生名簿を相手に同じことをやってみたが,瞬時に実行してくれるぞ.

2010-08-18 12:53:49
こなみひでお @konamih

何万回もやったことはない (^^;;;

2010-08-18 12:54:26
M. Watanabe @labidochromis

あぁ、ライトバックされるまで新規ファイルが生成しないのは実メモリが「ダーティーキャッシュ+プロセスが使用しているメモリ」でほぼ一杯一杯な時です。

2010-08-18 12:55:30
M. Watanabe @labidochromis

「ダーティーキャッシュ+クリーンキャッシュ+プロセス」のような状態ならクリーンなキャッシュが即座に開放されてそれを使って新規ファイルが生成される。

2010-08-18 12:56:46
M. Watanabe @labidochromis

この場合、ライトバックが始まると凍りついたように重いことはかわらないけれど、ファイルはすぐに生成される。

2010-08-18 12:58:17
こなみひでお @konamih

4Hz ♪=120 で16分音符の連続 で30秒ほど連続して grep hoge > hoge2 ;sort hoge2 > hoge3 ;cat hoge3 とやってみたが疲れただけだ (おい)

2010-08-18 12:59:30
こなみひでお @konamih

カーソルキーとリターンキーが隣り合っていればもっと速くトリルできるのにぃ

2010-08-18 13:00:21
M. Watanabe @labidochromis

デフォルト設定のLinuxで諸プロセスが実メモリを60%以上使っているとダーティなページキャッシュが溜まってきたところで新規ファイル(サイズがゼロでも)の生成に数秒~数分を要する事態に陥る。

2010-08-18 13:00:51
M. Watanabe @labidochromis

私のメインなマシンはメモリ 8GB で、vm.dirty_ratio = 6, vm.dirty_background_ratio = 3 にしている。

2010-08-18 13:02:55