Как лучше всего избежать перегрузки параллельной файловой системы при выполнении невероятно параллельных заданий?

У нас есть проблема, которая до неловкости параллельна - мы запускаем большое количество экземпляров одной программы с разными наборами данных для каждого; мы делаем это, просто отправляя приложение много раз в пакетную очередь с разными параметрами каждый раз.

Однако при большом количестве заданий не все из них завершаются. Не похоже, что проблема в очереди - все задания запущены.

Проблема заключается в том, что при большом количестве запущенных экземпляров приложения множество заданий завершается примерно в одно и то же время и, таким образом, все пытаются записать свои данные в параллельную файловую систему примерно в одно и то же время. .

Проблема, по-видимому, в том, что либо программа не может писать в файловую систему и каким-то образом дает сбой, либо просто сидит в ожидании записи, а система пакетной очереди убивает задание после того, как оно слишком долго сидело в ожидании . (Из того, что я собрал по проблеме, большинство невыполненных работ, если не все, не оставляйте файлы ядра)

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

Хотя у меня есть исходный код для программы, мы Я бы хотел решить проблему без необходимости изменять это, если это возможно, поскольку мы не поддерживаем и не разрабатываем ее (плюс большинство комментариев на итальянском языке).

У меня были некоторые мысли по этому поводу:

  1. Каждый задание сначала записать на локальный (рабочий) диск узла. Затем мы можем запустить другое задание, которое время от времени проверяет, какие задания завершены, и перемещает файлы с локальных дисков в параллельную файловую систему.
  2. Используйте оболочку MPI для программы в системе ведущий / ведомый, где мастер управляет очередью заданий и передает их каждому подчиненному; и подчиненная оболочка запускает приложения и перехватывает исключение (могу ли я сделать это надежно для тайм-аута файловой системы в C ++ или, возможно, Java?), и отправляет сообщение мастеру, чтобы повторно запустить задание

В тем временем мне нужно приставать к моим руководителям, чтобы получить дополнительную информацию о самой ошибке - я никогда не сталкивался с ней лично, но мне не приходилось использовать программу для очень большого количества наборов данных (пока).

В если это полезно: мы запускаем Solaris в нашей системе HPC с системой пакетной очереди SGE (Sun GridEngine). Файловая система - NFS4, а серверы хранения также работают под управлением Solaris. Узлы HPC и серверы хранения обмениваются данными по оптоволоконным каналам.

7
задан Joseph Earl 11 April 2011 в 20:18
поделиться