memmap
C'è questo tutorial intitolato: Bad Memory HowTo che discute di disabilitare la memoria tramite il kernel usando l' memmap
argomento al kernel. Secondo il howto hai 2 opzioni per quanto riguarda memmap
:
- Spegni tutto dopo il brutto ricordo -
(mem=###M option)
- Disattiva solo la memoria attorno alla brutta memoria -
(memmap=#M$###M option)
Con la prima opzione, se memtest segnala che è presente memoria insufficiente a 600M, è possibile disabilitare la RAM da quel punto fino alla fine della RAM con questo:
mem=595M
Se c'è una RAM difettosa su 802M e 807M, puoi disabilitare una sezione di 10M di RAM a partire da 800M in questo modo:
memmap=10M$800M
NOTA: questo inserirà nella blacklist i 10M dopo l'indirizzo base 800M. Dovresti eseguire in memtest86+
seguito per confermare che questo argomento è corretto.
BadRAM
C'è una patch disponibile per Ubuntu chiamata BadRam. È trattato molto bene qui in questo post intitolato: BadRAM sul sito della comunità Ubuntu.
Dopo aver applicato la patch al kernel usando i dettagli di quella pagina si apportano modifiche alla configurazione di Grub2:
estratto da quel sito per Grub2
Il file di configurazione di GRUB2 in Natty ha una linea per la configurazione delle esclusioni di RAM cattive del kernel. Quindi, suppongo che sia il modo preferito di mappare una sezione di memoria che mostra errori. La linea che ho impostato era
GRUB_BADRAM = "0x7DDF0000,0xffffc000"
Il modo suggerito su ogni sito web che ho trovato è stato quello di impostare questo è quello di eseguire memtest86 e lasciarti mostrare le impostazioni di BadRAM. memtest86 mi ha dato una pagina di cose che avrei dovuto inserire. Ho potuto vedere che tutti gli indirizzi erano in un blocco 16K, quindi volevo solo mappare quel blocco 16K fuori azione. Ecco come ho generato la voce corretta.
Il primo parametro è semplice. Questo è l'indirizzo di base della cattiva memoria. Nel mio caso, ho potuto vedere che tutti gli indirizzi errati erano maggiori di 0x7DDF0000 e inferiori a 0x7DDF4000. Quindi, ho preso l'inizio del blocco 16K come indirizzo iniziale.
Il secondo parametro è una maschera. Inserisci 1s dove l'intervallo di indirizzi desiderato condivide gli stessi valori e 0s dove varierà. Ciò significa che è necessario selezionare l'intervallo di indirizzi in modo tale che solo i bit di ordine basso possano variare. Guardando il mio indirizzo, la prima parte della maschera è facile. Vuoi iniziare con 0xffff. Per il prossimo bocconcino, spiegherò con le bit map. Voglio variare da 0000 a 0011. Quindi, la maschera per il badram sarebbe 1100 o un esagono c. Gli ultimi 3 stuzzichini devono essere tutti 0 nella maschera, poiché vogliamo mappare l'intero intervallo. Quindi, otteniamo un risultato totale di 0xffffc000.
Dopo aver impostato questa riga in / etc / default / grub, ho eseguito sudo update-grub e riavviato e la mia memoria difettosa non veniva più utilizzata. Non sono necessarie patch del kernel per mappare la memoria difettosa usando questo metodo.
Follow-up n. 1
Guardando attraverso la pagina di Wikipedia per memtest86 + si afferma come segue:
estratto dalla pagina wikipedia di Memtest86
A partire da Memtest86 2.3 e Memtest86 + 1.60, il programma può generare un elenco di regioni RAM errate nel formato previsto dalla patch BadRAM per il kernel Linux; usando queste informazioni, un sistema Linux può usare in modo affidabile un modulo RAM anche se ha qualche bit difettoso. Grub2 è in grado di fornire queste stesse informazioni a un kernel senza patch, annullando la necessità della patch BadRAM.
Inoltre mi sono imbattuto in questa pagina Gentoo che specificava l' memmap=...
uso di un indirizzo esadecimale, quindi puoi specificarlo in questo modo:
memmap=5M$0x2f796c48
Il 5M è solo un'ipotesi, ovviamente potresti regolarlo più in basso o più in alto a seconda della quantità di RAM in quella regione che vuoi / devi omettere.
Infine puoi anche specificare la dimensione in esadecimale:
memmap=0x10000$0x2f796c48
Ignorerebbe 64 KB a partire dall'indirizzo 0x2f796c48.
Riferimenti