Um dos cenários comuns de falha do servidor é DRAM ruim, às vezes até mesmo quando a memória ECC é usada.
memtest86+
é uma das ferramentas mais úteis para diagnosticar problemas de DRAM. Como ele se carrega no início da memória, fiquei me perguntando se memtest86+
verifica a parte da memória que memtest86+
é carregada.
A memória alocada é memtest86+
tão pequena que não importa, ou é possível que memtest86+
haja um defeito na DRAM porque ela não pode testar os locais de memória em que reside?
Obviamente, o memtest86+ não pode testar a região da memória que atualmente contém o código executável do memtest86+ (mas se houver erros de memória nessa região, é muito provável que o próprio teste falhe). No entanto, o memtest86+ é capaz de realocar seu próprio código para um endereço diferente no tempo de execução e, usando esse truque, é capaz de testar toda a memória permitida pelo firmware (BIOS) - mas não de uma só vez.
Esta realocação de código é descrita em README.background dentro do arquivo de código-fonte memtest86+ (o arquivo está um pouco desatualizado - por exemplo, ele afirma que os endereços usados para o código memtest86+ são 0x2000 e 0x200000, mas o endereço baixo conforme definido na fonte é na verdade 0x10000, e o endereço alto é 0x2000000 ou 0x300000 dependendo da quantidade de memória na máquina).
Mas mesmo com esse truque de realocação, o memtest86+ não é capaz de testar toda a memória pelos seguintes motivos:
Normalmente, o firmware (BIOS) reserva algumas regiões da RAM para seu próprio uso (por exemplo, tabelas ACPI). Embora essas regiões de RAM possam ser acessadas pela CPU, gravar qualquer coisa nelas pode resultar em um comportamento imprevisível.
Alguma parte da RAM é usada para o modo de gerenciamento do sistema e nem mesmo é acessível a partir da CPU fora do código SMM privilegiado.
A faixa de endereço RAM entre 640K e 1M é inacessível devido a peculiaridades do layout de memória do PC legado (algumas dessas RAM podem ser usadas como sombra para BIOS ROM e para SMM, outras partes podem estar completamente inacessíveis).
Não, o memtest não pode testar sua própria memória. No entanto, é tão pequeno (apenas alguns KB) que quase não importa. EDIT: esta afirmação está errada, pois, conforme declarado na resposta selecionada, o memtest pode se realocar dinamicamente para testar toda a memória endereçável do usuário.
--
Em teoria, o processador moderno pode, no momento da inicialização, configurar parte de seu cache como memória programável, de dentro de programas muito pequenos (como memtest) podem ser executados sem tocar na DRAM.
No entanto, é um recurso específico do modelo (que requer suporte do BIOS) e não acho que o memtest o esteja usando.