maxdir-sizeの影響
`maxdir-size`の制限を引き上げることで、ディレクトリファイルの拡張が許可されます。容量とパフォーマンスのコストは、ディレクトリファイルが実際に大きくなったときにのみ発生し、作成および名前変更操作は、ファイルが上限に達すると失敗します。
容量が及ぼす影響
変更する `maxdir-size`設定自体は容量を消費しません。ディレクトリのエントリ数の増加はそれにつながります。ディレクトリファイルは、名前が追加されるたびに 4 KiB のブロックを割り当てます。付随するインデックスと Snapshot に保持されるディレクトリブロックは、さらに多くのブロックを追加します。上限を設定しても、そのスペースは予約されません。削除後の高水位サイズについては、"maxdir-size の上限値の動作について"を参照してください。
値を見積もる際 maxdir-size、ディレクトリ配下のファイルに格納されているデータを含める必要はありません。代わりに、単一のディレクトリ内のエントリのみを考慮してください。このオプションはボリュームレベルで設定されますが、ディレクトリごとに適用されます。
ファイル数の多いディレクトリの容量使用量を計画する際には、ディレクトリとインデックスのオーバーヘッドも考慮に入れる必要があります。例えば、それぞれが320 MBの上限まで成長する100個のディレクトリを含むボリュームには、約32 GBのディレクトリファイルメタデータが格納され、これはボリュームの使用容量にカウントされます。それらのディレクトリがインデックス化されていて公開されている場合は、maxfiles の予算に約100個の inode を追加してください。ディレクトリのメタデータが頻繁に更新される場合は、Snapshotコピーには置き換えられたディレクトリおよびインデックスブロックが保持されるため、追加の Snapshot 容量を考慮してください。
パフォーマンスへの影響
ONTAP システム内の大きなディレクトリは、以下に影響を与える可能性があります:
-
名前検索、作成、リンク解除、およびリネームのパス長
-
ディレクトリの完全列挙とワイルドカード検索
-
名前空間処理に使用されるCPUとメモリ
-
インデックスブロックとディレクトリブロックをロードするためにコールドキャッシュI/Oが必要
-
長時間の処理中のプロトコル遅延とクライアントタイムアウト
-
分析、バックアップ、レプリケーション、またはセキュリティ機能によって実行される名前空間スキャン
ディレクトリインデックスはターゲット検索のコストを削減しますが、非常に大きなフラットディレクトリをシャーディングされた階層構造と同等にするものではありません。周囲のボリュームやクラスタに未使用のリソースがある場合でも、単一のディレクトリに対する操作では、シリアル化やアフィニティの制限が発生する可能性があります。インデックス作成は、検索、オープン、作成、名前変更、削除といった、特定の名前に対する操作を容易にします。ディレクトリ全体のスキャンとワイルドカード検索は、引き続きディレクトリの名前空間を走査します。インデックスを名前からブロックへのショートカットとして使用しません。ホールパンチされたディレクトリでは、インデックスは `READDIR`の際に空のブロックをスキップできますが、それはシャーディングされたレイアウトの代替にはなりません。
ONTAPがパフォーマンス障害を宣言する、個別のディレクトリファイルサイズのしきい値は存在しません。約 2 MiB のインデックスしきい値("ディレクトリインデックスが存在する理由"で説明)は、ターゲット検索の提供方法を変更します。そのサイズ以下では、名前の検索においてディレクトリブロックをスキャンして一時的なインメモリハッシュを構築できるため、コストはディレクトリのサイズとともに増加しますが、ONTAP は永続的なインデックスを作成しません。そのサイズを超えると、ターゲットを絞った名前操作にはインデックスが使用されます。ディレクトリが大きくなるにつれてコストが上昇し続けるのは、完全な列挙とワイルドカード検索、ディレクトリおよびインデックスブロックのコールドキャッシュロード、ならびにそのディレクトリに対する操作のシリアライゼーションです。
クライアントは、より長いディレクトリ一覧、ワイルドカード検索、アプリケーションスキャン、より高いプロトコル遅延、およびそれらの操作中のタイムアウトが発生する可能性があります。ディレクトリを所有するノードは、データスループットが低いまま、メタデータにCPUとメモリを費やす可能性があります。その影響は、操作速度、同時実行性、キャッシュの状態、およびそのディレクトリに集中している名前の数によって異なります。 wafl.dir.size.warning、通常は `maxdir-size`の約90%で、ディレクトリのサイズが上限に近づいていることを警告します。これは、測定された遅延しきい値を示すものではありません。
例えば、そのディレクトリ内の既知のファイルを1つ開く場合、インデックスが名前検索の役割を果たすため、すぐに結果が返ってくる可能性があります。同じディレクトリを `ls`で一覧表示したり、 `find`でウォークしたり、すべての名前を読み取るアプリケーション、バックアップ、またはセキュリティスキャンを実行すると、長時間実行されたり、ハングアップしたように見えたり、クライアントまたはアプリケーションのタイムアウトが発生したりする可能性があります。その間、クライアントはごくわずかなファイルデータしか転送しません。既に開いているファイルの読み書きは、通常影響を受けません。
ワークロードがより大きな単一ディレクトリを必要とし、かつ再構築が現実的でない場合にのみ `maxdir-size`を上げてください。アプリケーションが許容する場合は、幅の広い階層構造または深い階層構造を優先してください。
maxdir-sizeを超えるとどうなりますか?
ディレクトリファイルが上限に達した場合:
-
ONTAPは、そのディレクトリに別の名前を追加する必要がある操作(作成や名前変更など)を拒否します。
-
クライアントは、ENOSPC、「ファイルが大きすぎます」、NFS エラー 27、
STATUS_CANNOT_MAKE、またはアプリケーション固有の作成または名前変更の失敗を報告する可能性があります。 -
他のディレクトリは、容量とinodeに余裕があれば、引き続きエントリを受け入れることができます。
-
そのボリュームには、空きデータ容量と公開iノードが残っている可能性があります。
-
既存のファイルを読み込むことは、ディレクトリに別のエントリを追加することとは異なり、通常は影響を受けません。
`maxfiles`または `maxdir-size`を超過すると、容量の問題のように見える場合があります。EMSメッセージを確認してください。クライアントエラーはinode枯渇と重複しています。link:high-file-count-workloads-01-overview.html#maxfiles-compared-with-maxdir-size["Maxfilesとmaxdir-sizeの比較"]を参照してください。
フラットな名前空間を変更できない場合は、制御された `maxdir-size`増加を評価します:
set -privilege advanced volume modify -vserver <svm> -volume <volume> -maxdir-size 327MB
平均的な成長率を目指す場合、現在の上限を約2%ずつ増額してください。既知の測定要件がある移行の場合、上限値をその要件の約2%上に設定してください。変更は即座に行われ、無停止で実施されます。
後で上限値を下げることはできますが、既存のディレクトリファイルの最大サイズを下回ることはできません。上限値を下げても、既存のディレクトリは圧縮されません。ONTAPリリースとプラットフォームでサポートされている値を確認し、変更後のパフォーマンスを監視してください。