ディレクトリ名ルックアップキャッシュ (DNLC) は、maxusers に基づいてデフォルト値が設定されます。NFS サーバーに多数のクライアントを接続している場合は、キャッシュサイズ (ncsize) を大きくしてください。大幅に性能が改善されます。
DNLC のヒット率 (cache hits) を調べるには、vmstat -s と入力します。
% vmstat -s ...[略]... 79062 total name lookups (cache hits 94%) 16 toolong
30 文字より短いディレクトリ名はキャッシュされ、長すぎてキャッシュ不可能なディレクトリ名は報告だけされます。キャッシュされなかった場合は、ファイルを得るためにパス名の要素を検索していく際に、ディレクトリ名を読むというディスクの入出力が必要になります。ヒット率が 90 % よりはるかに低い場合は、注意が必要です。
NFS の性能が、キャッシュのヒット率によって大きな影響を受ける場合があります。getattr と setattr、lookup は、通常、全 NFS コールの 50 %より大きな値になります。要求された情報がキャッシュにない場合は、ディスクアクセスを行うので、read あるいは write 要求にともなう性能の低下が生じます。DNLC キャッシュの大きさを制限する要素は、使用可能なカーネルメモリーの容量です。
特に長い名前を多用していないにもかかわらず、ヒット率(cache hits)が 90 % より低い場合は、ncsize 変数を調整します。ncsize 変数は、DNLC キャッシュの大きさを、キャッシュすることが可能な名前変換、および v ノード変換の数で表します。DNLC エントリ 1 個に使用されるカーネルメモリーは、約 50 バイトです。
/etc/system ファイルを開き、ncsize を設定します。maxusers 値に基づき、デフォルトより大きな値を設定します。
デフォルトでは、NFS 専用のサーバーには多くの RAM は必要ないため、maxusers 値および DNLC 値が小さくなっています。したがって、サイズを 2 倍にしてください。
set ncsize=5000
ncsize のデフォルト値は以下の式で表されます。
ncsize (ネームキャッシュ) = 17 * maxusers + 90
NFS サーバーのベンチマークを 16000 に設定します。
maxusers を 34906 に設定します。
システムを再起動します。
以下を参照してください。