1

数百のコアのクラスターで100kモンテカルロシミュレーションを実行するために、JavaとRMIを使用しています。

私が使用しているアプローチは、RMIプロセスを呼び出し、グリッド上で使用可能な(RMI)プロセスの数でシミュレーションを分割するクライアントアプリを用意することです。

シミュレーションが実行されたら、結果を再集計する必要があります。

私が持っている唯一の制限は、これがすべて500ms未満で発生しなければならないということです。

プロセスは実際には実行されますが、ランダムに、 RMI呼び出しの1つが実行するのにさらに200ミリ秒かかることがあります。

たくさんのログとタイミングをあちこちに追加しましたが、考えられる理由として、すでに破棄しました。

1)余分な時間がかかるシミュレーション2)データ転送(常に機能し、速度低下が確認される場合があり、RMI呼び出しのサブセットでのみ)3)結果を転送し直す(最後のRMI呼び出しからに戻るまでの時間を明確に計ることができますプロセスの終了)

私が測定できない唯一のことは、RMI呼び出しのいずれかが初期化に余分な時間を費やしている場合です(そして正直なところ、私が推測できる唯一のことです)。この理由は、-残念ながら-時計が同期されていないためです:(

クライアントからRMIへの(リモート)参照を保持している場合でも、RMIリモートプロセスがパッシベーション/デタッチ/収集される可能性はありますか?

質問が十分に明確であることを願っています(私はそれがそうではないと確信しています)。

ミルに感謝し、それが十分に明確でない場合は、さらに質問をすることを躊躇しないでください。

よろしく、ジョバンニ

4

2 に答える 2

0

クライアントから RMI リモート プロセスへの (リモート) 参照を保持していても、RMI リモート プロセスがパッシベーション/デタッチ/収集された可能性はありますか?

可能性は低いですが、可能です。RMI リモート プロセスは収集しないでください ( RMI FAQで VM の終了条件が示されているため)。ただし、OS が必要とする場合は、ディスクにページングすることができます。

GC 呼び出しを除外する方法はありますか (JVM TI でモニターを作成する以外に)?

また、一部のプロセッサが結果を返さなかったとしても、アグリゲータからのすべての呼び出しを非同期に送信し、応答をリストに追加し、重要な時間が経過したときに結果を集計するように、コードが構造化されていますか? 各プロセッサは独立したランダムなイベントであり、一部の結果を無視しても安全であると想定しています。そうでない場合は、無視してください。

于 2011-09-07T22:08:25.987 に答える
0

私はついに問題を思いつきました。基本的に、スタブの割り当てが解除されていないこと、および GC がバックグラウンドでトリガーされていないことを確認した後、wireshark を使用して、ネットワークに問題があるかどうかを確認しました。

私が見つけたのは、ランダムにパケットの1つが失われ、データを正しく再転送するためにネットワークで120ミリ秒(41回の再送信)のTCPが必要だったということでした.

jdk7、SDP、および infiniband に切り替えると、この問題は発生しなくなりました。

つまり、基本的に私の質問に対する答えは... パケットが失われました!

投稿に返信してくれた人に感謝します。正しい道に集中するのに役立ちました!

ジオ

于 2011-09-13T15:34:37.330 に答える