Memtest86 + verifica la memoria utilizzata per eseguirsi?


65

Uno degli scenari comuni di errore del server è una DRAM difettosa, a volte anche quando viene utilizzata la memoria ECC.

memtest86+è uno degli strumenti più utili per diagnosticare i problemi di DRAM. Mentre si carica all'inizio della memoria, mi chiedevo se memtest86+controlla la parte della memoria in cui memtest86+è caricata.

La memoria è allocata a memtest86+dimensioni così ridotte da non avere importanza, oppure è possibile che memtest86+manchi un difetto nella DRAM perché non è in grado di verificare le posizioni di memoria in cui risiede?


8
Mentre questa domanda è rilevante per un server, è rilevante anche per un normale PC, quindi ho votato per spostare questa domanda a Super User dove può raggiungere più persone.
Cristian Ciupitu,

Risposte:


78

Ovviamente memtest86 + non può testare la regione di memoria che attualmente contiene il codice eseguibile memtest86 + (ma se ci sono errori di memoria in quella regione, è molto probabile che il test stesso si arresti in modo anomalo). Tuttavia, memtest86 + è in grado di spostare il proprio codice in un indirizzo diverso in fase di esecuzione e, utilizzando questo trucco, è in grado di testare tutta la memoria che è consentita dal firmware (BIOS), ma non tutta in una volta.

Questo trasferimento del codice è descritto in README.background all'interno dell'archivio memtest86 + codice sorgente (il file è leggermente obsoleto - ad esempio, indica che gli indirizzi utilizzati per memtest86 + codice sono 0x2000 e 0x200000, ma l'indirizzo basso come definito nell'origine è in realtà 0x10000 e l'indirizzo alto è 0x2000000 o 0x300000 a seconda della quantità di memoria nella macchina).

Ma anche con questo trucco di trasferimento memtest86 + non è in grado di testare tutta la memoria per i seguenti motivi:

  • Di solito il firmware (BIOS) riserva alcune regioni RAM per uso proprio (ad es. Tabelle ACPI). Mentre è possibile accedere a queste aree RAM dalla CPU, scrivere qualsiasi cosa in esse può comportare comportamenti imprevedibili.

  • Una parte della RAM viene utilizzata per la modalità di gestione del sistema e non è nemmeno accessibile dalla CPU al di fuori del codice SMM privilegiato.

  • L'intervallo di indirizzi RAM compreso tra 640K e 1M è inaccessibile a causa di stranezze del layout di memoria del PC legacy (parte di questa RAM può essere utilizzata come ombra per la ROM del BIOS e per SMM, altre parti potrebbero essere completamente inaccessibili).


1
Interessante, ho perso la sua capacità di trasferimento. Ovviamente SMM e simili sono fuori portata (a parte il supporto BIOS specifico).
shodanshok,

Quelle regioni mappate generalmente escludono la DRAM mentre qualcos'altro "off module" viene indirizzato? Dicono ROM e periferiche.
mckenzm,

3
se hai diversi moduli ram, esegui un secondo test dopo averli scambiati ...
JFL

È possibile che la memoria non riesca nel modo giusto per fare in modo che memtest riporti erroneamente il successo a causa della riscrittura delle istruzioni? O meglio, quanti difetti ci vogliono?
John Dvorak,

3
@JanDvorak: In teoria, ovviamente, è possibile. In pratica, direi che è solo leggermente più probabile che battere la testa sulla tastiera e scrivere casualmente un sonetto shakespeariano.
Ilmari Karonen,

5

No, memtest non può testare la propria memoria. Tuttavia, è così piccolo (solo alcuni KB) che poco importa. EDIT: questa affermazione è errata poiché, come indicato nella risposta selezionata, memtest può spostarsi dinamicamente per testare tutta la memoria indirizzabile dall'utente.

-

In teoria, il processore moderno può, all'avvio, configurare parte della sua cache come memoria programmabile, da programmi molto piccoli (come memtest) possono essere eseguiti senza toccare DRAM.

Tuttavia, è una funzione specifica del modello (che richiede il supporto BIOS) e non credo che memtest la stia utilizzando.


La ringrazio per la risposta. memteststa testando anche la cache della CPU. Quindi, se memtestfosse caricato in questa cache, allora questa parte della cache non potrebbe essere testata, il che è più problematico, perché è molto più piccolo della memoria?
Robin,

2
Besed sulla documentazione memtest86 esso non prova cache del processore, almeno in maniera diretta. Inoltre, i processori moderni hanno istruzioni e cache dei dati separate (I $ e D $). Il codice eseguibile viene caricato nella cache delle istruzioni e non può essere modificato / sovrascritto direttamente
shodanshok,

1
memtest86 + testa sicuramente la cache di dati della CPU, ma questo non ha importanza per questa domanda. Grazie ancora per la tua risposta
Robin,

3
Sei sicuro di questo? Ho pensato che si copiasse da qualche altra parte mentre testava la memoria in cui normalmente vive. Ecco perché ogni test ha una parte lenta (la maggior parte della memoria) e una parte veramente veloce (la piccola parte in cui sono memorizzati il ​​suo codice / dati).
Peter Cordes,

1
@DmitryGrigoryev: Ah va bene .. quindi ho imparato qualcosa di più :-) Cool grazie!
Robin,
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.