Come inserire nella blacklist un settore RAM difettoso corretto in base all'indicazione di errore MemTest86 +?


28

MemTest86 + (la versione inclusa con Ubuntu 13.04) dice

Failing address: 002f796c48 -    759.5 MB

Cosa devo specificare nel memmapparametro kernel per bypassare quest'area?

Ho provato a correre memtester 770MBe dice che tutto è ok, quindi non sembra che le indicazioni del MemTest significhino un errore nei 759.5 ° MB dall'inizio.

Come interpretare questa indicazione MemTest da configurare memmap?

Non ho soldi per acquistare nuova RAM ora e l'errore sembra essere singolo, quindi spero di poterlo solo ignorare.


FWIW, il kernel contrassegnerà alcune pagine come "riservate" se rileva un segmento danneggiato ma è in grado di recuperare. L'output di "free -m" mostra i poteri di due per i totali? Cito questo come un modo per spiegare perché memtester non può vedere la RAM difettosa ma memtest86 + può.
Bratchley

Non sembra un potere di due attivamente
Ivan

Quando viene rilevato un errore (se hai anche ecc ram), è generalmente troppo tardi. Inoltre, free -m non riporta mai una potenza pari a due poiché il bios e il kernel riservano entrambi un po 'di RAM.
psusi

1
Sogno di acquistare un laptop ECC ma non riesco mai a trovare offerte disponibili, sembra che non esistano.
Ivan

Sembra che anche il kernel stia stampando quando trova una pagina cattiva (riga 264-265).
Bratchley

Risposte:


26

memmap

C'è questo tutorial intitolato: Bad Memory HowTo che discute di disabilitare la memoria tramite il kernel usando l' memmapargomento 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


"800M a 804M" dovrebbe essere "800M a 810M" Suppongo ...
Hauke ​​Laging,

Può essere, ma anche quello che ho scritto va bene, anche se sta gettando via più memoria rispetto ai 4M tra 800M e 810M.
slm

1
1. Conosco l' memmapopzione, ma la domanda è più su come interpretare l'output memtest86 +. Ho fornito un esempio specifico di memtest86 + output e chiedo aiuto per la configurazione di memmap conseguenza in questo caso particolare. 2. "Dovresti eseguire memtest86 + in seguito per confermare che questo argomento è corretto." - memtest86 + viene eseguito prima di un kernel del sistema operativo, quindi dubito seriamente che l' memmapopzione del kernel Linux possa influenzarlo.
Ivan,

@Ivan, 1. Ho pensato che fosse ovvio dati gli esempi che ho incluso, ma avresti bisogno di dire qualcosa del genere: memmap=5M$759Mper il tuo caso particolare, dato memtest86 + non riesce a 759,5 MB. 2. Volevo dire che dovresti passare anche l' memmap=...opzione a memtest86 +. Questo non è stato testato / non confermato da me, ma qualcosa che potresti essere in grado di fare con memtest86 +.
slm

1
Ok grazie. Non ero sicuro di cosa significhi "002f796c48 - 759,5 MB" (forse potrebbero essere 759,5 mega dopo l'indirizzo 002f796c48 o qualcosa del genere) e non ho mai sospettato di poter passare i parametri del kernel Linux a MemTest86 + (pensavo che non fosse nulla da fare con Linux).
Ivan,

14

Memtest86 + (ho usato 4.20) può produrre direttamente un formato badram.

  1. Premi 'c' per accedere al dialogo di configurazione finestra di dialogo di configurazione memtest

  2. Quindi "4" per "Modalità di segnalazione errori"

    finestra di dialogo della modalità di segnalazione errori memtest

  3. Quindi '3' per "BadRAM Patterns"

L'output cambierà da un elenco di singoli test falliti a una serie di linee badram =, ognuna contenente un altro nuovo settore danneggiato. Poiché le linee aggiungono e fondono segmenti adiacenti, puoi semplicemente eseguire il test senza testa durante la notte e utilizzare la linea finale stampata (anche se se hai un dimmer davvero cattivo, il formato "5 megs attorno a questo punto" meno accurato sarà probabilmente un po 'più breve ).

Risultato finale:

Memtest86 + mostra l'output di badram


4
Ora, se non dovessi copiarlo manualmente e invece consegnarlo a GRUB senza errori di riscrittura, sarebbe fantastico.
Ehtesh Choudhury,

8
Quello che ho fatto è stato scattare una foto (telefono con fotocamera), caricarlo in GIMP, => scala di grigi => invert => contrasto / gamma, quindi passarlo a tesseract ${IMG} stdout.. quindi verificare e correggere la linea prima di inserirla in / etc / default / grub ... Probabilmente ci è voluto tanto quanto l'inserimento manuale immediato ^^
eMPee584

3
Sicuramente più divertente che farlo manualmente però
volare pecore il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.