ZFS の性能劣化2009年05月09日 22時18分51秒

ZFS は古いファイルシステムに無かった物を新しく作ったファイルシステムだ。しかし、古いファイルシステムから学ばずに醜い性能劣化をみせることもある。

UFS を始め FFS を基としたファイルシステムには、性能の劣化を防ぐ為にある程度の余裕が取られている。FreeBSD の UFS ではディスクの全てを使わずに、8% 分が予約領域として確保されている。その予約部分は root しか書き込めない。実体験としては 5% ぐらいまでなら問題は無く、3% ぐらいまで減らしてもファイルシステムとしては使える。

しかし、ZFS にはこの様な予備分は確保されていない。そのため、利用率が 95% を過ぎる頃からパフォーマンスが落ち始める。97% を越えた辺りからファイル操作が劇的に遅くなり、既にこの時点で普通の十倍以上の時間が掛かるようになっている。99% を過ぎる時には非常に醜い事態になる。この辺りになると、ファイルシステムはほとんど利用できない状態になる。

利用率が 95% を過ぎた頃から、普段よりシステムが二、三倍ぐらい遅くなっているのに気がついたが何故だかはすぐに分からなかった。そのうちに、一瞬で終わるような作業に何分も掛かっている事に気がついた。その時になってやっと気がついた。df で調べてみると ZFS の領域が 99% を越えていた。ここまで、埋めてしまうとかなり致命的になる。

この時点で、ZFS は実質的に使えなくなっていた。ls も一回毎に数分掛かる。取り敢えず、ディスクを空けるために数個のファイルを消したが数時間程掛かった。このファイルシステムには細かいファイルが大量にあるだけなので、削除を続けても数日では終わらないぐらいの時間が必要になりそうだった。

さて、今回運がよかったのはスナップショットを取っていたこと。スナップショットを削除すれば、数百 MB 単位の領域を一気に開放できる。スナップショットを消すのに待つこと数十分、最終的にはファイルシステムの性能は元に戻った。一時は数万に及ぶファイルを諦めて、ファイルシステムを破壊しようかと考えたくらい悲惨な状況だった。運良くスナップショットを取っていなかったら、他に選択しは無かったと思う。