Оказался смертельный сигнал: SIGBUS (7) на узле 2/32 - PullRequest
0 голосов
/ 22 марта 2011

Я пытаюсь запустить тесты NAS-UPC на кластере из 32 узлов.

Он отлично работает в тех случаях, когда размер проблемы невелик.Когда я перехожу к большему размеру проблемы (КЛАСС D), я получаю эту ошибку (для теста MG)

*** Caught a fatal signal: SIGBUS(7) on node 2/32
 p4_error: latest msg from perror: Bad file descriptor
*** Caught a signal: SIGPIPE(13) on node 0/32
    p4_error: latest msg from perror: Bad file descriptor
   p4_error: latest msg from perror: Bad file descriptor

*** FATAL ERROR: recursion failure in AMMPI_SPMDExit
*** Caught a signal: SIGPIPE(13) on node 27/32
*** Caught a signal: SIGPIPE(13) on node 20/32
*** Caught a signal: SIGPIPE(13) on node 21/32
    p4_error: latest msg from perror: Bad file descriptor
*** FATAL ERROR: recursion failure in AMMPI_SPMDExit
*** FATAL ERROR: recursion failure in AMMPI_SPMDExit
*** FATAL ERROR: recursion failure in AMMPI_SPMDExit
*** Caught a signal: SIGPIPE(13) on node 16/32
*** FATAL ERROR: recursion failure in AMMPI_SPMDExit

Может кто-нибудь объяснить, почему это происходит, и если кто-то видел эту ошибку раньше и исправил ее?

РЕДАКТИРОВАТЬ: понял, что это проблема памяти.Но я не могу выделить нужное количество памяти для приложения во время компиляции

Ответы [ 2 ]

2 голосов
/ 22 марта 2011

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

Если у вас есть строки типа «Out of Memory: Killed process ###» в выводе dmesg на любой из ваших машин - это означает, что вашей программе требовалось (и пыталось использовать) много памяти, больше, чем ваша ОС может дать приложению. Есть несколько ограничений памяти:

  1. ulimit -v - ограничение пользователя на размер виртуальной памяти. Проверьте также все ограничения ulimit -a, но, похоже, ваш случай не такой
  2. Вы можете использовать не больше памяти, чем у вас есть общая память и все размеры подкачки (проверьте с помощью команды free) Но если ваше приложение использует больше памяти, чем объем ОЗУ, и начинает выполнять подкачку - производительность будет плохой (в большинстве случаев).
  3. Существуют архитектурные ограничения максимального объема памяти, допустимые для одного процесса. Для 32-битных узлов этот предел может быть от 1 (очень редкий случай) до 2, 3, 4 ГБ. Даже если ваша 32-битная система имеет> 4 ГБ памяти, например с использованием PAE - ни один процесс не может занять> 4 Гб. Большая часть виртуального пространства 4 ГБ также занята ОС (от сотен МБ до ГБ).
0 голосов
/ 28 марта 2011

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

...