ディレクトリ名ルックアップキャッシュ (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 値に基づき、デフォルトより大きな値を設定します。
As an initial guideline, since dedicated NFS servers do not need a lot of RAM, maxusers will be low and the DNLC will be small; double its size.
set ncsize=5000
ncsize のデフォルト値は以下の式で表されます。
ncsize (ネームキャッシュ) = 17 * maxusers + 90
NFS サーバーのベンチマークでは、16000 に設定されています。
maxusers = 2048 の場合は、34906 に設定します。