やるきなし

2016/11/25 10:44 / btrfs tuning

Intel 8 Series/C220 Series Chipset (具体的にはC226)の Onboard RAID (RAID5)上で LUKS の暗号化を入れて,その上で btrfs を置いて NFS でファイルサーバにしているのだが,そのパフォーマンスについて.

ちなみに CPU は4コア4スレッド(stable 運用で,kernel は backports の linux-image-4.6.0-0.bpo.1-amd64 4.6.4-1~bpo8+1).暗号化しているのは廃棄の手間を考えて,btrfs は snapshot による daily backup のため.RAID5 が Onboard (ソフトウェア RAID)なのは予算の都合上.

だいたい2年半ぐらい運用していて,それなりにファイル数も増えて,snapshot数も増えた状態で,頻繁にiowaitで固まるようになった.

以下チューニングのポイント.

追記(2016/12/7)

ionice や renice で nfsd や btrfs-transacti の優先度を下げて(I/O については ionice -c 3 で idle class にして,プロセス優先度も nice -n 19 するとか)負荷が上がった時でも譲り合ってもらえるような設定を試してみたが,やはりうまく行かない.

結局 btrfs-transacti が間欠的に書き込みを行うのが問題らしい.通常は数十MBなのだが,たまに数百Mbyte級の read/write が発生する (なにに由来してサイズが変動するのか未調査).ちょっと微妙だが btrfs-transacti の kernel thread を起こすタイミングを手動で調整することにする.というか,mount -o remount すると btrfs-transacti が起きるので,あとはずっと sleep してもらうようにする.具体的には以下.

commit interval が長いと不具合発生時に未 commit のものが残ることになる(ように思われる)ので,その点要注意.手動で再起動する前にも一旦 remount したほうが良いのかもしれない.

ちなみに数時間分の commit すべきなにかを溜め込んだだろう状態で remount して一気に commit してみたが,それほど disk access は無かった.適切に merge されたりするのかもしれない.あと,メモリ使用量(もしくは disk 上のバッファ?)とかも気になるところ (際限なく溜め込めるわけでもないような気がする).

Related articles