Masterと通信を行い実験を開始する。実験の初期段階としてIPアドレスな どの設定が必要となるが、これらの設定はシナリオの一部として実行される。
他のノードとの協調が必要な場合のみ、Scenario Masterを通じたメッセー ジ交換で他のノードと協調を行う。Scenario SlaveはScenario Masterから MACアドレスとIPアドレスの組を受取り、指定されたMACアドレスを持 つネットワークインターフェースに、指定されたIPアドレスを設定する。そ の他の必要な設定に関しても同様にScenario Masterとの通信にしたがって 実行される。
される。一台は管理ノードであり、残りの2台はそれぞれnetperf のサーバプログ ラムとクライアントプログラムが動作するノードである。
実験記述はノード設定部とシナリオ部に分けられ、ノード設定部にはノードの ネットワークインターフェースの種類や数などのハードウェアに関する条件と、起 動方法や利用するディスクイメージなど導入するソフトウェアに関する情報が記 述される。シナリオ部にはノードのクラス設定部に記述されるノードシナリオと、
ノードシナリオの協調のためにScenario Masterが実行するグローバルシナリオが ある。
シナリオは以下の手順で実行されることとする。
1. server[0]がnetperf のサーバプログラムであるnetseverを起動する。
2. Scenario Masterがserver[0]のIPアドレスをclient[0]に通知する。
3. client[0]がnetperf のクライアントプログラムであるnetperf を起動すること でserver[0]に対するトラフィックを発生させる。
4. netperf による性能試験が終了後、client[0]はScenario Masterに’cdone’とい うメッセージを発行する。
5. Scenario Masterが’cdone’というメッセージを受信すると、server[0]に’quit’
というメッセージを送信する。
6. ’quit’を受信したserver[0]はnetserver を終了する。
図 7.6はこの時の設定ファイルの全容である。ただし、StarBEDに用意されて いるFNCPやERMなどが動作する固定的なサーバに関する設定は別ファイルに 記述されている。netperf のサーバとクライアント用の2つのノードクラスが1行 目から18行目と20行目から32行目に定義されている。最初の定義がサーバ用で、
それに続く定義がクライアント用であり、どちらのクラスに属するノードも1つ のネットワークインターフェースを持つ。それぞれのノードのインスタンスは1台 ずつ生成されている。サーバノードとクライアントノードは直接接続されるため、
一つの実験用ネットワークが34行目から42行目で定義され、ノードのインター フェースは”attach”文により、このネットワーククラスのインスタンスに接続さ
シナリオに関する定義は、“scenario”からはじまる3つのブロックで定義されて いる。最初の2つのシナリオは、ノードクラス中で定義されているが、これはノー ドシナリオであり、最後のシナリオ定義がグローバルシナリオである。ノードシ ナリオは基本的にノードで実行されるコマンドリストであり、グローバルシナリ オはノード間の同期のために利用されるメッセージ制御のためのシナリオである といえる。“recv”はメッセージ受信を待ち、指定された文字列に受け取ったメッ セージを格納する。ノードは受け取ったメッセージにより挙動を変更することが でき、これは10行目などの”msgswitch”で制御される。“wake”と”wakewait”は コマンド実行のために利用されるが、“wake”はコマンドをバックグラウンドプロ セスとして起動し、“wakewait”はフォアグラウンドプロセスとして起動する。ま た、”sync”はグローバルシナリオ中でのみ利用され、指定されたノードからのメッ セージを待つ。図 7.7にメッセージ交換のタイムラインを示す。
1 nodeclass svclass { 2 partition 2 3 ostype "FreeBSD"
4 diskimage "ftp://anonymous:[email protected]/s_image.gz"
5 netif media fastethernet 6 scenario {
7 wake "/sim/netserver" "/sim/netserver"
8 loop { 9 recv x 10 msgswitch x { 11 "quit" {
12 wakewait "/usr/bin/killall" "killall" "netserver"
13 exit 14 } } } } } 15 nodeclass clclass { 16 partition 2 17 ostype "FreeBSD"
18 diskimage "ftp://anonymous:[email protected]/c_image.gz"
19 netif media fastethernet 20 scenario {
21 sleep 6 22 recv dst 23 sleep 24
24 wakewait "/sim/netperf" "/sim/netperf" "-H" dst 25 send "cdone"
26 } }
27 netclass ethclass { 28 media fastethernet
29 ipaddrrange "192.168.3.0/24"
30 }
31 nodeset client class clclass num 1 32 nodeset server class svclass num 1 33
34 netset ethnet class ethclass num 1 35
36 attach server.netif["lan0"] ethnet 37 attach client.netif["lan0"] ethnet 38
39 scenario {
40 send client[0] haddr(server[0].netif[0].ipaddr) 41 sync {
42 msgmatch client[0] "cdone"
43 }
44 send server[0] "quit"
45 exit 46 }
図 7.6: 本実験例での設定ファイル
本実験例の設定ファイルの全容。これだけの設定記述を用意すれば、
ノードへのOS導入を含め、実験シナリオすべてが自動的に実行さ れる。
netperf
traffic
STOP Scenario
Master
Scenario Slave#1 client[0]
Scenario Slave#2 server[0]
<IP addr>
"quit"
"cdone" send
wake
wakewait send
send
wakewait
netperf
killall
netserver
図 7.7: 実験のタイムライン
本実験でのタイムライン。一番左のラインが管理用ノード上のScenario Masterの動作を、中央のラインがnetperf を実行する実験用ノード、
右のラインがnetserverを実行する実験用ノードの動作を表す。