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

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

安定性レベル

発展中

nfsserv:nfs_shrinkreaddir

説明

NFS バージョン 2 サーバー実装のバグにより、NFS サーバーは 1024 バイト以上のディレクトリ情報を求める NFS バージョン 2 のREADDIR 要求を正しく処理できない場合があります。このパラメータは、NFS バージョン 2 クライアントでの回避策を含んでいます。

このパラメータを有効にすると、クライアントは、1024 バイトより大きいディレクトリ情報を求める READDIR 要求を生成しません。

このパラメータを無効にすると、転送されるサイズは、getdents(2) システム呼び出しで得られる値か NFS_MAXDATA (8192 バイト) のうち小さい方に設定されます。

データ型

32 ビット整数

デフォルト

0 (無効)

範囲

0 (無効)、1 (有効)

単位

ブール値

動的か

はい

検査

なし

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

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

安定性レベル

発展中

nfsserv:nfs3_shrinkreaddir

説明

最近の Solaris の変更により readdir(3C) ライブラリが使用するディレクトリのバッファサイズは 1048 バイトから 8192 バイトへ変更となりました。これに対応して、 getdents(2) システム呼び出しで要求されるバイト数も変更されました。 この直接的な結果として、NFS バージョン 3 サーバーへ対する READDIR および READDIRPLUS 要求もサイズが拡大しました。 このため大きな要求サイズを処理できないサーバー実装では、相互運用性に問題が生じる場合があります。

データ型

32 ビット整数

デフォルト

0 (無効)

範囲

0 (無効)、1 (有効)

単位

ブール値

動的か

はい

検査

なし

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

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

安定性レベル

発展中