シミュレーションが1 master
と7 workers
を持っています。労働者がデータを実行するために終了すると、それらの実行の完了についてmaster
へdsend
messageTasks
。SimGrid。非同期通信と失敗のリンク
getHost().setProperty("busy", "no");
ReleaseTask releaseTask = new ReleaseTask(getHost().getName());
releaseTask.dsend("Master");
リンクはworker1
を接続し、master
が壊れています。それはlink1.failファイルです。
PERIODICITY 2
0 1
1 0
私は一つだけreleaseTask
(worker1からは)master
に到達できないことを期待。しかし残念ながら、releaseTasks
(他の労働者からのもの)はmaster
を達成しません。このエラーは、警告が表示されます。
[13.059397] /builds/workspace/SimGrid-Multi/build_mode/Debug/node/simgrid-ubuntu-trusty-64/build/SimGrid-3.13/src/simix/smx_global.cpp:554: [simix_kernel/CRITICAL] Oops ! Deadlock or code not perfectly clean.
[13.059397] [simix_kernel/INFO] 16 processes are still running, waiting for something.
マスターは、このような方法でtask
を受け取る:
Task listenTask = Task.receive("Master");
リンクがworker1
接続し、master
が壊れていない、すべてのシミュレーションが正常に動作します。
どのように私はこの問題を回避することができますか?
UPDATED
マイplatform.xml
ファイル:
<link id="0_11" state_file="linkfailures/0_11.fail" bandwidth="3.430125Bps" latency="4.669142ms"/>
0_11.fail
ファイル:
PERIODICITY 2
0 1
1 0
ワーカーは6.94秒でマスターするdsend
MessageTask
に開始します。 MessageTask
送信時間は0.07秒です。しかし、7.00秒で。マスターとワーカーを結ぶリンクが壊れ始める。私はマスターが時代を超越した "受信"データを続け、エラーが発生したと思います。しかし、それをどのように処理するのですか?