FreeBSD で ZFS を使う為の調整2009年03月17日 01時22分33秒

ZFS は本当にメモリ喰いだ。FreeBSD でも最低 1GB のメモリを推奨している。FreeBSD では、カーネルへのメモリの割当が多くはなっていないので、ZFS を使うには調整をしてやる必要がある。

カーネルに 1GB ものメモリを割り当てるので基本的には amd64 などの 64bit 環境が推奨だ。しかし、i386 などの 32bit 環境でもメモリの割当てを増やすと安定して動いている。ZFS Tuning Guie が、沢山の人の試行錯誤から作られた。これは FreeBSD 7 系を基に作られたもので、8 系にもそのまま当てはまるものも多いが、KVA の限界など改善されたものもある。

調整のやり方は大きく分けて二通りになる。カーネルにメモリを大きく割り当てる方法と ZFS のキャッシュを少なくする方法になる。

カーネルに大きくメモリを割り当てる


vm.kmem_size="1536M"
vm.kmem_size_max="1536M"

を /boot/loader.conf に設定する。i386 の初期設定ではカーネルに 1.5GB のメモリを割り当てることが出来ないので options KVA_PAGES=512 をカーネルの設定に加えて再構築する必要がある。amd64 ではカーネルの再構築は必要ない。

ZFS のキャッシュを制限する


vm.kmem_size="512M"
vm.kmem_size_max="512M"
vfs.zfs.arc_max="100M"

ZFS の使うメモリの量を抑えることで、カーネルへの割り当て量を抑制している。

756MB のメモリで安定して運用することの出来た設定として以下のものを上げている。


vm.kmem_size="330M"
vm.kmem_size_max="330M"
vfs.zfs.arc_max="40M"
vfs.zfs.vdev.cache.size="5M"

これでも安定して運用できないのなら以下の設定を試してもよいかも知れない。ただし、ZFS Intent Log(ZIL) を無効にするのは非推奨だ。データの整合性を犠牲にしてまで性能を出したい時に使うそうだ。恐らく動画などの処理などだろう。


vfs.zfs.zil_disable="1"
vfs.zfs.prefetch_disable="1"

を /boot/loader.conf に追加すると無効に出来る。