Solaris カーネルのチューンアップ・リファレンスマニュアル

第 3 章 NFS チューニング可能パラメータ

この章では、NFS のチューニング可能パラメータについて説明します。カーネルのチューニング可能パラメータについては第 2 章「Solaris カーネルのチューニング可能パラメータ」を参照してください。TCP/IP のチューニング可能パラメータについては第 4 章「TCP/IP チューニング可能パラメータ」を参照してください。

NFS 環境のチューニング

これらのパラメータは、ブートプロセス中に読み込まれる /etc/system ファイルに定義します。各パラメータは、それが属するカーネルモジュールの名前と、自身を表わすパラメータ名で特定されます。詳細は、Solaris システムのチューニングを参照してください。


注 –

シンボル名や、それが存在するモジュール、デフォルト値は、リリースによって変わることがあります。変更を行ったり、前のリリースの値を適用したりする前に、使用する SunOS リリースのバージョンのマニュアルをチェックしてください。


NFS モジュールのパラメータ

ここでは、NFS カーネルモジュールに関連するパラメータについて説明します。

nfs:nfs3_pathconf_disable_cache

説明

NFS バージョン 3 でマウントされたファイルシステムの pathconf(2) 情報をキャッシングするかどうかを制御します。

データ型

整数 (32 ビット)

デフォルト

0 (キャッシングを有効にする)

範囲

0 (キャッシングを有効にする) か、1 (キャッシングを無効にする)

単位

ブール値

動的か

はい

検査

なし

どのような場合に変更するか

pathconf 情報はファイルごとにキャッシュされます。しかし、サーバーが特定ファイルの情報を動的に変更する可能性がある場合は、このパラメータを使用してキャッシングを無効にします。これは、クライアントがそのキャッシュエントリを検証する方法がないためです。

安定性レベル

発展中

nfs:nfs_allow_preepoch_time

説明

タイムスタンプが正しくなかったり「負」であるファイルをクライアントから表示できるようにするかどうかを制御します。

従来、NFS クライアントも NFS サーバーも、返されるファイルの時間範囲を、これらの属性を使用してチェックすることはありませんでした。受信するタイムスタンプの値は符号なしの 32 ビット long であるため、すべての値が有効だったからです。

しかし、32 ビットの Solaris リリースが動作しているシステムでは、タイムスタンプの値が符号付きの 32 ビット long です。このため、タイムスタンプが 1970 年 1 月 1 日より前の表示 (つまり「昔」の) になっていることがあります。

64 ビットの Solaris リリースが動作しているシステムでの問題は、これとは多少異なります。64 ビットの Solaris リリースでは、タイムスタンプ値が符号付きの 64 ビット long です。時刻フィールドがフルの 32 ビットの時刻を表しているのか、時刻フィールドが負の時刻、つまり、1970 年 1 月 1 日より前を表しているのかを判別できません。

32 ビットから 64 ビットに変換するときに時刻値に符号を付けるべきかどうかを決定することはできません。つまり、時刻値が本当に負数を表している場合は、時刻値に符号を付ける必要がありますし、本当にフルの 32 ビット時刻値を表している場合は、符号を付けるべきではありません。この問題は、フルの 32 ビット時刻値を無効にすることによって解決できます。

データ型

整数 (32 ビット)

デフォルト

0 (32 ビットのタイムスタンプを無効にする)

範囲

0 (32 ビットのタイムスタンプを無効にする) か、1 (32 ビットのタイムスタンプを有効にする)

単位

ブール値

動的か

はい

検査

なし

どのような場合に変更するか

「正常な」操作が行われていても、ファイルによっては、タイムスタンプ値がはるかに離れた将来や過去の日付に設定されることがあります。NFS でマウントされたファイルシステムを使用してこれらのファイルにアクセスすることが望ましい場合は、このパラメータを 1 にすれば、タイムスタンプ値をチェックなしで受け取ることができます。

安定性レベル

発展中

nfs:nfs_cots_timeo

説明

トランスポートプロトコルとして TCP などの接続型トランスポートを使用している、NFS バージョン 2 でマウントされたファイルシステムの、デフォルトの RPC タイムアウトを制御します。

データ型

符号付き整数 (32 ビット)

デフォルト

600 (60 秒)

範囲

0 から 231 - 1

単位

10 分の 1 秒

動的か

はい。ただし、ファイルシステムの RPC タイムアウトは、ファイルシステムのマウント時に設定されます。特定のファイルシステムに影響を与えるには、このパラメータを変更してからそのファイルシステムをアンマウントし、再びマウントします。

検査

なし

どのような場合に変更するか

TCP では、要求と応答が適切に転送されるよう機能します。しかし、特に遅いネットワークにおいて往復時間が非常に長くなると、NFS バージョン 2 のクライアントがタイムアウトになってしまう可能性があります。

クライアントが無用にタイムアウトしてしまうことを防ぐには、このパラメータを増やします。ただし、値の範囲が非常に広いため、この値を大きくしすぎると、実際には再転送が必要なのにその状況が長い間検出されないおそれがあります。

安定性レベル

発展中

nfs:nfs3_cots_timeo

説明

トランスポートプロトコルとして TCP などの接続型トランスポートを使用している、NFS バージョン 3 でマウントされたファイルシステムの、デフォルトの RPC タイムアウトを制御します。

データ型

符号付き整数 (32 ビット)

デフォルト

600 (60 秒)

範囲

0 から 231 - 1

単位

10 分の 1 秒

動的か

はい。ただし、ファイルシステムの RPC タイムアウトは、ファイルシステムのマウント時に設定されます。特定のファイルシステムに影響を与えるには、このパラメータを変更してからそのファイルシステムをアンマウントし、再びマウントします。

検査

なし

どのような場合に変更するか

TCP では、要求と応答が適切に転送されるよう機能します。しかし、特に遅いネットワークにおいて往復時間が非常に長くなると、NFS バージョン 3 のクライアントがタイムアウトになってしまう可能性があります。クライアントが無用にタイムアウトしてしまうことを防ぐには、このパラメータを増やします。ただし、値の範囲が非常に広いため、この値を大きくしすぎると、実際には再転送が必要なのにその状況が長い間検出されないおそれがあります。

安定性レベル

発展中

nfs:nfs_do_symlink_cache

説明

NFS バージョン 2 でマウントされたファイルシステムに対してシンボリックリンクファイルの内容をキャッシュするかどうかを制御します。

データ型

整数 (32 ビット)

デフォルト

1 (キャッシングを有効にする)

範囲

0 (キャッシングを無効にする)か、1 (キャッシングを有効にする)

単位

ブール値

動的か

はい

検査

なし

どのような場合に変更するか

サーバーが、シンボリックリンクファイルの内容を変更してもそのファイルの更新タイムスタンプを更新しない場合や、タイムスタンプの精度が粗すぎる場合には、シンボリックリンクファイルの内容が変更されても、クライアントにはその変更が長い間見られないことがあります。その場合には、このパラメータを使用してシンボリックリンクの内容のキャッシングを無効にすれば、クライアントで動作しているアプリケーションで変更をただちに見ることができます。

安定性レベル

発展中

nfs:nfs3_do_symlink_cache

説明

NFS バージョン 3 でマウントされたファイルシステムに対してシンボリックリンクファイルの内容をキャッシュするかどうかを制御します。

データ型

整数 (32 ビット)

デフォルト

1 (キャッシングを有効にする)

範囲

0 (キャッシングを無効にする)か、1 (キャッシングを有効にする)

単位

ブール値

動的か

はい

検査

なし

どのような場合に変更するか

サーバーが、シンボリックリンクファイルの内容を変更してもそのファイルの更新タイムスタンプを更新しない場合や、タイムスタンプの精度が粗すぎる場合には、シンボリックリンクファイルの内容が変更されても、クライアントにはその変更が長い間見られないことがあります。その場合には、このパラメータを使用してシンボリックリンクの内容のキャッシングを無効にすれば、クライアントで動作しているアプリケーションで変更をただちに見ることができます。

安定性レベル

発展中

nfs:nfs_dynamic

説明

UDP などのコネクションレストランスポートを使用する、NFS バージョン 2 でマウントされたファイルシステムに対し、「動的再転送」と呼ばれる機能を有効にするかどうかを制御します。この機能は、サーバーの応答時間を監視し、RPC タイムアウトと読み取り / 書き込みの転送サイズを調整することによって、再転送の回数を減らそうとするものです。

データ型

整数 (32 ビット)

デフォルト

1 (有効)

範囲

0 (無効)、1 (有効)

動的か

はい。ただし、このパラメータは、ファイルシステムごとにマウント時に設定されます。特定のファイルシステムに影響を与えるには、このパラメータを変更してからそのファイルシステムをアンマウントし、再びマウントします。

検査

なし

どのような場合に変更するか

サーバーの応答やネットワークの負荷が急激に変動する状況では、動的再転送の機能により RPC タイムアウトの回数が不当に増えたり、読み取り/書き込みの転送サイズが不必要に小さくなったりすることがあります。この機能を無効にすると、スループットは向上するかもしれませんが、おそらくサーバーの応答やネットワークの負荷により急激な変動が目立つようになります。

安定性レベル

発展中

nfs:nfs3_dynamic

説明

UDP などのコネクションレストランスポートを使用する、NFS バージョン 3 でマウントされたファイルシステムに対し、「動的再転送」と呼ばれる機能を有効にするかどうかを制御します。この機能は、サーバーの応答時間を監視し、RPC タイムアウトと読み取り / 書き込みの転送サイズを調整することによって、再転送の回数を減らそうとするものです。

データ型

整数 (32 ビット)

デフォルト

0 (無効)

範囲

0 (無効)、1 (有効)

単位

ブール値

動的か

はい。ただし、このパラメータは、ファイルシステムごとにマウント時に設定されます。特定のファイルシステムに影響を与えるには、このパラメータを変更してからそのファイルシステムをアンマウントし、再びマウントします。

検査

なし

どのような場合に変更するか

サーバーの応答やネットワークの負荷が急激に変動する状況では、動的再転送の機能により RPC タイムアウトの回数が不当に増えたり、読み取り/書き込みの転送サイズが不必要に小さくなったりすることがあります。この機能を無効にすると、スループットは向上するかもしれませんが、おそらくサーバーの応答やネットワークの負荷により急激な変動が目立つようになります。

安定性レベル

発展中

nfs:nfs_lookup_neg_cache

説明

NFS バージョン 2 でマウントされたファイルシステムに対し、ネガティブ名前キャッシュを使用するかどうかを制御します。このネガティブ名前キャッシュを使用すると、ルックアップされたファイル名が存在しない場合には、そのファイル名が記録されます。このキャッシュは、存在しないことがすでにわかっているファイル名のルックアップ要求をネットワークを介して繰り返し行うのを避けるためにあります。

データ型

整数 (32 ビット)

デフォルト

1 (有効)

範囲

0 (無効)、1 (有効)

単位

ブール値

動的か

はい

検査

なし

どのような場合に変更するか

このキャッシュが正しく機能するためには、ネガティブエントリが使用前に厳密に検証されなければなりません。この整合性機構は、読み取り専用でマウントされたファイルシステムには若干緩和されています。つまり、サーバー上のファイルシステムが変更されないか、変更されてもゆっくりであり、そのような変更はクライアントにゆっくり伝達されても問題がないとみなされるためです。この場合は、この整合性機構が通常の属性キャッシュ機構になります。

読み取り専用でクライアントにマウントされているファイルシステムがサーバーで変更されたら、その変更をクライアントでただちに見る必要ある場合は、このパラメータを使用してネガティブキャッシュを無効にします。

安定性レベル

発展中

nfs:nfs3_lookup_neg_cache

説明

NFS バージョン 3 でマウントされたファイルシステムに対し、ネガティブ名前キャッシュを使用するかどうかを制御します。このネガティブ名前キャッシュを使用すると、ルックアップされたファイル名が存在しない場合には、そのファイル名が記録されます。このキャッシュは、存在しないことがすでにわかっているファイル名のルックアップ要求をネットワークを介して繰り返し行うのを避けるためにあります。

データ型

整数 (32 ビット)

デフォルト

1 (有効)

範囲

0 (無効)、1 (有効)

単位

ブール値

動的か

はい

検査

なし

どのような場合に変更するか

このキャッシュが正しく機能するためには、ネガティブエントリが使用前に厳密に検証されなければなりません。この整合性機構は、読み取り専用でマウントされたファイルシステムには若干緩和されています。つまり、サーバー上のファイルシステムが変更されないか、変更されてもゆっくりであり、そのような変更はクライアントにゆっくり伝達されても問題がないとみなされるためです。この場合は、この整合性機構が通常の属性キャッシュ機構になります。

読み取り専用でクライアントにマウントされているファイルシステムがサーバーで変更されたら、その変更をクライアントでただちに見る必要ある場合は、このパラメータを使用してネガティブキャッシュを無効にします。

安定性レベル

発展中

nfs:nfs_max_threads

説明

NFS バージョン 2 クライアントの非同期入出力を行うカーネルスレッドの数を制御します。NFS は RPC に基づくものであり、RPC はもともと同期して動作する機能であるため、呼び出し側のスレッドと非同期に NFS 操作を行うには、個別の実行コンテキストが必要です。

非同期に実行できる操作には、先読み read、先読み readdir の readdir、putpage 要求と pageio 要求の書き込みがあります。

データ型

整数 (16 ビット)

デフォルト

8

範囲

0 から 215 - 1

単位

スレッド

動的か

はい。ただし、このパラメータは、ファイルシステムごとにマウント時に設定されます。特定のファイルシステムに影響を与えるには、このパラメータを変更してからそのファイルシステムをアンマウントし、再びマウントします。

検査

なし

どのような場合に変更するか

ある時点で存在する同時入出力操作の数を増やしたり、減らしたりする場合には、このパラメータを変更します。たとえば、帯域幅が非常に狭いネットワークでは、NFS クライアントによるネットワークの過負荷を防止するためにこの値を減らすことがあります。あるいは、ネットワークの帯域幅が非常に広く、クライアントとサーバーが両方とも十分なリソースを備えている場合は、ネットワークの帯域幅やクライアントとサーバーのリソースをより有効に使用するためにこの値を増やすことができます。

安定性レベル

変更の可能性あり

nfs:nfs3_max_threads

説明

NFS バージョン 3 クライアントの非同期入出力を行うカーネルスレッドの数を制御します。NFS は RPC に基づくものであり、RPC はもともと同期して動作する機能であるため、呼び出し側のスレッドと非同期に NFS 操作を行うには、個別の実行コンテキストが必要です。

非同期に実行できる操作には、先読み read、先読み readdir の readdir、putpage 要求と pageio 要求の書き込み、およびコミットがあります。

データ型

整数 (16 ビット)

デフォルト

8

範囲

0 から 215 - 1

単位

スレッド

動的か

はい。ただし、このパラメータは、ファイルシステムごとにマウント時に設定されます。特定のファイルシステムに影響を与えるには、このパラメータを変更してからそのファイルシステムをアンマウントし、再びマウントします。

検査

なし

どのような場合に変更するか

ある時点で存在する同時入出力操作の数を増やしたり、減らしたりする場合には、このパラメータを変更します。たとえば、帯域幅が非常に狭いネットワークでは、NFS クライアントによるネットワークの過負荷を防止するためにこの値を減らすことがあります。あるいは、ネットワークの帯域幅が非常に広く、クライアントとサーバーが両方とも十分なリソースを備えている場合は、ネットワークの帯域幅やクライアントとサーバーのリソースをより有効に使用するためにこの値を増やすことができます。

安定性レベル

変更の可能性あり

nfs:nfs_nra

説明

ファイルの順次アクセスが見つかった時に NFS バージョン 2 クライアントがキューに入れる先読み操作の数を制御します。これらの先読み操作では、並行性が高まり、読み取りのスループットが向上します。個々の先読み要求は、通常、ファイルデータの 8192 バイトに対するものです。

データ型

整数 (32 ビット)

デフォルト

4

範囲

0 から 231 - 1

単位

先読み要求

動的か

はい

検査

なし

どのような場合に変更するか

特定のファイルに対してある時点で存在する先読み要求の数を増やしたり、減らしたりする場合には、このパラメータを変更します。たとえば、ネットワークの帯域幅が非常に狭い場合やクライアントのメモリーが少ない場合は、NFS クライアントによるネットワークの過負荷やシステムメモリーの使いすぎを防止するために、この値を減らすことができます。あるいは、ネットワークの帯域幅が非常に広く、クライアントとサーバーが両方とも十分なリソースを備えている場合は、ネットワークの帯域幅やクライアントとサーバーのリソースをより有効に使用するためにこの値を増やすことができます。

安定性レベル

変更の可能性あり

nfs:nfs3_nra

説明

ファイルの順次アクセスが見つかった時に NFS バージョン 3 クライアントがキューに入れる先読み操作の数を制御します。これらの先読み操作では、並行性が高まり、読み取りのスループットが向上します。個々の先読み要求は、通常、ファイルデータの 32,768 バイトに対するものです。

データ型

整数 (32 ビット)

デフォルト

4

範囲

0 から 231 - 1

単位

先読み要求

動的か

はい

検査

なし

どのような場合に変更するか

特定のファイルに対してある時点で存在する先読み要求の数を増やしたり、減らしたりする場合には、このパラメータを変更します。たとえば、ネットワークの帯域幅が非常に狭い場合やクライアントのメモリーが少ない場合は、NFS クライアントによるネットワークの過負荷やシステムメモリーの使いすぎを防止するために、この値を減らすことができます。あるいは、ネットワークの帯域幅が非常に広く、クライアントとサーバーが両方とも十分なリソースを備えている場合は、ネットワークの帯域幅やクライアントとサーバーのリソースをより有効に使用するためにこの値を増やすことができます。

安定性レベル

変更の可能性あり

nfs:nrnode

説明

NFS クライアントの rnode キャッシュのサイズを制御します。

NFS バージョン 2 クライアントでも、バージョン 3 クライアントでも使用される rnode キャッシュは、NFS クライアント上のファイルを記述する中心的なデータ構造体です。このデータ構造体には、サーバーのファイルを識別するファイルハンドルや、NFS クライアントがサーバーへのネットワーク呼び出しを避けるために使用するさまざまなキャッシュへのポインタが含まれています。個々の rnodevnode と 1 対 1 で対応しています。vnode には、ファイルデータがキャッシュされます。

NFS クライアントは、キャッシュされたデータやメタデータが破棄されないように、最小限の rnode を保持しようとします。rnode の再利用や解放が行われると、キャッシュされたデータやメタデータは破棄されなければなりません。

データ型

整数 (32 ビット)

デフォルト

このパラメータのデフォルト値は 0 です。これは、nrnode の値に ncsize パラメータの値が設定されるべきであることを示しています。実際、nrnode の値が正でないと、nrnode には ncsize が設定されます。

範囲

1 から 231 - 1

単位

rnode

動的か

いいえ。この値を変更するには、パラメータを /etc/system ファイルに追加するか、そのパラメータを変更し、システムを再起動する必要があります。

検査

rnode キャッシュが使用可能なメモリーの 25% を超えないような最大値をシステムは強制します。

どのような場合に変更するか

rnode の作成や破棄は動的に行われるため、システムは、システムのメモリーの要求や同時にアクセスされるファイルの数が増えるに従って、キャッシュのサイズを自動的に調整して、nrnode サイズキャッシュを決定する傾向があります。しかし、アクセスするファイルの組み合わせが前もって予測できる場合など、状況によっては、nrnode の値を設定する方がよいこともあります。たとえば、NFS クライアントが少数の非常に大きなファイルにアクセスしている場合は、nrnode の値に小さな数を設定すれば、システムメモリーには、rnode の代わりにファイルデータをキャッシュできます。あるいは、クライアントが多数の小さなファイルにアクセスしている場合は、nrnode に十分大きな値を設定すれば、ファイルメタデータの格納を最適化して、メタデータを求めるネットワーク呼び出しの回数を減らすことができます。

nrnode の値に 1 を設定すると、rnode キャッシュは事実上無効になります (ただし、この方法はお勧めできません)。この場合、クライアントは rnode を 1 つしかキャッシュしないため、それが頻繁に再使用されます。

安定性レベル

発展中

nfs:nfs_shrinkreaddir

説明

以前の一部の NFS サーバーでは、NFS バージョン 2 の READDIR 要求で 1024 バイトより大きいディレクトリ情報を求めるものが正しく処理されないことがありました。これは、サーバーの実装にバグがあったためです。このパラメータは、NFS バージョン 2 クライアントでの対処方法を含んでいます。

このパラメータを有効にすると、クライアントは、1024 バイトより大きいディレクトリ情報を求める READDIR 要求を生成しません。このパラメータを無効にすると、送信されるサイズは、getdents(2) システム呼び出しか NFS_MAXDATA (8192 バイト)で渡されるサイズのうち小さい方に設定されます。

データ型

整数 (32 ビット)

デフォルト

0 (無効)

範囲

0 (無効)、1 (有効)

単位

ブール値

動的か

はい

検査

なし

どのような場合に変更するか

古い NFS バージョン 2 のみのサーバーが使用され、ディレクトリの読み取りで相互運用性に問題がある場合は、このパラメータの値を調べてください。このパラメータを有効にすると、ディレクトリを読み取るアプリケーションのパフォーマンスが多少低下することがあります。

安定性レベル

発展中

nfs:nfs_write_error_interval

説明

NFS クライアントで見られる書き込みエラー (ENOSPCEDQUOT) のロギング間隔を制御します。このパラメータは、NFS バージョン 2 と 3 のクライアントに適用されます。

データ型

long 整数 (32 ビットプラットフォームでは 32 ビット、64 ビットプラットフォームでは 64 ビット)

デフォルト

5 秒

範囲

32 ビットプラットフォームでは 0 から 231 - 1、64 ビットプラットフォームでは 0 から 263 - 1

64 ビットプラットフォームでは 0 から 263 - 1

単位

動的か

はい

検査

なし

どのような場合に変更するか

クライアントによってロギングされるメッセージ量に応じてこのパラメータの値を増減します。たとえば、サーバーのファイルシステムが満杯で頻繁に使用されているときに出力される「out of space」メッセージを減らす場合は、このパラメータの値を増やします。

安定性レベル

発展中

nfs:nfs_write_error_to_cons_only

説明

NFS の書き込みエラーをシステムコンソールと syslog にロギングするか、システムコンソールだけにロギングするかを制御します。このパラメータは、NFS バージョン 2 と 3 のクライアントに適用されます。

データ型

整数 (32 ビット)

デフォルト

0 (システムコンソールと syslog)

範囲

0 (システムコンソールと syslog) か、1 (システムコンソール)

単位

ブール値

動的か

はい

検査

なし

どのような場合に変更するか

syslogd(1M) デーモンによってロギングされるメッセージを含むファイルシステムがいっぱいになるのを防ぐには、このパラメータの値を調べます。このパラメータを有効にすると、メッセージはシステムコンソールに出力されるだけで、syslog メッセージファイルにはコピーされません。

安定性レベル

発展中

nfs:nfs_disable_rddir_cache

説明

NFS バージョン 2 の READDIR 要求、および NFS バージョン 3 の READDIRREADDIRPLUS 要求からの応答を格納するキャッシュの使用を制御します。このキャッシュを使用すると、ディレクトリ情報を取得するためにサーバーを繰り返し呼び出すことがなくなります。

データ型

整数 (32 ビット)

デフォルト

0 (キャッシングを有効にする)

範囲

0 (キャッシングを有効にする) か、1 (キャッシングを無効にする)

単位

ブール値

動的か

はい

検査

なし

どのような場合に変更するか

ファイルやディレクトリがサーバーに作成されたりサーバーから削除されてもサーバーがディレクトリの変更時刻を更新しないために、相互運用性に問題がある場合は、このパラメータの値を調べます。ディレクトリにファイルを追加しても新しい名前が表示されなかったり、ディレクトリからファイルを削除しても古い名前が削除されない場合は、この問題があります。

このパラメータは、NFS バージョン 2 や 3 でマウントされたファイルシステムのキャッシングに適用されます。このパラメータは NFS でマウントされたすべてのファイルシステムに適用されるため、キャッシングをファイルシステムごとに有効にしたり、無効にしたりすることはできません。

安定性レベル

発展中

nfs:nfs3_bsize

説明

NFS バージョン 3 クライアントによって使用される論理ブロックサイズを制御します。このブロックサイズは、クライアントが入出力を行うときにサーバーに対して読み取りや書き込みを行うデータ量を表します。

データ型

符号なし整数 (32 ビット)

デフォルト

32,768 (32K バイト)

範囲

0 から 231 - 1

単位

バイト

動的か

はい。ただし、ファイルシステムのブロックサイズは、ファイルシステムのマウント時に設定されます。特定のファイルシステムに影響を与えるには、このパラメータを変更してからそのファイルシステムをアンマウントし、再びマウントします。

検査

なし。このパラメータの設定が小さすぎたり、大きすぎたりすると、システムの動作が異常になることがあります。このパラメータには、そのプラットフォームの PAGESIZE より小さい値を設定しないでください。さらに、このパラメータの値が大きすぎると、メモリー割り当てが許可されるのを待つのでシステムがハングすることがあります。

どのような場合に変更するか

データ転送サイズの最大値を変更したい場合は、このパラメータの値を調べてください。このパラメータは、nfs3_max_transfer_size パラメータと連携して変更してください。転送サイズを増やしたい場合は両方のパラメータを増やします。転送サイズを減らしたい場合は、通常、このパラメータを減らすだけで十分です。

安定性レベル

変更の可能性あり

nfs:nfs_async_clusters

説明

NFS バージョン 2 クライアントによって生成される非同期要求の組み合わせを制御します。非同期要求には、read-ahead、putpage、pageio、readdir-ahead という 4 つのタイプがあります。クライアントは、これらのタイプをラウンドロビンに処理し、特定の操作タイプだけを優遇することがないようにします。

しかし、書き込みの一括化 (書き込みをまとめる) などの NFS バージョン 2 サーバーの機能の中には、既存の NFS バージョン 2 クライアントの特定の動作に依存するものがあります。特に、この機能では、クライアントが複数の WRITE 要求をほぼ同時に送信することに依存します。キューから要求を 1 度に 1 つずつ取り出したのでは、クライアントのパフォーマンスを高めるために設けられたこのサーバー機能が生かされません。

したがって、タイプを変更する前に、送信される各タイプの要求数の制御に、このパラメータを使用します。

データ型

符号なし整数 (32 ビット)

デフォルト

1

範囲

0 から 231 - 1

単位

非同期要求

動的か

はい。ただし、ファイルシステムに対するクラスタ設定は、ファイルシステムのマウント時に設定されます。特定のファイルシステムに影響を与えるには、このパラメータを変更してからそのファイルシステムをアンマウントし、再びマウントします。

検査

なし。ただし、このパラメータに 0 を設定すると、キューに入れられている特定タイプの要求がすべて処理されてから、次のタイプが処理されます。これによって、アルゴリズムの公平性の部分が実質的に無効にされます。

どのような場合に変更するか

あるタイプについて次のタイプへ移行する前に生成される非同期操作の数を増やす場合は、このパラメータを変更します。これによって、クライアントからの操作のクラスタに依存するサーバーの機能が生かされる場合があります。

安定性レベル

変更の可能性あり

nfs:nfs3_async_clusters

説明

NFS バージョン 3 クライアントによって生成される非同期要求の組み合わせを制御します。非同期要求には、read-ahead、putpage、pageio、readdir-ahead、commit という 5 つのタイプがあります。クライアントは、これらのタイプをラウンドロビンに処理し、特定の操作タイプだけを優遇することがないようにします。

しかし、書き込みの一括化 (書き込みをまとめる) などの NFS バージョン 3 サーバーの機能の中には、既存の NFS バージョン 3 クライアントの一定の動作に依存するものがあります。特に、この機能では、クライアントが複数の WRITE 要求をほぼ同時に送信することに依存します。キューから要求を 1 度に 1 つずつ取り出したのでは、クライアントのパフォーマンスを高めるために設けられたこのサーバー機能が生かされません。

したがって、タイプを変更する前に、送信される各タイプの要求数の制御に、このパラメータを使用します。

データ型

符号なし整数 (32 ビット)

デフォルト

1

範囲

0 から 231 - 1

単位

非同期要求

動的か

はい。ただし、ファイルシステムに対するクラスタ設定は、ファイルシステムのマウント時に設定されます。特定のファイルシステムに影響を与えるには、このパラメータを変更してからそのファイルシステムをアンマウントし、再びマウントします。

検査

なし。ただし、このパラメータに 0 を設定すると、キューに入れられている特定タイプの要求がすべて処理されてから、次のタイプが処理されます。これによって、アルゴリズムの公平性の部分が実質的に無効にされます。

どのような場合に変更するか

あるタイプについて次のタイプへ移行する前に生成される非同期操作の数を増やす場合は、このパラメータを変更します。これによって、クライアントからの操作のクラスタに依存するサーバーの機能が生かされる場合があります。

安定性レベル

変更の可能性あり

nfs:nfs_async_timeout

説明

非同期の入出力要求を実行するスレッドが、終了するまでにどのくらい何もせず休眠するかを表す時間を制御する。実行する要求がないと各スレッドは休眠状態に入ります。このタイマーが切れる前に新しい要求が到着しないと、スレッドは休眠から起きて終了します。新しい要求が到着すると、スレッドは休眠から起きて要求を実行し、すべての要求を処理すると、次の要求が到着するかタイマーが切れるまで再び休眠に入ります。

データ型

整数 (32 ビット)

デフォルト

6000 (1 分を 60 秒 * 100Hz として表す)

範囲

0 から 231 - 1

単位

Hz (一般にクロックは 100Hz で動作する)

動的か

はい

検査

なし。ただし、このパラメータに正以外の値を設定すると、スレッドが、自身が処理する要求がキューになくなるとすぐに終了します。

どのような場合に変更するか

システムでのアプリケーションの動作を正確に把握し、非同期入出力要求の割合を予測できる場合は、次のどちらかの方法によってこのパラメータをチューニングすることで、パフォーマンスをある程度最適化することができます。

  • スレッドの終了までの時間を短くして、カーネルリソースの解放を早くする。

  • スレッドの終了までの時間を長くして、スレッドの作成や破棄にかかるオーバーヘッドを減らす。

安定性レベル

発展中

nfs:nacache

説明

NFS クライアント上のファイルアクセスキャッシュにアクセスするハッシュキューの数をチューニングします。ファイルアクセスキャッシュは、ユーザーがアクセスしようとするファイルに関する、ユーザーの持つファイルアクセス権を格納します。キャッシュ自体は動的に割り当てられますが、それへのインデックスに使用されるハッシュキューは静的に割り当てられます。このアルゴリズムでは、アクティブファイルごとに 1 つのアクセスキャッシュエントリが、ハッシュバケットごとにこれらの 4 つのアクセスキャッシュエントリがあるものとみなします。したがって、このパラメータの値には、デフォルトで nrnode パラメータの値が設定されます。

データ型

整数 (32 ビット)

デフォルト

このパラメータのデフォルトの設定は 0 です。これは、nacache の値に nrnode パラメータの値が設定されるべきであることを示しています。

範囲

1 から 231 - 1

単位

アクセスキャッシュエントリ

動的か

いいえ。この値は、/etc/system ファイルにパラメータを追加するか、パラメータを変更し、その後システムをリブートすることによってのみ変更できます。

検査

なし。ただし、このパラメータに負の値を設定すると、システムは、おそらく、非常に多くのハッシュキューをシステムに割り当て、その間にハングします。

どのような場合に変更するか

1 つのファイルごとに 1 つのアクセスキャッシュエントリがあるという基本的な前提が損われるおそれがある場合は、このパラメータの値を検討します。複数のユーザーが同じファイルにほぼ同時にアクセスするタイムシェアリングモードのシステムでは、このような状況になることがあります。このような場合には、予想されるアクセスキャッシュのサイズを増やすことが、キャッシュへのハッシュアクセスの効率性を保つ上で役立つことがあります。

安定性レベル

発展中

nfs:nfs3_jukebox_delay

説明

NFS バージョン 3 のクライアントが、前に出した要求に対して NFS3ERR_JUKEBOX エラーを受信してから、新しい要求を送信するまでにどのくらいの時間待つべきかを制御します。NFS3ERR_JUKEBOX エラーは、通常、何らかの理由でファイルが一時的に使用できないときにサーバーから返されます。このような状況は、通常、階層型記憶装置、CD やテープといったジュークボックスに関連しています。

データ型

long 整数 (32 ビットプラットフォームでは 32 ビット、64 ビットプラットフォームでは 64 ビット)

デフォルト

1000 (10 秒を 10 秒 * 100Hz で表す)

範囲

32 ビットプラットフォームでは 0 から 231 - 1

64 ビットプラットフォームでは 0 から 263 - 1

単位

Hz (一般にクロックは 100Hz で動作する)

動的か

はい

検査

なし

どのような場合に変更するか

このパラメータの値を調べ、必要ならサーバーが示す動作に合わせて値を調整します。再送信を繰り返すことによるネットワークオーバーヘッドを減らすためにファイルを使用できる遅延を長くする場合は、この値を増やします。ファイルが使用可能になったことを検知する遅延を減らしたい場合は、この値を減らします。

安定性レベル

発展中

nfs:nfs3_max_transfer_size

説明

NFS バージョン 3 の READWRITEREADDIR、または READDIRPLUS 要求のデータ部分の最大サイズを制御します。このパラメータは、サーバーが返す要求の最大サイズとクライアントが生成する要求の最大サイズの両方を制御します。

データ型

整数 (32 ビット)

デフォルト

32, 768 (32K バイト)

範囲

0 から 231 - 1

単位

バイト

動的か

はい

検査

なし。ただし、サーバー側の最大転送サイズに 0 を設定すると、クライアントはおそらく、誤作動するか、単にサーバーに要求を送信しないかのどちらかになる可能性があります。

また、UDP トランスポート経由の NFS を使用する場合にも、転送サイズの最大値に制限があります。UDP は、データグラム当たり 64K バイトの「強い」制限があります。この 64DK バイトには、要求のデータ部分の他に RPC ヘッダーやその他の NFS 情報を含まなければなりません。この制限値が大きすぎると、UDP エラーのためにクライアントとサーバーの通信に問題が発生することがあります。

どのような場合に変更するか

ネットワーク上を転送するデータのサイズをチューニングする場合は、このパラメータを変更します。このパラメータを変更する場合は、通常、これに合わせて nfs3_bsize パラメータを変更する必要があります。たとえば、ネットワーク上のデフォルト転送サイズを 8K バイトに減らす場合は、nfs3_max_transfer_sizenfs3_bsize パラメータの値を両方とも 8192 に変更して、それぞれで 8K バイトの読み取りまたは書き込みが行われ、複数の操作が行われることを防ぐことができます。あるいは、32K バイトを超える値に転送サイズ増やす場合は、これに合わせて nfs3_bsize も変更する必要があります。変更しないと、ネットワーク上の要求サイズは変わりません。

安定性レベル

変更の可能性あり

nfssrv モジュールのパラメータ

この節では、nfssrv モジュールの NFS パラメータについて説明します。

nfssrv:nfs_portmon

説明

NFS サーバーがクライアント側の整合性を保つためにある種のセキュリティチェックを行うかどうかを制御します。要求を送信したソースポートが「予約ポート」だったかどうかをチェックできます。「予約ポート」とは、番号が 1024 より小さいものを指します。BSD ベースのシステムでは、これらのポートは、root で実行するプロセスのために予約されています。このチェックでは、ユーザーが独自の RPC ベースのアプリケーションを作成して、NFS クライアントが使用するアクセスチェックを破ることを防止できます。

データ型

整数 (32 ビット)

デフォルト

0 (チェックを無効にする)

範囲

0 (チェックを無効にする)、1 (チェックを有効にする)

単位

ブール値

動的か

はい

検査

なし

どのような場合に変更するか

悪意のあるユーザーが、普通ならアクセス権のない NFS サーバーを使用してファイルにアクセスするのを防ごうとする場合、このパラメータを使用します。ただし、「予約ポート」は広範にサポートされている概念ではありません。したがって、このチェックにおけるセキュリティの側面は非常に弱いものです。さらに、すべての NFS クライアントの実装で、トランスポートの終端が、予約範囲にあるポート番号にバインドされているわけではありません。したがって、このチェックを有効にすると、相互運用性に問題が生じることがあります。

安定性レベル

発展中

nfssrv:rfs_write_async

説明

NFS バージョン 2 サーバーが WRITE 要求をどのように処理するかを制御します。NFS バージョン 2 プロトコルでは、WRITE 要求に関連するすべての変更済みデータとメタデータが安定したストレージに格納されていないと、サーバーはクライアントに応答できません。NFS バージョン 2 の WRITE 要求は、データは 8192 バイトに制限されます。したがって、各 WRITE 要求によって、複数の小さい書き込みがストレージサブシステムに対して行われることがあります。これは、パフォーマンス低下の原因になります。

NFS バージョン 2 の WRITE を高速化する 1 つの方法は、クライアントの動作を利用することです。クライアントは、複数の WRITE 要求をバッチで (一括して) 送信する傾向があります。サーバーでは、この動作を利用して複数の WRITE 要求を 1 つの要求にクラスタ化し、ファイルシステムに出すことができます。こうして、要求の数を少なくし、要求のサイズを大きくして、データをストレージサブシステムに書き込むことができます。これにより、WRITE 要求のスループットが大幅に向上することがあります。

データ型

整数 (32 ビット)

デフォルト

1 (クラスタ化を有効にする)

範囲

0 (クラスタ化を有効にする)、1 (クラスタ化を無効にする)

単位

ブール値

動的か

はい

検査

なし

どのような場合に変更するか

特に PC クライアントなど、非常に小さい NFS クライアントのなかには、複数の WRITE 要求をバッチ化しないものがあります。この場合には、クライアント側から要求される動作が存在しないため、NFS バージョン 2 サーバーで要求をクラスタ化しても、オーバーヘッドが増えるだけで、パフォーマンスがかえって低下することがあります。

安定性レベル

発展中

nfssrv:nfsauth_ch_cache_max

説明

NFS 認証サーバーに接続するクライアントハンドルのキャッシュサイズを制御します。サーバーは、NFS クライアントを認証して、クライアントが使用しようとしているファイルハンドルへのアクセスが許可できるかどうかを判定します。

データ型

整数 (32 ビット)

デフォルト

16

範囲

0 から 231 - 1

単位

クライアントハンドル

動的か

はい

検査

なし

どのような場合に変更するか

このキャッシュは動的でないため、すべてのクライアントハンドルが使用されていると、クライアントハンドルの割り当て要求は失敗します。これは NFS サーバーが、この要求を認証できなかったという理由で落とすことを意味します。しかし、ほとんどの場合、NFS クライアントはタイムアウトになり、要求を再転送するため、これは問題になりません。しかし、クライアントにソフトマウントされたファイルシステムの場合、クライアントは、タイムアウトになっても要求を再試行せず、アプリケーションにエラーを返すことがあります。サーバーのキャッシュを負荷に対応できるだけの大きさにしておけば、このような状況を防止できることがあります。

安定性レベル

変更の可能性あり

nfssrv:exi_cache_time

説明

システムのメモリー圧迫によって消去される前に NFS 認証キャッシュにエントリをどのくらいの間保持するかを制御します。

データ型

long 整数 (32 ビットプラットフォームでは 32 ビット、64 ビットプラットフォームでは 64 ビット)

デフォルト

3600 秒 (1 時間)

範囲

32 ビットプラットフォームでは 0 から 231 - 1

64 ビットプラットフォームでは 0 から 263 - 1

単位

動的か

はい

検査

なし

どのような場合に変更するか

NFS 認証キャッシュのサイズは、エントリがキャッシュから消去されるまでの最小限の時間を変更することによって調整することができます。キャッシュのサイズは、大きくなりすぎないように制御すべきです。そうすれば、この時間のプロセスによって開放されなかったシステムリソースを使用できます。

安定性レベル

発展中

rpcmod モジュールのパラメータ

この節では、rpcmod モジュールの NFS パラメータについて説明します。

rpcmod:clnt_max_conns

説明

NFS クライアントが各 NFS サーバーと通信するときに使用する TCP 接続の数を制御します。カーネル RPC は、1 つの接続で RPC を多重化して構築しますが、必要なら複数の接続で使用することもできます。

データ型

整数 (32 ビット)

デフォルト

1

範囲

1 から 231 - 1

単位

接続

動的か

はい

検査

なし

どのような場合に変更するか

一般には、1 つの接続だけでネットワーク帯域幅全体を使いきることができます。しかし、ネットワークが提供する帯域幅を TCP が 1 つのストリームだけで利用できない場合は、複数の接続を使えば、クライアントとサーバー間のスループットが向上することがあります。

接続数の増加には犠牲が伴います。接続数を増加すると、個々の接続を管理するために、より多くのカーネルリソースの使用が必要になります。

安定性レベル

発展中

rpcmod:clnt_idle_timeout

説明

クライアントとサーバー間の接続がクライアント側でどのくらいの間遊休であれば、接続をクローズするかを制御します。

データ型

long 整数 (32 ビットプラットフォームでは 32 ビット、64 ビットプラットフォームでは 64 ビット)

デフォルト

300,000 ミリ秒 (5 分)

範囲

32 ビットプラットフォームでは 0 から 231 - 1

64 ビットプラットフォームでは 0 から 263 - 1

単位

ミリ秒

動的か

はい

検査

なし

どのような場合に変更するか

クライアント側でどのくらいの間遊休であれば接続をクローズするかを変更したい場合は、このパラメータを使用します。システムリソースが浪費されるのを防ぐために、遊休接続をクローズする時間を短縮したい場合などです。

安定性レベル

発展中

rpcmod:svc_idle_timeout

説明

クライアントとサーバー間の接続がサーバー側でどのくらいの間遊休であれば接続をクローズするかを制御します。

データ型

long 整数 (32 ビットプラットフォームでは 32 ビット、64 ビットプラットフォームでは 64 ビット)

デフォルト

360,000 ミリ秒 (6 分)

範囲

32 ビットプラットフォームでは 0 から 231 - 1

64 ビットプラットフォームでは 0 から 263 - 1

単位

ミリ秒

動的か

はい

検査

なし

どのような場合に変更するか

サーバー側でどのくらいの間遊休であれば接続をクローズするかを変更したい場合は、このパラメータを使用します。必要な場合は、システムリソースの浪費を防ぐために遊休接続をクローズする時間を短縮します。

安定性レベル

発展中

rpcmod:svc_default_stksize

説明

カーネル RPC のサービススレッドに対するカーネルスタックのサイズを設定します。

データ型

整数 (32 ビット)

デフォルト

デフォルト値 0 は、スタックサイズにシステムのデフォルト値を設定することを表します。

範囲

0 から 231 - 1

単位

バイト

動的か

スタックサイズはスレッドの作成時に設定されます。したがって、このパラメータの変更は、既存のスレッドには適用されず、新しく割り当てられるすべてのスレッドに適用されます。

検査

なし

どのような場合に変更するか

呼び出し深度が非常に深いために、スタックがオーバーフローし、レッドゾーンの障害が発生するおそれがある場合。トランスポートに対する呼び出し深度が比較的深く、ローカルファイルシステムに対する呼び出しの深さが深いという組合わせは、NFS サービススレッドのスタックがオーバーフローを起こすことがあります。

このパラメータには、プラットフォームのハードウェア pagesize の倍数を設定する必要があります。

安定性レベル

発展中

rpcmod:svc_default_max_same_xprt

説明

各トランスポート終端の要求を最大でいくつ処理したら、次のトランスポート終端に進むかを制御します。カーネル RPC では、サービススレッドのプールとトランスポート終端のプールが使用されます。個々のサービススレッドは、どのトランスポート終端からの要求でも処理できます。ただし、パフォーマンス上の理由により、次のトランスポート終端に進む前に各トランスポート終端の複数の要求が処理されます。このアプローチにより、不足を避け、パフォーマンス上の利点を得ることができます。

データ型

整数 (32 ビット)

デフォルト

8

範囲

0 から 231 - 1

単位

要求

動的か

はい。ただし、トランスポート終端を切り替える前に要求を最大でいくつ処理するかは、トランスポート終端がカーネル RPC サブシステムに構成されるときに設定されます。このパラメータへの変更は、新しいトランスポート終端だけに適用されます。つまり、既存のトランスポート終端には無効です。

検査

なし

どのような場合に変更するか

サービスが、NFS バージョン 2 の WRITE 要求を高速化するクラスタ化などのクライアントの動作を利用できるようにこの値をチューニングすることができます。このパラメータの値を増やすことにより、サーバー側でクライアントの動作の利点をよりよく利用できる可能性があります。

安定性レベル

発展中

rpcmod:maxdupreqs

説明

コネクションレストランスポートにおける RPC レベルの再転送を検出する重複要求キャッシュのサイズを制御します。このキャッシュは、クライアントネットワークアドレス、RPC の手順番号、プログラム番号、バージョン番号、および、トランザクション ID でインデックス化されています。このキャッシュにより、非べき等であるかもしれない再転送要求の処理が防止されます。

データ型

整数 (32 ビット)

デフォルト

1024

範囲

1 から 231 - 1

単位

要求

動的か

キャッシュのサイズは動的に決められますが、キャッシュへの高速アクセスを可能にするハッシュキューのサイズは静的に決められます。キャッシュのサイズを著しく大きくすると、キャッシュ内のエントリの検索に長い時間がかかることがあります。

このパラメータに 0 を設定しないでください。0 を設定すると、NFS サーバーは非べき等の要求を処理できません。

検査

なし

どのような場合に変更するか

NFS クライアントで不正な障害エラーが見られる場合は、このパラメータの値を調べます。たとえば、ディレクトリの作成が失敗したのに、実際にはディレクトリが作成されている場合は、再転送された MKDIR 要求をサーバーが検出しなかった可能性があります。

キャッシュのサイズは、サーバーの負荷に見合ったものでなければなりません。キャッシュには非べき等の要求が格納されるため、キャッシュでは、要求全体の一部だけしか管理する必要がありません。キャッシュは、クライアント側の再転送を検出できるだけの間、情報を保持していなければなりません。一般に、コネクションレストランスポートのクライアントのタイムアウトは比較的短く、1 秒から 20 秒くらいです。

安定性レベル

変更の可能性あり

rpcmod:cotsmaxdupreqs

説明

コネクション型のトランスポートにおける RPC レベルの再転送を検出する重複要求キャッシュのサイズを制御します。このキャッシュは、クライアントネットワークアドレス、RPC の手順番号、プログラム番号、バージョン番号、および、トランザクション ID でインデックス化されています。このキャッシュにより、非べき等であるかもしれない再転送要求の処理が防止されます。

データ型

整数 (32 ビット)

デフォルト

1024

範囲

1 から 231 - 1

単位

要求

動的か

はい

検査

キャッシュのサイズは動的に決められますが、キャッシュへの高速アクセスを可能にするハッシュキューのサイズは静的に決められます。キャッシュのサイズを著しく大きくすると、キャッシュ内のエントリの検索に長い時間がかかることがあります。

このパラメータに 0 を設定しないでください。0 を設定すると、NFS サーバーは非べき等の要求を処理できません。

どのような場合に変更するか

NFS クライアントで不正な障害エラーが見られる場合は、このパラメータの値を調べます。たとえば、ディレクトリの作成が失敗したのに、実際にはディレクトリが作成されている場合は、再転送された MKDIR 要求をサーバーが検出しなかった可能性があります。

キャッシュのサイズは、サーバーの負荷に見合ったものでなければなりません。キャッシュには非べき等の要求が格納されるため、キャッシュでは、要求全体の一部だけしか管理する必要がありません。キャッシュは、クライアント側の再転送を検出できるだけの間、情報を保持していなければなりません。一般に、コネクション型のトランスポートのクライアントのタイムアウトは非常に長く、1 分くらいです。したがって、エントリは、キャッシュに比較的長く留まる必要があります。

安定性レベル

変更の可能性あり