GNU/Linux >> Linux Esercitazione >  >> Linux

Linux può ripulire la memoria?

Questa è in realtà una cattiva idea. La memoria non può essere testata in modo affidabile in una rapida scansione. Questo è il motivo per cui software come memtest86 utilizza più passaggi con schemi di bit diversi per testare la memoria. Soluzione:

  1. Testa la memoria con memtest86, preferibilmente test lungo, lascialo in esecuzione durante la notte, ci vorrà molto tempo.

  2. Se viene rilevata una cattiva memoria, usa memmap parametro del kernel per forzare il kernel a non usare quella memoria:

   memmap=nn[KMG]$ss[KMG]
            [KNL,ACPI] Mark specific memory as reserved.
            Region of memory to be used, from ss to ss+nn.
            Example: Exclude memory from 0x18690000-0x1869ffff
                     memmap=64K$0x18690000
                     or
                     memmap=0x10000$0x18690000

Inoltre, puoi utilizzare la memoria ECC che correggerà gli errori a 1 bit e rileverà automaticamente gli errori a 2 bit nella tua memoria (e riceverai messaggi di registro dal kernel su problemi di memoria non correggibili se si verificano)


Il post e la risposta fraintendono il problema. Lo scrubbing della memoria ha lo scopo di evitare che gli errori a bit singolo correggibili si trasformino in errori doppi non correggibili. Lo scrubber si limita a tutta la memoria fisica (costringendo i fallimenti della cache a farlo) occasionalmente. Se sono presenti errori di un singolo bit, verranno corretti (e la correzione deve riscrivere il valore corretto utilizzando un confronto e scambio), eliminando così l'errore.

Altrimenti, se si verifica un secondo errore in una parola che ha già un errore, l'intera parola non sarà correggibile e il sistema operativo dovrà fare qualcosa di drastico.

Lo scrubbing è importante perché senza di esso, la memoria che viene letta ma non scritta (come le code page) può accumulare errori nel tempo.


La risposta è sì, e viene eseguita in modo trasparente (a condizione che tu disponga di memoria ECC per rilevare gli errori e che la tua versione del kernel sia almeno 2.6.30 per continuare a funzionare in sicurezza).

Fondamentalmente, la tua memoria viene controllata ad ogni lettura dal processore e ripulita periodicamente*, per verificare la coerenza con i codici di correzione degli errori (ECC). Se si verifica un errore, ricevi un'eccezione di controllo della macchina, che viene quindi registrata e acquisita da mcelog (http://www.mcelog.org/).

Se il tuo errore è stato correggibile, incrementa un contatore "leaky bucket", che fa sì che un DIMM fisico che fallisce troppo spesso venga sostituito in modo trasparente da un altro. Pertanto la tua pagina di memoria viene copiata in una nuova posizione, il tuo indirizzo di memoria virtuale viene aggiornato per puntare alla nuova pagina e la vecchia pagina viene contrassegnata dal sistema operativo come non più utilizzata.

Questo si chiama "soft-offline" su Linux (e il ritiro della pagina di memoria su Solaris, non conosco altri sistemi operativi).

Tuttavia, se il tuo errore non è stato correggibile, si verifica ciò che viene chiamato "hard-offline", ovvero la tua pagina di memoria viene rimossa dalla normale gestione della memoria del sistema operativo e la tua applicazione viene uccisa (NB:da un segnale SIGBUS rilevabile che ti dice dove l'errore si è verificato, ma è abbastanza raro che non se ne preoccupi e cerchi di rilevarlo). Se la tua pagina di memoria è mappata da un file e pulita, il sistema operativo può anche ricaricarla in modo trasparente in un'altra posizione fisica invece di interrompere il processo.

Puoi leggere di più su mcelog, ci sono molte opzioni di configurazione, puoi attivare altri comportamenti, opzioni e altri indizi su cosa leggere e come assicurarti che mcelog sia in esecuzione sul tuo sistema.

* Lo scrubbing, o "Patrol Scrubbing" consiste nel leggere la memoria, confrontarla con ECC per errori e sovrascrivere con le parole di memoria corrette quando viene scoperto un errore. Il termine scrubbing di pattuglia viene utilizzato in opposizione alla sovrascrittura di dati errati sugli errori nelle letture della memoria, che a volte viene chiamato "Demand Scrubbing". Lo scrubbing è una procedura hardware che può essere abilitata, solitamente tramite il BIOS.


Linux
  1. Come posso collegare simbolicamente un file in Linux?

  2. L'allocazione della memoria in Linux non è bloccante?

  3. Come posso osservare la larghezza di banda della memoria?

  4. Scarica la memoria di un processo Linux su file

  5. Come ricevo la notifica degli errori ECC in Linux?

13 modi in cui puoi aiutare Linux

Come cancellare la memoria di scambio in Linux

Killer di memoria insufficiente di Linux

Esempi di comandi gratuiti in Linux

I contenitori Windows possono essere ospitati su Linux?

Segmentazione della memoria di Linux