nhfsstoneのヘルプ・マニュアル
日本語 英語
nhfsstone --help
man nhfsstone
NHFSSTONE(8) NHFSSTONE(8)
名前
nhfsstone - ネットワークファイルシステムのベンチマークプログラム
書式
nhfsstone [ -v ] [[ -t secs ] | [ -c calls ]] [ -l load ] [ -p nprocs ]
[ -m mixfile ] [ dir ]...
説明
nhfsstone (n-f-s-stone と発音し、"h" は読まない) は NFS クライアント 上
で 人為的な負荷を生成するために使用する。この負荷には、特定の組み合わせ
の NFS 操作が含まれる。このプログラムはサーバーの平均応答時間 (1 回の呼
び 出し当りのミリ秒数) と負荷 (1 秒当りの呼び出し回数) を表示する。この
プログラムは、クライアントのカーネルの NFS 統計と所要時間に基づいて、呼
び出しパターンを調整する。負荷は時間または NFS 呼び出しの数を指定するこ
とで生成できる。
nhfsstone は進捗状況の監視にカーネルの NFS 統計情報を使用するので、 NFS
ファイルシステム以外の性能を計測するのには使えない。
nhfsstone プログラムは、ファイルとディレクトリ操作を使って、特定のシス
テムコールに対応する NFS 操作を生成する。これを行うため、 NFS クライ ア
ン ト側の参照ポートの実装についての知識に基づいた、いくつかのトリックを
使っている。例えば、長いファイル名を使ってカーネルの名前検索キャッシ ュ
を回避させることで、 stat(2) システムコールで NFS lookup 操作を生成する
。
NFS 操作の組み合わせは、組み合わせ (mix) ファイルで設定できる。こ れ は
nfsstat(8C) コマンド (下記の "-m" オプションを参照) の出力である。組み
合わせファイルから取得される割合は、 nfsstat で表示される割合ではなく、
NFS 呼び出しの数に基づいて計算される。組み合わせファイルで 0% となって
いる操作は、 nhfsstone から呼び出されない。実際のサーバーにおける負荷の
組み合わせでは、特定の NFS 操作の割合が 0% になっているかもしれないが、
呼び出し数は 0 でないことが多い。 nhfsstone は「割合が 0% になってい る
操 作の呼び出し数は、サーバーの応答に些細な影響しか与えない」と仮定して
いる。
通常は nhfsstone に対して、使用する 2 つ以上のテストディレクトリのリ ス
トを指定すべきである (デフォルトではカレントディレクトリを使用する)。使
用するテストディレクトリは、典型的なサーバーの負荷を現実的にシミュレ ー
ト するために、サーバー上の別々のディスクとパーティションに置くべきであ
る。各 nhfsstone プロセスはディレクトリ
/testdir を扱う (ここで
は 0 から nprocs - 1 までの数値である)。処理するディレクトリ名が既
に存在する場合、テストファイルのセットが正しいかをチェックする。存在 し
ない場合は、ディレクトリを作成して (訳註: テストファイルを) 配置する。
オプション
-v 詳細な出力。
-t secs 指定した実行時間 (単位: 秒) と負荷に基づいて、 calls を設定
する。
-c calls 生成する NFS 呼び出しの総数 (デフォルトは 5000)。
-l load 1 秒当りの NFS 呼び出しを生成する負荷 (デフォルトは 30)。
-p nprocs 負荷生成を行うサブプロセスを fork させる数 (デフォルトは 7)
。これは 1 つのマシンで生成できる負荷の総量を最大化するため
に使用される。 (CPU が遅い、またはメモリ量が少ない) 小さ な
ク ライアントマシンでは、スワッピングを避けるために、プロセ
ス数を少なくした方が良いかもしれない。
-m mixfile 生成する NFS 操作の組み合わせ。 mixfile のフォーマ ッ ト は
nfsstat(8C) プログラムの出力と同じである。組み合わせファイ
ルは、サーバー上で "nfsstat -s > mixfile" を実行すること で
生 成できる。デフォルトの操作の組み合わせは以下の通り: null
0%, getattr 13%, setattr 1%, root 0%, lookup 34%, readlink
8%, read 22%, wrcache 0%, write 15%, create 2%, remove 1%,
rename 0%, link 0%, symlink 0%, mkdir 0%, rmdir 0%, readdir
3%, fsstat 1%.
NHFSSTONE の使用法
他 の全てのベンチマークと同様に、使用される試験内容を注意深く設定した場
合にのみ、 nhfsstone は有用な数値を提供できる。このプログラムはサーバー
を測定するので、 NFS リクエストの生成に制限がないクライアント上で実行す
べきである。クライアントマシンは、速い CPUと優れたイーサーネットイン タ
フ ェースを備え、テストの最中にその他の用途で使用すべきではない、という
意味である。 Sun-3/50 では、CPU を使いきる前に、1 秒当り 60 NFS 呼び 出
しが可能である。
nhfsstone は「クライアントで生成された全ての NFS 呼び出しが 1 つのサー
バーに対して行われ、全ての NFS 負荷はこのクライアントに依るものである」
と 仮定している。この仮定を維持するため、テストの最中はクライアントとサ
ーバーの両方を出来る限り静かにさせて (他の仕事をさせないで) おくべき で
ある。
ネ ットワークを高負荷で使用していると、衝突による遅れがサーバー性能の変
化を隠してしまうかもしれない。クライアントとサーバーのどちらかでエラ ー
率 が高いと、失われたパケットや壊れたパケットを再送信するために遅れが生
じる可能性がある。 netstat(8C) -i を使ってクライアントとサーバーにお け
るエラー率と衝突率を計測できる。
サーバーに対する NFS クライアントの影響を最も正しくシミュレートするには
、サーバーがエクスポートするテストディレクトリを少なくとも 2 つのディス
ク パーティションに置いて、かつそれらのパーティションを出来る限り離すべ
きである。 dkinfo(8) コマンドを使うと、BSD 系システムにおけるディスクの
物理的ジオメトリが分かる。 NFS 操作ではディスク全体へランダムにアクセス
する傾向があるので、全ての nhfsstone のテストディレクトリを 1 つのパ ー
ティションに置いたり、 2 つのパーティションが近かったりすると、現実的な
結果を示さない。
全てのテストにおいて、テストを繰り返し行って結果を比較するのは、良い 考
えである。呼び出しの数は (-c オプションを使って) 呼び出し一回当りの時間
(ミリ秒) の変化が充分小さくなるまで増やすことができる。呼び出し回数を増
や しても助けにならない (訳註: 何の変化も見られない) 場合、実験の設定に
何か問題があるかもしれない。 1 つの一般的な問題としては、クライアントの
テ ス ト マシンにメモリが多すぎる場合がある。メモリが多すぎると、 nhfs-
stone がクライアントのキャッシュに勝てず、 NFS 操作がサーバーに全く行か
な くなる。キャッシュに問題があると感じた場合は、 -p オプションを使って
プロセス数を増やすことができる。
nhfsstone で生成される数値は、クライアントマシンでのテスト設定を等し く
し て 、 異なるサーバー設定を比較する場合に最も有効である。実行する毎に
nhfsstone のパラメータを変更すると、意味のある比較が出来ない数値が生 成
さ れる。たとえば、負荷を生成するプロセスの数は、クライアントマシンでの
コンテクスト切り替えやその他の遅れにより、計測される応答時間に影響を 与
えるかもしれない。一方、 NFS 操作の組み合わせを変更すると、実験の全体的
な特性を変えることになる。その他のクライアント設定についての変更は、 結
果 が比較できるかに影響を与える可能性がある。 nhfsstone は実際の NFS 統
計をサンプリングして、操作の負荷と組み合わせを調整することで、クライ ア
ン ト設定の違いを補正しようとするが、いくつかの変更は負荷にも組合わせに
も反映されない。例えば、負荷も組み合わせも変更せず、より速い CPU を組み
込んだり、別の NFS ファイルシステムをマウントすると、応答時間に影響が出
るだろう。
異なるサーバー設定を比較する場合、第 1 段階では、クライアントのテストデ
ィレクトリを設定し、 nhfsstone をいくつかの負荷で実行して変動が適度に小
さいことを確かめる。第 2 段階では、興味を持ったいくつかの負荷 で nhfs-
stone を実行し、結果を保存する。第 3 段階では、サーバーの設定を変更する
(メモリを増やす・ディスクコントローラを変更する、など)。最終段階では 、
nhfsstone を同じ負荷で再度実行し、結果を比較する。
関連項目
ソースコード nhfsstone.c には、プログラムの詳細な操作を記述したコメント
が書かれている。
エラーメッセージ
illegal calls value
コマンドラインで指定された -c フラグの後の calls 引き数が正の 数
でない。
illegal load value
コマンドラインで指定された -l フラグの後の load 引き数が正の数で
ない。
illegal time value
コマンドラインで指定された -t フラグの後の time 引き数が正の数で
ない。
bad mix file
コ マンドラインで指定された -m フラグの後の mixfile ファイル引き
数にアクセスできない。
can’t find current directory
親プロセスがカレントディレクトリのパス名を見つけることができない
。権限の問題を表していることが多い。
can’t fork
親プロセスが子プロセスを fork できない。メモリやスワップ空間とい
ったリソースの不足の結果であることが多い。
can’t open log file
can’t stat log
can’t truncate log
can’t write sync file
can’t write log
can’t read log
同期ログファイルの作成・切り詰め・読み込み・書き出しの時に問題が
起こった。親プロセスがログファイルを /tmp に作成し、子プロセスと
の同期や通信に使用する。
can’t open test directory
can’t create test directory
can’t cd to test directory
wrong permissions on test dir
can’t stat testfile
wrong permissions on testfile
can’t create rename file
can’t create subdir
子プロセスがテストディレクトリの内容を作成・検査するときに問題が
起こった。権限の問題 (例えば、テストディレクトリが別のユーザーに
よって作成されている場合) やファイルシステムがいっぱいである場合
が多い。
bad mix format: unexpected EOF after ’nfs:’
bad mix format: can’t find ’calls’ value
bad mix format: unexpected EOF after ’calls’
bad mix format: can’t find %d op values
bad mix format: unexpected EOF
mix ファイルを解析しているときに問題が起こった。このファイルの想
定されるフォーマットは、 nfsstat(8C) コマンドを "-s" オプショ ン
で実行したときの出力と同じである。
op failed:
内部的な疑似 NFS 操作の 1 つが失敗した。操作の名前、例えば read,
write, lookup が、失敗の種類と共に表示される。
select failed
select システムコールが予期せぬエラーを返した。
バグ
nhfsstone を NFS ファイルシステム以外で実行すると、プログラムが永久に動
作し続ける。このプログラムがカーネルの NFS 統計を使って、充分な呼び出し
回数が実行されたかを決定しているためである。
nhfsstone が多くのファイルディスクリプタを使う。クライアントのカーネ ル
を 再設定し、利用可能なファイルテーブルエントリを増やす必要があるかもし
れない。
nhfsstone を使うシェルスクリプトは SIGUSR1 (signal(3) を参照) をキャ ッ
チ して無視する必要がある。このシグナルはテストプロセスを同期するのに使
われる。このプロセスをキャッチしないと、スクリプトを実行しているシェ ル
が kill される。
ファイル
/vmunix システムのネームリスト
/dev/kmem カーネルの仮想メモリ
./testdir* プロセス毎のテストディレクトリ
/tmp/nhfsstone%d プロセスの同期ログファイル
4 October 1989 NHFSSTONE(8)