Come inserire nella blacklist un settore RAM danneggiato corretto in base allindicazione di errore MemTest86 +?

MemTest86 + (la versione inclusa con Ubuntu 13.04) dice

Failing address: 002f796c48 - 759.5 MB 

Cosa dovrei specificare nel parametro del kernel memmap di bypassare questarea?

Ho “provato a eseguire memtester 770MB e dice tutto è ok quindi “non sembra che le indicazioni del MemTest” significhino un errore nel 759,5 MB dallinizio.

Come interpretare questa indicazione MemTest per configurare memmap?

Non ho soldi per acquistare nuova RAM ora e lerrore sembra essere singolo, quindi spero di poterlo ignorare.

Commenti

  • FWIW, il kernel contrassegnerà alcune pagine come ” riservate ” se rileva un segmento danneggiato ma è in grado di recuperare. Loutput di ” free -m ” mostra potenze di due per i totali? Lo menziono come modo di spiegare perché memtester può t vedere la RAM difettosa, ma memtest86 + può.
  • ‘ non sembra poteri di due effettivamente: i.stack.imgur.com/l86L1.png
  • Quando viene rilevato un errore (se hai anche ecc ram), generalmente è troppo tardi. Inoltre free -m non riporta mai una potenza pari a due in quanto il bios e il kernel riservano entrambi un po di RAM.
  • Sogno di acquistare un laptop ECC ma non riesco mai a trovare alcuna offerta disponibile, sembra che non siano = “3a2c73cbe2”>

non esiste.

  • Sembra che anche il kernel printk ‘ s quando trova una pagina non valida (riga 264-265).
  • Rispondi

    memmap

    Cè questo tutorial intitolato: Bad Memory HowTo che discute la disabilitazione della memoria tramite il kernel utilizzando memmap argomento del kernel. Secondo la guida hai 2 opzioni quando si tratta di memmap:

    • Spegni tutto dopo la cattiva memoria – (mem=###M option)
    • Disattiva solo la memoria attorno alla memoria danneggiata – (memmap=#M$###M option)

    Con la prima opzione, se memtest segnala che cè una cattiva memoria a 600 M, puoi disabilitare la RAM da quel punto fino alla fine della RAM con questo:

     mem=595M 

    Se cè ” s pessima RAM a 802 M e 807 M, puoi disabilitare una sezione di 10 M di RAM a partire da 800 M in questo modo:

    memmap=10M$800M 

    NOTA: Questo inserirà nella lista nera i 10 M dopo lindirizzo di base di 800 M. Dovresti eseguire memtest86+ in seguito per confermare che questo argomento è corretto.

    BadRAM

    È disponibile una patch per Ubuntu chiamata BadRam. È trattata molto bene qui in questo post intitolato: BadRAM nella comunità Ubuntu site.

    Dopo aver applicato la patch al kernel utilizzando i dettagli di quella pagina, apporti modifiche alla configurazione di Grub2:

    estratto da quel sito per Grub2

    Il file di configurazione GRUB2 in Natty ha una riga per configurare le esclusioni di ram danneggiate del kernel. Quindi, presumo che sia il modo preferito per 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 era di impostare questo era eseguire memtest86 e lasciare che ti mostri il Impostazioni BadRAM. memtest86 mi ha dato una pagina di cose che avrei dovuto inserire. Potevo vedere che tutti gli indirizzi erano in un blocco da 16K, quindi volevo solo mappare quel blocco da 16K fuori dallazione. Ecco come ho generato la voce corretta.

    Il primo parametro è facile. Questo è lindirizzo di base della cattiva memoria. Nel mio caso, ho potuto vedere che tutti gli indirizzi errati erano maggiori di 0x7DDF0000 e minori di 0x7DDF4000. Quindi, ho preso linizio del blocco da 16 KB come indirizzo di partenza.

    Il secondo parametro è una maschera. Metti 1 dove lintervallo di indirizzi che desideri condivide gli stessi valori e 0 dove varierà. Ciò significa che è necessario scegliere lintervallo di indirizzi in modo tale che solo i bit di ordine inferiore variano. Guardando il mio indirizzo, la prima parte della maschera è facile. Vuoi iniziare con 0xffff. Per il prossimo bocconcino, spiegherò con le bitmap. Voglio variare da 0000 a 0011. Quindi, la maschera per badram sarebbe 1100 o esadecimale c. Gli ultimi 3 nibble devono essere tutti 0 nella maschera, poiché vogliamo che lintero intervallo sia mappato. 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 cattiva memoria non veniva più utilizzata. Non sono necessarie patch del kernel per mappare la memoria danneggiata utilizzando questo metodo.

    Follow up n. 1

    Guardando la pagina di wikipedia per memtest86 + si afferma quanto segue:

    estratto dalla pagina di wikipedia Memtest86

    A partire da Memtest86 2.3 e Memtest86 + 1.60, il programma può produrre un elenco di regioni RAM danneggiate nel formato previsto dalla patch BadRAM per il kernel Linux; utilizzando queste informazioni, un sistema Linux può utilizzare in modo affidabile un modulo RAM anche se ha alcuni bit difettosi. Grub2 è in grado di fornire queste stesse informazioni a un kernel senza patch, annullando la necessità della patch BadRAM.

    Inoltre mi sono imbattuto in questo pagina Gentoo che specificava memmap=... utilizzando un indirizzo esadecimale, quindi puoi specificarlo in questo modo:

    memmap=5M$0x2f796c48 

    Il 5M è solo una supposizione, ovviamente potresti regolarlo più in basso o più in alto a seconda di quanta RAM intorno a quella regione vuoi / devi omettere.

    Infine puoi anche specificare la dimensione in esadecimale:

    memmap=0x10000$0x2f796c48 

    Ignorerebbe 64 KB “a partire dallindirizzo 0x2f796c48.

    Riferimenti

    Commenti

    • ” 800 M a 804 M ” dovrebbe essere ” 800 M a 810 M ” I supponi …
    • Può essere, ma anche quello che ho scritto va bene, anche se ‘ sta buttando via più memoria dei 4M tra 800M e 810M.
    • 1. Conosco lopzione memmap ma la domanda è più su come interpretare loutput di memtest86 +. Ho fornito un esempio specifico di output di memtest86 + e chiedo per assistenza nella configurazione di memmap di 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 lopzione memmap del kernel Linux può influire su di esso.
    • @Ivan, 1. Ho pensato che fosse ovvio visti gli esempi che ho incluso, ma tu ‘ d devo dire qualcosa come: memmap=5M$759M per il tuo caso particolare, dato che memtest86 + non riesce a 759,5 MB. 2. Intendevo che dovresti passare anche lopzione memmap=... a memtest86 +. Questo non è stato testato / non confermato da me, ma qualcosa che potresti essere in grado di fare con memtest86 +.
    • Ok, grazie. Non ero sicuro di cosa significasse ” 002f796c48 – 759,5 MB ” (forse potrebbe essere 759,5 mega dopo lindirizzo 002f796c48 o qualcosa del genere ) e non ho mai sospettato di poter passare i parametri del kernel Linux a MemTest86 + (pensavo che non avesse nulla a che fare con Linux).

    Risposta

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

    1. Premi “c” per accedere alla finestra di dialogo di configurazione finestra di dialogo di configurazione memtest

    2. Quindi “4” per “Modalità segnalazione errori”

      finestra di dialogo modalità segnalazione errori memtest

    3. Quindi “3” per “BadRAM Patterns”

    Loutput cambierà da un elenco di singoli fallimenti di test a una serie di badram = linee, ciascuna contenente un nuovo settore danneggiato in più. Poiché le linee si aggiungono e si uniscono ai segmenti adiacenti puoi semplicemente eseguire il test senza testa durante la notte e usare lultima linea stampata (anche se se hai una dimm veramente scarsa il formato meno accurato “5 mega attorno a questo punto” sarà probabilmente un po più corto ).

    Risultato finale:

    Memtest86 + che mostra loutput di badram

    Commenti

    • Ora, se ‘ non dovessi copiarlo a mano e consegnarlo invece a GRUB senza riscrivere errori, sarebbe fantastico.
    • Quello che ho fatto è stato scattargli una foto (fotocamera del telefono), caricarla in GIMP, = > grayscale = > invert = > contrast / gamma quindi passarlo a tesseract ${IMG} stdout .. quindi verificare e correggere la riga prima di inserirla in / etc / default / grub … Probabilmente ci è voluto tutto il tempo necessario per inserirlo manualmente ^^
    • Decisamente più divertente che farlo manualmente anche se ugh

    Risposta

    Soluzione molto sporca e molto carina: esegui un memtester dello spazio utente, aspetta finché non trova un errore. Lascialo, ad esempio, su 0xfce2ea31.

    Quindi esegui di nuovo memtester, ma su quellindirizzo fisico, quindi:

    memtester -p 0xfce20000 64k 128 

    Per essere certo, è meglio se sacrifichi più della pagina dellindirizzo problematico.Qui abbiamo sacrificato 64 kByte attorno allindirizzo errato.

    Se tutto è andato bene, troverà la posizione di memoria difettosa, molto più rapidamente, di nuovo.

    Quindi sospendi il processo di memtester con un ctrl / z.

    Conseguenza: finché il processo di memtester non viene sospeso, non ne toglierà altro risorsa, ma nessun altro processo sarà in grado di accedere alla memoria difettosa . Perché verrà allocata dal memtester.

    Particolarmente utile su grandi server remoti. Il processo sospeso può rimanere fino a quando la nuova RAM non viene spedita. O forse fino al prossimo Natale, quando i tempi di inattività non saranno un problema così grande.

    Commenti

    • Invece di questo trucco, puoi anche usare lo strumento chmem in util-linux per dire al kernel di portare offline un particolare intervallo di memoria (spostando i dati altrove e quindi non riutilizzando mai le pagine) .
    • @TooTea Ho provato questo strumento su più macchine e non è stato possibile d riattiva un singolo blocco di memoria.

    Lascia un commento

    Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *