Sun NFS サーバーの調整

第 1 章 NFS の概要

この章では、NFS の特徴、性能調整の行程、NFS の性能を監視するためのサン以外のツールについて簡単に説明します。

NFS の特徴

NFS 環境では、ネットワークを経由して、ローカルファイルと同様に遠隔ファイルにアクセスすることができます。遠隔デバイスのファイルシステムは、ローカルに存在するかのように見えます。クライアントは、mount コマンドやオートマウンタを利用して、遠隔ファイルシステムにアクセスすることができます。

NFS プロトコルは、クライアントからの再試行と障害からの容易な回復を可能にします。クライアントは、サーバーが処理を行うために必要なすべての情報を提供します。サーバーで受信が確認されるまで、または再試行が時間切れになるまで、要求を繰り返し送信します。データが不揮発性の記憶装置にフラッシュされると、サーバーから書き込みの確認があります。

マルチスレッド方式のカーネルでは、nfsd プロセスや非同期ブロック入出力デーモン (biod) プロセスを複数管理する必要がありません。どちらのプロセスも、オペレーティングシステムのカーネルのデーモンとして実現されています。このため、クライアント側に biod は存在せず、サーバー側に nfsd プロセスが 1 つ存在します。

NFS トラフィックは、突発性を持っています。NFS 要求は突然発生して、通常、その種類も多岐にわたります。NFS サーバーは、このような NFS ファイルサービス要求に対処する必要があります。要求は広範囲にわたりますが、通常の運用では、そうした要求は比較的予測可能なものです。

ローカル、遠隔に関わらす、アプリケーションからの要求の多くは、以下のように処理されます。

  1. アプリケーションバイナリの必要部分が読み込まれ、コードページが実行され、処理するデータセットを指定するためのユーザーダイアログが表示されます。

  2. アプリケーションによって、指定データセットがディスク (ほとんどの場合は遠隔ディスク) から読み取られます。

  3. ユーザーとアプリケーションとの対話が可能になり、メモリー上のデータが操作されます。 アプリケーションの実行の大部分は、この対話に費やされます。

  4. 変更を加えられたデータセットがディスクに保存されます。


注 -

通常は、上記の処理が進むにつれて、アプリケーションバイナリのより多くの部分が読み込まれます (ページイン) 。


NFS バージョン 2 と 3 について

Solaris 2.5 から 7 までのソフトウェア環境では、NFS のバージョン 2 と 3 の両方が提供されます。NFS バージョン 3 は、Solaris 2.5 以降のソフトウェア環境で新たに追加されたものです。

NFS のバージョン 2 とバージョン 3 のどちらを使用するかについて、NFC クライアントとサーバーはネゴシエーションを行います。サーバーが NFS バージョン 3 をサポートする場合は、バージョン 3 がデフォルトで使用されます。デフォルトで使用される NFS バージョンを変更するには、vers= マウントオプションを変更します。

NFS バージョン 2 とバージョン 3 は、同じ方法で調整することができます。

NFS バージョン 3 の機能と特長

NFS バージョン 3 には、性能の改善とサーバーの負荷軽減、ネットワークトラフィック量の軽減を実現するための機能がいくつか含まれています。NFS バージョン 3 では、入出力書き込みが高速化されており、ネットワークを介した処理が減っているため、ネットワーク使用時の効率性を向上させることができます。スループットが大きくなるにしたがって、ネットワークが混雑する (ビジー状態になる) 場合があります。

NFS バージョン 3 は、バージョン 2 の状態を持たない (stateless) サーバーの設計と、単純な障害回復機能を継承しながら、協調するプロトコルによる分散型ファイルサービスを構築する手法をとっています。

NFS バージョン 2 およびバージョン 3 の主な機能と特長を、以下に示します。

表 1-1 NFS 操作

操作 

バージョン 2 の機能 

バージョン 3 での変更点 

create

ファイルシステムノードを作成します。ファイルまたはシンボリックリンクのどちらでも作成できます。 

なし 

statfs

動的にファイルシステム情報を取得します。 

fsstat に置き換え 

getattr

ファイルタイプやサイズ、アクセス権、アクセス時間などのファイル、ディレクトリ属性を取得します。 

なし 

link

リモートファイルシステムにハードリンクを作成します。 

なし 

lookup

ディレクトリからファイルを探し、ファイルハンドルを返します。 

なし 

mkdir

ディレクトリを作成します。 

なし 

null

何もしません。サーバーからの応答の検査とタイミング調整に使用します。 

なし 

read

8 KB のデータブロックを読み出します (32 KB データブロック)。TCP では 64 KB まで可能です 

データブロックは最大 4 GB 

readdir

ディレクトリエントリを読み出します。 

なし 

readlink

サーバーに作成されているシンボリックリンクに従います。 

なし 

rename

ファイルのディレクトリ名エントリを変更します。 

Nなし 

remove

ファイルシステムノードを削除します。 

なし 

rmdir

ディレクトリを削除します。 

なし 

root

リモートファイルシステムのルートを読み出します (現在は不使用) 。 

削除 

setattr

ファイル、ディレクトリ属性を変更します。 

なし 

symlink

リモートファイルシステムにシンボリックリンクを作成します。 

なし 

wrcache

リモートキャッシュに 8KB のデータブロックを書き出します (現在は不使用) 。 

削除 

write

8KB のデータブロックを書き込みます (32 KB データブロック)。TCP では 64 KB まで可能です。 

データブロックは最大 4 GB 

NFS バージョン 3 の新機能を、以下に示します

表 1-2 NFS バージョン 3 の新機能

バージョン 3 での操作 

機能 

access

アクセス権の確認 

mknod

特殊デバイスの作成 

readdir

ディレクトリからの読み込み 

readdirplus

ディレクトリからの拡張読み込み 

fsinfo

ファイルシステムの静的な情報の取得 

pathconf

POSIX 情報の取得 

commit

正常な記憶装置にキャッシュされたサーバー上のデータの確認 

バージョン 3 での変更点

root および writecache は削除されました。mknod は、特殊ファイルの作成が許可されるように定義されまました。このため、create のオーバーロードは排除されます。 クライアント上でのキャッシュは、バージョン 3 でも定義や命令はできません。バージョン 3 には、クライアントが効率的にキャッシュを管理するためのキャッシュの実装についての情報が追加されました。

ファイルやディレクトリの属性に影響を与える操作では、属性キャッシュの検証で使用された後続の getattr を最適化する操作が完了した後、新しい属性を返すようになります。また、目的のオブジェクトが隣接するディレクトリに変更を加える操作は、検証中にクライアントがより効率的なキャッシュを実装できるように、ディレクトリの古い属性と新しい属性を返します。

access は、サーバー上でのアクセス権の確認をする機能です。fsstat は、ファイルシステムとサーバーの静的な情報を返す機能です。readdirplus は、ディレクトリエントリに加え、ファイルハンドルや属性を返す機能です。pathconf は、ファイルに関する POSIX pathconf 情報を返す機能です。

64 ビットファイルサイズ

NFS プロトコルのバージョン 3 では、64 ビットサイズのファイルを扱うことができます。バージョン 2 では、ファイルサイズは 32 ビット (4 GB 以下) である必要がありました。

大きなファイル (64 ビット) を扱うには、クライアント、サーバー、オペレーティングシステムが 64 ビットファイルに対応している必要があります。クライアントの実装状態が 32 ビットファイルのみに対応している場合は、サーバーが 64 ビットファイルに対応している場合でも、クライアントは 64 ビットファイルを扱うことはできません。また、クライアントが 64 ビットファイルに対応していて、サーバーが 32 ビットファイルのみに対応している場合においても、クライアントは 32 ビットファイルのみを扱うことができます。Solaris 7 操作環境は、このプロトコルの機能を最初に利用する Solaris リリースです。Solaris 7 より前の操作環境では、64 ビットファイルを扱うことはできません。

Solaris 2.6 および Solaris 7 操作環境における UNIX ファイルシステムの制限は、1 TB (40 ビット) です。

非同期書き込み (async write)

NFS バージョン 3 では、オプションで非同期書き込み機能を利用することができます。NFS バージョン 3 クライアントは、サーバーに非同期書き込み要求を送信し、サーバーは、データを受信したことを通知します。ただし、このときサーバーは、応答する前に安定した記憶装置にデータを書き込む必要はありません。書き込みをスケジュールするか、複数の書き込み要求がまとまるのを待つことができます。

クライアントは、サーバーが書き込みを完了できない場合に備えて、データのコピーを保持します。クライアントは、コピーを解放する場合に、COMMIT 操作によりサーバーに通知します。サーバーは、データを安定した記憶装置に書き込んだ後で、肯定応答を返します。これ以外の場合はエラーが返されるため、クライアントはデータを同期モードで再送します。

非同期書き込みによって、サーバーはデータの同期をとる最善の方法を決めることができます。データは、COMMIT が着く前に同期がとられる可能性が非常に高くなります。NFS バージョン 2 と比較して、バッファリング処理の効率性が増し、並列処理の度合いが高まります

NFS バージョン 2 では、データが安定した記憶装置に書き込まれるまで、サーバーは書き込み要求に応答しません。ただし、サーバーが要求に応答する前に、複数の書き込み要求をまとめることによって、複数の並行要求を発行することができます。

属性付きディレクトリの読み取り

NFS バージョン 3 では、READDIRPLUS と呼ばれる操作があります。たとえば、ls や ls -l などの、大部分の READDIR が READDIRPLUS コールとして発行されます。バージョン 3 で ls -l コマンドを実行すると、ディレクトリ内の名前リストと共に、ファイルハンドルと属性が返されます。バージョン 2 では、名前が最初に返され、ファイルハンドルと属性を取得するには、続いてサーバーを呼び出す必要があります。

バージョン 3 の READDIRPLUS 操作の利点は、ファイルごとに GETATTR 要求を送信する必要がないため時間が短縮され、ls と ls -l の速度が同程度になることです。

弱いキャッシュの一貫性維持

ほとんどの NFS バージョン 2 クライアントは、ファイルとディレクトリのデータをキャッシュして性能向上を図っています。ただし、このバージョン 2 の方法は、複数のクライアントが同じデータを共有してキャッシュする際に、正しく動作しない場合があります。

弱いキャッシュの一貫性維持により、クライアントは、前回アクセスしてから、次に要求を出すまでの間に、別のクライアントによってデータが変更さたかどうかを検出することができます。これは、応答と一緒にサーバーに前回の属性を送り返させることによって実現します。これにより、クライアントは、実際の前回の属性と自分がもっている属性を比較し、違いを検出することができます。

性能調整の行程

性能調整の流れ図を以下に示します。

図 1-1 性能調整の流れ

Graphic

NFS の性能を監視するためのサン以外のツール

NFS ネットワークに使用可能なサン以外のツールを、以下に示します。

SharpShooter (Version 3) は、NFS プロトコルのバージョン 3 に対応しています。