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倍になるとかある。うぅ、なぜそんなモデル化になるのか、よくわからん。