XFS セクタサイズチューニング

自宅の HP microserver の交換用 HDD として WD Red こと Western Digital WD30EFRX を買いました。24 時間運用のサーバや NAS 向けとされる、すこし値段の高い HDD です。一般用途向けの WD Green こと WD30EZRX-1TPB と比べてもそんなに価格差がなくなってきたので、今回は奮発してみました。

既存の HDD と同じように XFS にして使うつもりですが、いわゆる Advanced Format Technology (AFT) と呼ばれる物理 4K セクタの HDD についてこれまでよく調べられなかったので、今回はちょっと時間をとっていろいろ検証してみることにしました。

XFS sectsz

これまで /sbin/mkfs.xfs コマンドについては、ブロックデバイスの素性に合わせて最適な設定を勝手にしてくれるものと思っていたのですが、どうも AFTHDD についてはそうならないことがあるようです。

今回使ったのは Debian squeeze の xfsprogs 3.1.4/sbin/mkfs.xfs ですが、普通にこれで mkfs すると次のように sectsz=512 となってしまいます。

root@microserver:~# mkfs -t xfs -f /dev/sdd
meta-data=/dev/sdd               isize=256    agcount=32, agsize=22892708 blks
         =                       sectsz=512   attr=2, projid32bit=0
data     =                       bsize=4096   blocks=732566646, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal log           bsize=4096   blocks=357698, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

bsize=4096 になってるからいいのかなと思うかもしれませんが、これは最適ではないということです。この状態では 512 バイトセクタ単位の読み書きが発生し性能が劣化します。

-s size=4096 をつけて mkfs すると sectsz=4096 となります。どうやらこれが最適な状態のようです。

root@microserver:~# mkfs -t xfs -s size=4096 -f /dev/sdd
meta-data=/dev/sdd               isize=256    agcount=32, agsize=22892708 blks
         =                       sectsz=4096  attr=2, projid32bit=0
data     =                       bsize=4096   blocks=732566646, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal log           bsize=4096   blocks=357698, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

なお検索すると mkfs -t xfs -b size=4096 などとしている事例が見つかりますが、これは意味がありません。 bsize は元々 4096 がデフォルトだからです。

昔 WD20EARS 4 台で RAID5 を作ったとき は、単に mkfs しただけでも sectsz が 4096 になっていたようなのですが、 AFT HDD 単体についてはそうはならないようです。今使っている XFS が気になる人は xfs_info コマンドで調べられますので確認してみてください。

なおこの件に関しては mkfs.xfs に対する修正 が提出されています。sectsz をデバイスが報告する物理セクタサイズに合わせるというものです。

ということで xfsprogs 3.1.8 以降の mkfs.xfs ならなにもしなくとも最適な設定にしてくれるかもしれません (残念ながら次期リリースの Debian wheezy ではまだ 3.1.7 にとどまるようですが)。

ベンチマーク

せっかく新品の HDD を買ったので、データを書き込む前に sectsz=512 と sectsz=4096 について bonnie++ ベンチマーク で比較してみました。

bonnie++

だいたい予想通りの結果です。ファイルの作成や削除で差が出るのはディレクトリエントリの操作などがあり 1 セクタ単位の読み書きがたくさん発生するからでしょう。

ファイルサーバ用途で、大半のファイルが MB 単位のボリュームであれば大して影響はないかもしれませんが、システム領域など小さなファイルが大量にあるボリュームの場合はかなり差が出るのではないかと思います。

2012/12/26 17:52:00 JST