Случайные задержки Java RMI в приложении HPC - PullRequest
1 голос
/ 08 сентября 2011

Я использую Java и RMI для выполнения 100k симуляций Монте-Карло на кластере из сотен ядер.

Я использую подход, чтобы иметь клиентское приложение, которое вызывает процессы RMI и разделяет симуляциина количество доступных (RMI) процессов в сетке.

После того, как симуляции были запущены, я должен повторно объединить результаты.

Единственное ограничение, которое у меня есть, это то, что все это должно произойтименее чем за 500 мс.

Процесс фактически выполняется НО случайным образом, время от времени одному из вызовов RMI требуется еще 200 мсек.

I 'мы добавили множество журналов и таймингов повсюду и в качестве возможной причины, которую я уже отбросил:

1) Симуляции, занимающие дополнительное время 2) Передача данных (это работает постоянно, только иногда проверяется замедление, итолько для подмножества вызовов RMI) 3) Передача результатов обратно (я могу четко определить, сколько времени от последних вызовов RMI вернется к концу процесса)

ЕдинственноеЯ не могу измерить, если какой-либо вызов RMI требует дополнительного времени для инициализации (и, честно говоря, это единственное, что я могу предположить).Причина этого в том, что, к сожалению, часы не синхронизированы: (

Возможно ли, что удаленный процесс RMI был пассивирован / отсоединен / собран, даже если я сохранил (удаленную) ссылку на него от клиента?

Надеюсь, вопрос достаточно ясен (я почти уверен, что это не так).

Спасибо большое и не стесняйтесь задавать больше вопросов, если он недостаточно ясен.

С уважением, Джованни

Ответы [ 2 ]

0 голосов
/ 13 сентября 2011

Я наконец-то придумал проблему. По сути, убедившись, что заглушка не освобождается и GC не был запущен за кулисами, я использовал wireshark для выяснения, есть ли какие-либо проблемы с сетью.

Что я обнаружил, так это то, что случайным образом один из пакетов был потерян, и TCP требовался в нашей сети 120 мс (41 повторная передача) для правильной повторной передачи данных.

При переключении на jdk7, SDP и infiniband проблема больше не возникала.

Так что в основном ответ на мой вопрос был ... УТЕРЯННЫЙ ПАКЕТ!

Спасибо, кто ответил на пост, это помогло сосредоточиться на правильном пути!

Gio

0 голосов
/ 08 сентября 2011

Возможно ли, что удаленный процесс RMI был пассивирован / отсоединен / собран, даже если я сохранил (удаленную) ссылку на него от клиента?

Маловероятно, но возможно. Удаленный процесс RMI не должен собираться (как указано в RMI FAQ для условий выхода из ВМ). Тем не менее, при желании операционной системы его можно перенести на диск.

Есть ли у вас способ исключить вызовы GC (кроме написания монитора с JVM TI)?

Кроме того, ваш код структурирован таким образом, что вы отправляете все вызовы из агрегатора асинхронно, добавляете ответы в список и агрегируете результаты, когда критическое время истекло, даже если некоторые процессоры не возвращенные результаты? Я предполагаю, что каждый процессор является независимым случайным событием и что некоторые результаты можно игнорировать. Если нет, не обращайте внимания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...