Catturato un segnale fatale: Sigbus (7) sul nodo 2/32
Domanda
Sto cercando di eseguire benchmark NAS-UPC su un cluster a 32 nodi.
Funziona bene nei casi in cui la dimensione del problema è piccola. Quando mi laureo a una dimensione del problema più grande (classe D), ricevo questo errore (per MG Benchmark)
*** 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
Qualcuno può spiegare perché questo sta accadendo e se qualcuno ha visto questo errore prima e risolto?
EDIT: ha capito che si tratta di un problema relativo alla memoria. Ma non sono in grado di assegnare la giusta quantità di memoria per l'applicazione al momento della compilazione
Soluzione 2
Ho pensato che fosse un problema con il benchmark che necessitava di più memoria di quanti ne avessi assegnato durante il tempo di compilazione.
Altri suggerimenti
Controlla a dmesg
Output: può essere un problema fuori memoria. O, ancora una volta, può essere un po ' ulimit -a
Colpiti, ad esempio uno stacksize (la dimensione dello stack predefinita è troppo piccola per alcune attività NAS).
Se hai una linea come "fuori memoria: processo ucciso ###" in dmesg
Output su una qualsiasi delle tue macchine - significa che il tuo programma ha richiesto (e ha provato a utilizzare) molta memoria, più grande di quanto il tuo sistema operativo possa dare all'applicazione. Esistono diversi limiti di memoria:
ulimit -v
- Limite dell'utente per la dimensione della memoria virtuale. Seleziona tuttoulimit -a
anche limiti, ma sembra che il tuo caso non sia questo- Puoi usare non più memoria di quanto non abbia una RAM totale e tutte le dimensioni degli scambi (controlla
free
comando). Ma se l'applicazione utilizza più memoria della dimensione della RAM e inizia a scambiare - le prestazioni saranno cattive (nella maggior parte dei casi). - Esistono limiti architettonici della memoria massima, consentito al singolo processo da avere. Per i nodi a 32 bit questo limite può essere da 1 (caso molto raro) a 2, 3, 4 GB. Anche se il tuo sistema a 32 bit ha> 4 GB di memoria, ad esempio con l'uso di PAE - nessun singolo processo può richiedere> 4 GB. Una grande parte dello spazio virtuale da 4 GB assunto anche da OS (da centinaia di MB fino a GBS).