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
コマンドについては、ブロックデバイスの素性に合わせて最適な設定を勝手にしてくれるものと思っていたのですが、どうも AFT の HDD についてはそうならないことがあるようです。
今回使ったのは 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++ ベンチマーク で比較してみました。
- シーケンシャルな I/O の速度に大した差はない。
- ファイルの作成速度・削除速度では 2 倍近くの差が出ることがある。
だいたい予想通りの結果です。ファイルの作成や削除で差が出るのはディレクトリエントリの操作などがあり 1 セクタ単位の読み書きがたくさん発生するからでしょう。
ファイルサーバ用途で、大半のファイルが MB 単位のボリュームであれば大して影響はないかもしれませんが、システム領域など小さなファイルが大量にあるボリュームの場合はかなり差が出るのではないかと思います。
2012/12/26 17:52:00 JST