FreeBSD メモリディスク

misima 旧仮名遣い・旧字変換サービスは大量の辞書を読み込む。高速化のためには出来る限りファイル入出力のオーバヘッドを減らしたい。そこでサイト運用において FreeBSD のメモリディスクに辞書などの misima リソースを格納して,インコアで処理できるようにしている。FreeBSD メモリディスクとはメモリに割り当てられたファイルシステム機能であり,昔の所謂 RAMDISK というのか,HDD に比べて高速なメモリにファイルを割り当てるものである。以下,そのオペレーションのメモ。

misima の辞書等のリソースは一式 /usr/local/etc/misima ディレクトリ下に格納している。だいたい 5MB 程度である。この容量をもつファイルイメージでメモリファイルシステムを生成しマウントする。

# [1] mkdir -p /usr/local/etc/misima
# [2] cd /tmp
# [3] dd if=/dev/zero of=newimage bs=1k count=5k
# [4] mdmfs -F newimage -s 5m md0 /usr/local/etc/misima
# [5] cd ~/src/misima/etc/
# [6] tar cf - . | ( cd /usr/local/etc/misima; tar xvf -)

[3] でまっさらな 5MB のファイル newimage を作成し(名前は任意。dd コマンドでゼロを 5MB = 1,024 x 5,120 バイト分書き込んでいるだけである),[4] でこれをメモリディスクデバイス md0 として /usr/local/etc/misima にマウントしている。もちろんこの時点で中味はまだ何もないので,[5][6] のように,開発ソースディレクトリから辞書などをコピーして準備完了となる。mdmfs コマンドの日本語マニュアルはここを参照。

mount, df コマンドで確認すると,以下のような表示がされるはずである。

# mount
......
/dev/md0 on /usr/local/etc/misima (ufs, local, soft-updates)
# df -k
Filesystem  1024-blocks     Used     Avail Capacity  Mounted on
......
/dev/md0           4718     3608       734    83%    /usr/local/etc/misima

メモリ上のファイルシステムなので,当然ながらリブートすると跡形もなく消え去ってしまう。misima サービス起動時に上記オペレーションを自動的に実行するようなシェルスクリプトを書いて,運用するとよい。5MB くらいならキャッシュに入ってるって? ま,そうなんだけどね。