今回は、XFSを利用する際のチューニングについて説明する。ディスクパーティションのフォーマットやマウントの際に適切な設定を施すことで、ファイルシステムのパフォーマンスを最適化できる。以下では、「XFSのサイズ拡張」「inodeサイズの変更」「barrierの無効化」の3つについて、順に解説していこう。

XFSのサイズ拡張

 XFSでアロケーショングループ(AG)の個数が非常に多く(数百以上)なると性能が劣化する場合がある。通常問題になることはないが、運用中にXFSのサイズを継続的に拡張しながら利用する場合には注意が必要となる。

 XFSのサイズ拡張時は、xfs_growfsコマンドでサイズを追加する。XFSを縮小することはできない。xfs_growfsでの拡張はファイルシステムをシステムにマウント(mount)した状態でのみ可能で、必要に応じて自動的にAGが追加される。

 mkfs.xfsは初期サイズに対して適切(と推定される)なAGサイズを設定するが、AGのサイズを変更できないことから初期の容量の100倍など大きく拡張をする場合にはAGのサイズが不適切になるケースが出てくる。

 このため元のサイズと比べて10倍以上に拡張するような利用が見込まれる場合には、最初からファイルシステムのサイズを大きめにしてフォーマットしておく、AGのサイズを大きく指定しておくなどにより、データが増えたときの性能劣化を防ぐ必要がある。

 ファイルシステムのサイズ拡張についてXFSとext4を比較すると、以下の2点が異なる

・XFSは拡張のみ可能で、縮小はできない
・XFSはオンラインリサイズのみ可能で、オフライン(mountされていない状態)でのリサイズはできない

inodeサイズの変更

 inodeのサイズを適切に設定することも、パフォーマンスの最適化につながる。

 inodeサイズ(isize)のデフォルトは256バイトで、最大2048バイトである。SELinuxのコンテキストやACL(Access Control List)といったファイルの拡張属性を利用する場合、これらがinodeの容量内に収まらないと、別途ブロックを確保するためアクセスに時間がかかってしまう。256バイトのinodeでは、およそ100バイトの拡張属性を格納できるが、これ以上の容量が必要なファイルが多数ある場合は、inodeサイズを拡張して対応するとよい。

 例えば分散ファイルシステムのGlusterFSでは、trusted.gfidなど多くの拡張属性をXFS上に保存する。そのため、inodeサイズを512バイトとしてフォーマットすることで、パフォーマンスが改善する。