SimGrid

分散システムのシミュレータに仏INRIAが開発しているSimGridってのがある。メルボルン大のCloudSim(その前にGridSimってのもあった)とは別物。SimGridは大抵のUNIXシステムに対応しているので、OSXでも動くのだが、homebew用のformulaもあったので、サックリ動かすことができた。

ただ、ソースパッケージの中にはサンプルコードもいろいろあるので、ダウンロードしてそっちも眺めてみることを勧める。例えば、examples/msg/sendrecvってのは単純な2プロセス間でのメッセージ送信になる。

$ cmake CMakeLists.txt
$ make

sendrecvという実行ファイルが生成される。以下が実行結果。platform_sendrecv.xmlでホストやネットワークトポロジを定義し、deployment_sendrecv.xmlでプロセスをどのホストでデプロイするか定義する。

$ ./sendrecv platform_sendrecv.xml deployment_sendrecv.xml 
[0.000000] [msg_test/INFO] test_all
[Inmos:sender:(1) 0.000000] [msg_test/INFO] sender
[Inmos:sender:(1) 0.000000] [msg_test/INFO] host = Bellevue
[Inmos:sender:(1) 0.000000] [msg_test/INFO] task_la->data = 0.000000e+00
[Bellevue:receiver:(2) 0.000000] [msg_test/INFO] receiver
[Bellevue:receiver:(2) 1.301011] [msg_test/INFO] Task received : latency task
[Bellevue:receiver:(2) 1.301011] [msg_test/INFO] Communic. time 1.301011e+00
[Bellevue:receiver:(2) 1.301011] [msg_test/INFO] --- la 1.301011 ----
[Inmos:sender:(1) 1.301011] [msg_test/INFO] task_bw->data = 1.301011e+00
[Bellevue:receiver:(2) 1085.076238] [msg_test/INFO] Task received : bandwidth task
[Bellevue:receiver:(2) 1085.076238] [msg_test/INFO] Communic. time 1.083775e+03
[Bellevue:receiver:(2) 1085.076238] [msg_test/INFO] --- bw 922700.551985 ----
[1085.076238] [msg_test/INFO] Total simulation time: 1.085076e+03

platform_sendrecv.xmlの定義では、InmosとBellevueの間の遅延は100ミリ秒なのに、実行結果が1.3秒とはこれ以下に? platform_sendrecv.xmlの遅延を半減したり倍増して再実行してみたけど、やっぱり一桁結果が違う。バンド幅は100Mbpsという定義なので、ほぼあっているけど。

(追記)マニュアルによると、デフォルトのネットワークモデルLV08ではTCP slow startをモデル化するために、遅延が10.4倍になるとかある。うぅ、なぜそんなモデル化になるのか、よくわからん。