NFSサーバとしてのzfs

これまで気付かなかった、遅い ということを。

FreeBSDでzfsパーティションの/homeを持ち、NetBSDデスクトップマシンから 使っていた。最近NetBSD機の主記憶を32GBから64GBにしたところ、 NFS先のホームディレクトリへの書き込みがもの凄く遅くなった。 たった100MBに1分近くかかる。なんじゃこりゃ!?

最初はNetBSDのNFSクライアントとしての問題だと思って 2週間近くそっちばかり試行錯誤していたが、分かってみれば FreeBSDのZFSの挙動の問題で、「NFSからの書き込みはいちいちsyncするから」、 というのが原因だった。NFSだけ切るというわけには行かないので、

のいずれかになる。比べてみた結果がこれ。

sync=standard4.8MB/s
sync=disabled45.5MB/s
ZIL on SSD31.5MB/s

これは dd if=/dev/zero bs=1m count=100 で、100MBのゼロファイルを書き込んだときのもの。

sync=disabled にすると恐い、という記述を見掛ける。確かにそうなのだが、 SSDを追加するということは、故障の可能性のある部品を増やすことになり、 システム全体としての故障率が上がる。また、ZIL用パーティション作って 強制的にシステムを停止して、ZILが全部壊れたことをシミュレートして 起動してみたが、もはや、zpoolのimportすらできない。 つまり、ZIL用SSDがふっ飛んだら、まずそのzpoolは全滅になる。 かたや、sync=disabledの場合はsyncもれのファイルだけが壊れるので、 全てを失うことはない。