このチュートリアルの目的は、簡単なシミュレーションモデルの作成を通して、OMNeT++ IDEの使い方を理解することである。
OMNet++は、モジュールと呼ばれる再利用可能な要素を組合せてシミュレーションモデルを作成します。複数のモジュール間をつないで合成モジュール(compound module)を作ります。それらを更につないで、多階層の合成モジュールが出来ます。階層はNEDファイルで定義します。
NEDファイルの例として、Project Explorerのpkswitch_net.nedをダブルクリックして下さい。submodulesを見ると、pkswitch_netはホストを4台とルータを2台を組合わせてネットワークを構成しています。また、connectionsを見ると、host[0]とhost[1]がlanlinkでrouter[0]に、host[2]とhost[3]がlanlinkでrouter[1]に、router[0]とrouter[1]がwanlinkでつながっていることが分かります。
更に、host.nedを見ると、ホストは5っのサブモジュールで構成されていることがわかります。これは、GUIウインドのhost[1]のアイコンをダブルクリックした時の表示に一致します。
シンプルモジュールとは、これ以上サブモジュールに分解出来ないモジュールであり、シンプルモジュールの動作はC++で記述されている。modules.nedを見ると、上記5つのモジュールはいずれもシンプルモジュールであることが分かる。シンプルモジュールは、simpleをキーワードとして、合成モジュールはmoduleをキーワードして宣言される。pkswitch_netをシミュレーションするには、networkをキーワードとしてpkswitch_netを宣言する。
NEDファイルは、OMNet++ IDEを使って、テキストモードとグラフィックモードの両方で編集出来ます。Project Explorerウインドからhost.nedをダブルクリックして下さい。中央のウインドにhost.nedが表示されましたが、そのウインドの左下にDesign(グラフィックモード)とSource(テキストモード)のモード切替があります。NEDファイルはモジュールの構造(トポロジ)のみを定義します。モジュールの動作とモジュールのパラメータ値は規定しません。動作は、C++コードがシンプルモジュールに対して規定します。
一方、iniファイルはネットワークの構成を記述します。どんなOMNeT++シミュレーションでも、1つのiniファイルが必要です。このファイルは、NEDネットワークの名前、ネットワークやネットワーク内の要素に必要なパラメータ値を設定します。ネットワーク内のモジュールはパスを使って表現されるので、iniファイルもパスを使ってパラメータを指定します。例えば、host[0]のパラメータdestAddressListは、パスによってpkswitch_net.host[0].destAddressListであらわされる。また、pkswitch_net.**.pkSizeは、パケット長分布を指定するパラメータであり、**は"."を含む全ての文字にマッチすることを表す正規表現(オートマトンで習った?)です。尚、*は"."を含まない全ての文字にマッチする正規表現です。
以下のomnetpp.iniで、[General]や[Config One]は(パラメータや実行時間などの)実行条件の異なるシミュレーションを表しています。[General]はデフォルトのシミュレーション条件であり、[Config
One]で[General]で設定したパラメータ値を上書き(オーバライト)することが可能です。
pkswitch_netモデルでは、シンプルモジュールのC++コードの中で、以下の統計情報を収集します:
以下のapp_sink.hに受信側(sink)で観測するデータの変数が定義されています。Histogramは計測したデータの分布、Vectorは時系列を求めるのための変数です。
データの分布やグラフは次のようにしてアクセス可能です。まず、シンプルモジュールのアイコンをダブルクリックし、contentsタブを選ぶと、その中に収集した統計情報があります。例えば、OMNeT++/Tkenvウインド(GUI)で、Expressを選択し、シミュレーションを最後まで実行後、host[1]をダブルクリックし、その後、app_sinkをダブルクリックして下さい。ウインドが開いたら、Contentsタブを選びます。そこには、上記統計情報の内、5から7の分布が収集されています。pkSizeStatsが5のパケット長分布、hopCountStatsが6のホップ数分布、pkDelayStatsがパケット遅延分布です。例えば、パケット長分布のpkSizeStatsをダブルクリックして下さい。下のようなヒストグラムが表示されます。
vectorファイル(.vec)
とscalarファイル(.sca)です。vectorファイルは(時間、値)の対から成る時系列データです。一方、scalarファイルは統計情報の要約を含んでいます。これらは、通常のテキストファイルで、OMNet++のツールを使って処理することが出来ます。
pkswitch_netモデルでは以下の二つのファイルがシミュレーション実行後に作成されます(シミュレーションが実行されると、古いファイルは消去されます)。One-0.vec
キュー長サイズの時間変化One-0.sca
様々な統計情報。例えば、平均end-to-end遅延、ホストが送信したパケット数と受信したパケット数等。
以下は、app_sink.ccのhandleMessage()関数の中の命令文です。HopCountVector.record()、pkDelayVector.record()を実行すると、One-0.sca
ファイルにデータを書き込みます。
一方、スカラーデータ(One-0.sca
)は、finish()関数(シミュレーションが正常に終了した場合に実行される)のなかで、recordScalar()関数により書き込まれます。以下は、app_sink.ccのfinish()関数の一部です。
ここで、One-0.vec/scaファイルの中味を見てみましょう。
沢山のデータがありますが、ここではapp_sinkモジュールが受信したパケット数をホスト別に比較します。
課題:
One-0.vec
ファイルを使って、host[0]に到着したパケットのEnd-to-end遅延時間の時間変化を表すグラフを作成せよ(ヒント:*.host[0].*とpkDelayVectorをフィルタとして使う)。
レポート提出期限:
2回の実験を1つのレポートとして提出する。2 回目の実験が終了してから1 週間後(つまり、次のテーマの情報工学実験IV が行われる日)の17:00までに、WingNet(学生用ポータルサイトBeNeFITの中の業務支援を選択)
を使って提出して下さい。また、レポートはWord を使って作成して下さい。
WingNet の選択画面(1 班の例)は以下の通り。
注意事項:
表紙:
————————–(表紙)—————————
情報工学実験IV
テーマ名: ネットワーク・シミュレーション
情報工学科3 年 組 班
s0xaxxxx 氏名_____
実施日平成 年 月 日、 月 日
提出日平成 年 月 日
—————————————————————
本文:
その他:
OMNeT++に関する質問、OMNeT++について更に多くを知りたい人は種田研究室(C82)へ。