mdconfig2006年09月17日 11時46分59秒

mdconfig で使える種類は man に以下のように載っている。

     -t type
             Select the type of the memory disk.

             malloc   Storage for this type of memory disk is allocated with
                      malloc(9).  This limits the size to the malloc bucket
                      limit in the kernel.  If the -o reserve option is not
                      set, creating and filling a large malloc-backed memory
                      disk is a very easy way to panic a system.

             vnode    A file specified with -f file becomes the backingstore
                      for this memory disk.

             swap     Swap space is used to back this memory disk.

file 型は言うまでもなく、ファイルに関連させるものだ。CD 等のイメージ等に対して使うのに用いられている。mdconfig の最も一般的な使い方だろう。

malloc と swap 型の違いを理解するのに少々時間がかかった。malloc をした時に物理メモリが足りなくなると、swap スペースを使いメモリを割り当てる。man 9 malloc を見ても、スワップに関する言及は無い。

mdconfig の malloc 型は物理メモリを割り当てて、そこにファイルシステムを作る。そのため、壁は物理メモリになる。物理メモリが足りなくなると、容易にパニックを起こす。また、物理メモリ以上の物が作れないのは以上の理由から明白だろう。

それに引き替え swap 型は、物理メモリが足りなくなると、スワップ領域にページアウトをする。言わば、普通のプログラムの malloc(3) の要領だ。そのため、スワップ領域さえあれば、いくらでも大きくできる。

しかし、それだからとて、とてつもなく巨大なファイルシステムは、事実上作れない。経験上、せめて物理メモリの二倍程度である。大きすぎると、スラッシングが起こるためだ。この状態に陥ると、file 型を使うのより遅くなってしまう。折角、高速化を期待して使っているのに、実は遅くなってしまったといった状況に陥ることもある。

私が使っている機械の物理メモリは比較的少ないので、malloc 型を使ってよかったことはほとんどない。それよりも、swap 型を物理メモリの二倍程度で割り当てておいた方が、融通が効く。利用量が、当初予定していたよりも大きくなってしまっても、少なくても退避する場所があるからだ。少しのページインとページアウトが繰り返される位なら問題ないが、スラッシングが始まると手の付けようがなくなる。

メモリの利用状況にも依るが、malloc 型も swap 型も物理メモリの半分ぐらいまでの利用が一番効率が良さそうだ。その間はとてつもなく高速に動作する。それ以上になると、パニックなり、ページアウトなりが始まる。そうなると、最初から物理メディアに書き込んでおいた方が、最終的には速い。