7.3.2.2.2. 単一ディレクトリー内の多数のファイルの最適化
ディレクトリーブロックサイズは、ファイルシステムの使用期間中は固定されており、
mkfs
による初期フォーマット時以外は変更できません。最小のディレクトリーブロックはファイルシステムのブロックサイズで、このデフォルト値は MAX
(4 KB、ファイルシステムのブロックサイズ) です。通常、このディレクトリーブロックサイズを縮小する必要はありません。
ディレクトリー構造は b-tree ベースなので、ブロックサイズを変更すると物理 I/O あたりで取得もしくは修正できるディレクトリー情報の量に影響が及びます。ディレクトリーが大きくなればなるほど、特定のブロックサイズでオペレーションがより多くの I/O を必要とします。
しかし、大型のディレクトリーブロックサイズが使用されると、小型のディレクトリーブロックサイズのファイルシステム上での同一オペレーションと比較して、より多くの CPU が各修正オペレーションで消費されます。つまり、ディレクトリーサイズが小さいと、大型のディレクトリーブロックサイズの修正パフォーマンスは低くなることになります。I/O がパフォーマンスを制限する要素であるサイズにディレクトリーが達すると、大型のブロックサイズディレクトリーのパフォーマンスは向上します。
バックアップを保存するファイルシステムなど、読み取りよりも書き込みがより一般的またはより重要なファイルシステム (ファイルシステムへのバックアップの書き込みがバックアップの復元よりも頻繁に発生する) の場合、以下のようになります。
- 100–200 万までのディレクトリーエントリー (エントリー名の長さは 20–40 バイト) を必要とするファイルシステムは、4 KB のファイルシステムブロックサイズおよび 4 KB のディレクトリーブロックサイズのデフォルト設定でパフォーマンスがベストになります。
- 100-1000 万のディレクトリーエントリーを必要とするファイルシステムは、より大きい 16 KB のブロックサイズでパフォーマンスが向上します。
- 1000 万以上のディレクトリーエントリーを必要とするファイルシステムは、より大きい 64 KB のブロックサイズでパフォーマンスが向上します。
ミラー化ダウンロードサーバーのファイルシステムのように、コンテンツの閲覧が修正よりも多く、書き込みよりも読み取りがより一般的またはより重要なファイルシステムの場合、ブロックサイズが適用されるエントリー数を 10 分の 1 にします。たとえば、読み取りの多いファイルシステムでは、デフォルトのシステムおよびディレクトリーブロックサイズは、1-2 万以下のディレクトリーエントリーが最適になります。