最新更新日 '99.05.27.


Soft Updates って何ぃ?
 FreeBSD の 3 系列から新しく出来た、ファイルシステムです(この言葉は正しくないかも)。
 FreeBSD の標準で利用出来る UFS(正確には FFS、Berkeley Fast File System) は実はあんまり速く無いんですね。書き込み要求と実際の HDD への書き込みは同期して行われます(正確に書くと、META データの書き込みと、実データの書き込みがほぼ同時に行われる。と言う事です。)。sync 型ですね。

 それに比べ Linux の EXT2 ファイルはむちゃくちゃ速い気がします。書き込み要求と実際の書き込みが非同期で行われているのです(こちらは META データの書き込みと、実データの書き込みが非同期で行われる。と言う事です。)。async 型といいます。

 あ、FreeBSD にも acyns な書き込みのファイルシステムは存在していますが、いかんせんマシンがぶっ飛んだ時、被害は甚大です。きっと、fsck で沢山のファイルが消えてしまうでしょう。FreeBSD は速さより安全性を重視した作りになっている。と、言えます。

 ちなみに以下は私が利用している 2.2.8-RELEASE のマシンですが、HDD へのアクセスが遅いので async を利用しています。以下は、/etc/fstab ですが、Options の項目を、rw と書いてある部分を rw,async と書き直すだけで async なファイルシステムになります。

--- /etc/fstab 
# Device                Mountpoint      FStype  Options         Dump    Pass#
/dev/sd1s1b             none            swap    sw              0       0
/dev/sd0s1a             /               ufs     rw,async        1       1
/dev/sd1s1e             /home           ufs     rw,async        2       2
/dev/sd1s1f             /usr            ufs     rw,async        2       2
/dev/sd0s1e             /var            ufs     rw,async        2       2
/dev/cd0c               /cdrom          cd9660  ro,noauto       0       0
proc                    /proc           procfs  rw              0       0
----------------
 話を元に戻して、例えば、プログラムをコンパイルする時、FreeBSD の UFS は一個のソースをオブジェクトにする毎にディスクをコロコロ言わせるのに対して、EXT2 は大体、3 個オプシェクトにする毎に一回位コロコロ言う。async なファイルシステムとは、まぁそんな感じです。

 私のマシンでの例を言うと、一台の PC 上でマルチブートした FreeBSD 3.1-RELEASE と、VineLinux1.0 で同じプログラムを make したら、なんと・・。FreeBSD が 140 秒台の時間が掛かったのに対し、VineLinux の方は 70 秒台で終りました。ちょっと悲しかったので Soft Updates の設定にして FreeBSD でもう一回 make したら今度は 90 秒台にまでなりました。ふぅぅ。ただし、FreeBSD の rm コマンドの処理は異様に速いです;-)。

 と、言う事で、ファイルシステムを見直して速くしましょう。標準では利用する事が出来ないのでカーネルに手を加えて作り直す必要があります。

 まず初めにカーネルの config ファイルに以下の一行を追加します。

----------------
options		SOFTUPDATES
----------------
 続いてソースを用意します。Soft Updates は標準では設定して無いので利用する為にはソースをあるディレクトリから持って来る事にします。/usr/src/contlib ばずいぶんとでかいディレクトリなので NotePC 等は /usr/src/contlib/sys だけ用意した方が得策かもしりません。
----------------
# cd /usr/src/sys/ufs/ffs
# ln -s ../../../contlib/sys/softupdates/*.[ch] .
----------------
 /usr/src/sys/ufs/ffs の中に README.softupdates が有るので目を通して見てください。これでカーネルを作り変えて make install してマシンを reboot して新カーネルでブートします。その時、シングルユーザモードで起動します。BootEasy で F2 を押した後にすかさず /kernel -s と押すと安心です;-)。

 その後は、トングルユーザモードに落ちるので sh を指定した後で以下のコマンドを打ちます。

----------------
tunefs -n enable /dev/rda0s1a
tunefs -n enable /dev/rda0s1e
tunefs -n enable /dev/rda0s1f
tunefs -n enable /dev/rda0s1g
----------------
 パーティションの数だけ打ちましょう。デバイスの指定は raw device を指定する所が味噌です。/dev/da0s1e と指定しても動きますが、"/" パーティションだけはマウント出来ないです。やはり raw device で指定した方が良いでしょう。  これでリブートしたら OK です。え?デバイス名が解らない?ありゃりゃ・・。そー言う時は cat /etc/fstab して確認してください。ちゃんと解ると思います。

 さて、これでリブートして今度はマルチユーザモードで起動すると、HDD の認識と、パーティションの認識時に ffs_mountfs: なんちゃら。等と、表示されます。ふふふ。その後、login 後に mount コマンドを叩いて見ると、soft-updates と言う文字が見えると思います。これでおしまいです。以下は私のマシンの mount の結果です。NFS とか、amd とか余計なのがありますが愛敬、と、言う事で(^^;;。

----------------
% mount
/dev/da0s2a on / (NFS exported, local, writes: sync 33 async 173)
/dev/da0s1 on /dos (local, read-only)
/dev/da0s2e on /home (local, soft-updates, writes: sync 22 async 211)
/dev/da0s2g on /usr (NFS exported, local, soft-updates, writes: sync 2 async 439)
/dev/da0s2f on /var (local, soft-updates, writes: sync 149 async 1125)
procfs on /proc (local)
pid143@pochi:/amd on /amd
/dev/da2 on /amda/mo (local, read-only)
----------------
 ファイルシステムの速さを体感してください;-)。

 私が一番悩んだのは実は ThinkPad 535E にインストールした PAO3 なんです。PAO2 の場合は、Soft Updates は使えないけど、SCSI の PCMCIA が使える。PAO3 の場合は、Soft Updates が使えて速い File System だけど、SCSI の PCMCIA が使えない・・。しくしく。結構辛いです。どっちを選ぶか・・。

 けど、3 系列の FreeBSD を入れたらきっと Soft Updates は手放せないでしょう;-)。


Copyright (c) 1997-2004 takachan@running-dog.net All Rights Reserved.