FreeBSD スワップ領域の拡張

MT の再構築時のサーバエラー("Premature end of script headers...")対策としては本来,メモリを増設するのが望ましい。しかし,オンボロ ThinkPad サーバに投資をするには懐が寂しすぎる。MT のEntriesPerRebuild 設定値を変えたりしてみても限界があるようである。

実記憶装置の増設はさしあたりペンディングとしても,仮想記憶を増やしておくのも手だてとしてあるわけで,FreeBSD Handbook に従ってスワップ領域を追加してみた。仮想記憶の容量は実記憶容量とのバランスを考えて設定しないと,ページングが頻発してパフォーマンスが低下する,いわゆるスラッシングを招く場合がある。そのあたりのリスクを受け容れるべきである。

FreeBSD 5.4 での拡張方法を整理しておく。ただし,この方法はバージョンに依存するので,4.X 系を使っている方は使えないことに注意。

まず追加するスワップ領域をディスク上に作成する。/usr/swap0 として 256MB の容量とした。容量を変えたい場合は dd コマンド引数 count 回数値を MB 換算値に指定すればよい。次にファイルのパーミションを設定し,最後に mdconfigswapon コマンドを発行すれば有効になった。

# dd if=/dev/zero of=/usr/swap0 bs=1024k count=256
# chmod 0600 /usr/swap0
# mdconfig -a -t vnode -f /usr/swap0 -n 0 && swapon /dev/md0

pstat コマンドで確認する。/dev/md0 が機能していることがわかる。

# pstat -s
Device          1K-blocks     Used    Avail Capacity
/dev/ad0s1b        393216   218864   174352    56%
/dev/md0           262144    38916   223228    15%
Total              655360   257780   397580    39%

リブートは不要である。しかし,システムを停止するとこの swapon 操作は無に帰するので,次回リブートしたときも活きるよう,/etc/rc.conf に以下の行を追加しておく。

swapfile="/usr/swap0"

カーネルコンフィグレーションファイルにおいて md 疑似デバイスが有効になっている必要がある。これは標準の GENERIC カーネルにも組込まれているので,あまり気にせずともよさそうである。カスタマイズしている方は,「device md」の行があるか確認し,なければ追加してカーネル再構築を行う。

MT の EntriesPerPrebuild 値をデフォルトの 40 に戻して,再構築してみたが問題なさそうである。