Linuxの説明でswapを同じプライオリティで設定するとraid0のように並列的に扱うということになっているが、なかなかお目にかかることはできない。
下の例は8GBのメモリに約5GBのスワップ領域を並列で4つ用意しているマシンでちょっと大きめの計算をさせている時の状況だ。
$ cat /proc/swaps
Filename Type Size Used Priority
/dev/sda2 partition 4986876 1221212 0
/dev/sdb2 partition 4986876 1220976 0
/dev/sdc2 partition 4986876 1220412 0
/dev/sdd2 partition 4986876 1220636 0
$ free
total used free shared buffers cached
Mem: 8178428 6912740 1265688 0 18700 192896
-/+ buffers/cache: 6701144 1477284
Swap: 19947504 4881608 15065896
$ cat /proc/sys/vm/swappiness
60
Linuxのカーネルはページ単位でスワップファイルとのデータをやりとりする。本当はスワップイン、スワップアウトという表現は正しくはなく、ページイン・ページアウトである。使わなくなった記憶領域は貴重な実メモリから掃き出すことによって全体のパフォーマンスを最適化するのだが、この掃き出し易さをパラメータswappinessでコントロールすることが出来る。0から100までの値が取れ、0はスワップしない、100は最もスワップし易くなる。デフォルトは60である。
もうこの計算だけしているので、あまり状況は変化しないはずだけど100にしてみた。人がわかるような変化はなかった。このプログラム、むかしながらのプログラム構造なのでCPUコアが4つあるマシンだけど、1つしか使えていない。どんなプログラムかを説明するのはあれなのでpsで関係する所だけ示す。ちなみに最終的にこんプログラムで使うメモリ量は、予備計算のデータから算出するに、12GBである。が、時間的には4時間で終わる予定だったんだけどなぁ。ここまで来たら後へは引けないよなぁ…
$ ps -p 9499 -o rss,size,time
RSS SIZE TIME
5956276 10202748 10:35:52
[wp_ad_camp_1]