FreeBSD 10.1 の ZFS が若干不安定2014年12月18日 10時46分34秒

i386 で ZFS を使っているのだが、10.1 RELEASE になって、プールを二つ使っている時に、何度かメモリが割り当てられなくなって、デッドロックに突入するケースが何回かあった。10.0 RELEASE までは、経験したことは無い。ただ、i386 で 2GB のメモリで使っているので、そんなにメモリに余裕は無いのも事実。

具体的には zfs 上で動いているプロセスが、ディスクアクセスを行わず反応しなくなる。そこで、Ctrl-T を叩くと、FreeBSD ではプロセスの状態を報告するプロセスが多数ある。そこからカーネルメモリを取得しようと待ち続けているのが分かる。残念ながら関数の名前は忘れてしまった。一時は vfork も失敗する状態にもなった。

それ以降はプールは一つのみに控えるようにして様子を見ている。今のところ、メモリの枯渇に再見していない。

コメント

_ Junchoon ― 2014年12月23日 19時46分16秒

症状からすると起動を乗り切っている時点で外している可能性が高そうではありますが、
[1]の3. Open Issuesの2件目とは関係ありませんか? MLでは[2]のスレッドで
やり取りされています。

[1] https://www.freebsd.org/releases/10.1R/errata.html
[2] https://lists.freebsd.org/pipermail/freebsd-stable/2014-October/080417.html


i386でのZFS運用は経験ありませんが、個人的な体感ではamd64・メモリ4GBでも結構
厳しかったので、2GBでZFSというのはかなり厳しいのではないかと。

また、ZFSはUFSと比べてメモリ逼迫時のキャッシュ解放が遅いようですので、最近のstable/10
ではかなり改善されているものの、メモリ需要の急増時にスラッシングを起こすことがあります。
もしかしたら、ですが、swapをZFS領域に(特にファイルで)確保してある場合、スワップできずに
デッドロックしてしまう、もしくはキャッシュが解放される毎に少しずつ処理が進む形に陥ってしまう
状況に陥っているかもしれません。

このキャッシュ解放問題であれば、以前なら[3]のKarl Denninger氏のパッチが即効性もあり
お勧めしていたところですが、ある時期のheadとstable/10から他の更新と衝突して当たらなく
なっていますので...。 

[3] https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=187594

なお、Karl Denninger氏のパッチでの修正方法は私を含め数名の「works for me」
レポートが挙がっているものの、Steven Hartland氏以外の開発者の賛同を得られて
おらず、それを受けてのSteven Hartland氏の対案の一部がhead及びstable/10に
取り込まれるに留まっており、私の環境では「ほぼ」改善されているのですが、Karl Denninger氏
の環境では不完全(オリジナルの修正が必要)な状況のようです。
ご参考まで。

_ uyota ― 2014年12月24日 19時40分49秒

詳細な報告をありがとう御座います。

[1] と [2] の件ではなさそうです。ZFS は利用時にだけ繋ぐので、boot には関連せず、KSTACK_PAGES も設定したカーネルを使っています。

[3] は長いですね。current と stable/10 には既に変更が入ったけど、10.1 RELEASE には間に合わなかったみたいですね。一読こそしましたが、長いので同じ問題かはまだ判定できていません。

問題当時は Free メモリが 800MB 位あったのに kmem が無くなっていたのは確認しています。

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2014/12/18/7519140/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。