Identificando e aproveitando módulos de memória com defeito

Identificando e aproveitando módulos de memória com defeito

Defeitos em módulos de memória são relativamente comuns e, infelizmente, nem sempre são fáceis de detectar, fazendo com que muitas vezes você conviva com travamentos e instabilidades diversas, culpando o sistema operacional ou os drivers, até descobrir que na verdade o problema era com um dos módulos de memória.

Um agravante é que existem muitos fabricantes diferentes de memórias, todos trabalhando com margens muito baixas. Como a maior parte dos usuários e integradores compra mais pelo preço, acaba levando pra casa módulos genéricos que muitas vezes não são adequadamente testados em fábrica.

A placa mãe também pode ser responsável por vários erros, já que ela é a encarregada de transportar os dados dos pentes de memória até o processador. Se a placa mãe corromper os dados pelo caminho você terá travamentos e outros sintomas semelhantes aos causados por um pente de memória com defeito. Estes erros são cruéis pois são muitas vezes difíceis de perceber. Eles muitas vezes são confundidos com problemas do sistema operacional.

Seja qual for a causa, erros de memória podem causar muita dor de cabeça, então a melhor forma de lidar com o problema é rodar um teste completo sempre que você montar um PC ou instalar um novo pente de memória.

Existem inúmeros programas deste tipo, um dos melhores é o memtest86, disponível no:
http://www.memtest86.com/

A grande vantagem do memtest86 sobre outros testes de memória é que além de pequeno, gratuito e de código aberto ele é quase automático. Você precisa apenas gravar um CD ou disquete e dar boot para que o teste seja iniciado automaticamente. Ele fica num loop eterno, repetindo os testes e indicando os erros que encontrar até que você se sinta satisfeito. Ele fica também disponível no menu de boot de muitas distribuições.

O Memtest86 realiza um total de 9 testes. Os 5 primeiros são relativamente rápidos, mas os 4 testes finais são muito mais rigorosos, capazes de encontrar erros não detectados pelos testes iniciais, mas em compensação muito demorados. Os 8 testes são executados automaticamente, mas o nono (veja detalhes abaixo) precisa ser ativado manualmente, já que é muito demorado. O ideal é deixar o teste correndo em loop durante a madrugada e olhar os resultados no outro dia de manhã.

Se, por acaso, a tabela inicial do Memtest86 informar incorretamente a quantidade de memória, acesse a opção “3” (memory sizing) e a opção “3” (probe). Isso fará com que o Memtest86 detecte a memória, desprezando as informações do BIOS. Na tela principal, pressione a tecla 5 para ter um sumário com todos os erros encontrados em cada teste.

memoria_html_2631bb4e

Basicamente é isto, não existe muita configuração a fazer. A alma do negócio é ter paciência e deixar ele fazer seu trabalho, se possível por tempo suficiente para realizar o teste longo.

O tempo necessário varia de acordo com o desempenho e principalmente da quantidade de memória instalada. Dobrar a quantidade de memória dobra o tempo do teste. Usar um processador mais rápido tem pouca influência, pois o gargalo é a velocidade de acesso à memória, não o processamento.

Vamos entender o que faz cada um dos testes:

Teste 0 (Address test, walking ones, no cache): Simplesmente testa o acesso a todos os endereços da memória, algo semelhante com o que o BIOS faz na contagem de memória durante o boot. Ele é o teste mais rápido e serve basicamente para checar a quantidade de memória disponível.

Teste 3 (Address test, own address): Este teste é semelhante ao 0, mas adota uma estratégia diferente, checando endereços e não apenas realizando uma contagem rápida. Isso permite detectar problemas de endereçamento no módulo. Outra diferença é que este teste é feito sem utilizar os caches do processador, para evitar que ele mascare defeitos nos módulos.

Teste 2 (Moving inversions, ones&zeros): Escreve bits 1 e depois bits 0 em todos os endereços da memória. Este algoritmo também utiliza os caches L1 e L2 do processador. É um teste rápido que identifica os erros mais grosseiros, onde algumas células do módulo estão realmente queimadas.

Teste 3 (Moving inversions, 8 bit pat): É aqui que os testes para detectar erros mais complexos começam. O terceiro teste escreve seqüências de dados de 8 bits, repetindo o teste 20 vezes com seqüências diferentes.

Teste 4 (Moving inversions, random pattern): Este teste é similar ao teste número 3, mas desta vez usando uma seqüência randômica de acessos, que é repetida um total de 60 vezes. Parece um grande exagero, já que este teste é destinado a identificar os mesmos erros que o teste 3, mas é justamente esta “insistência” e uso de diversas seqüências diferentes de operações que torna o memtest tão confiável na detecção de erros, capaz de detectar erros raros ou transitórios, que não aparecem em outros testes.

Teste 5 (Block move, 64 moves): É um pouco mais rigoroso que o teste 4. Continua movendo dados de um endereço para outro da memória, mas agora são movidos blocos de 4 megabits de cada vez. Este teste é repetido 64 vezes.

Teste 6 (Moving inversions, 32 bit pat): Os dados gravados em cada bit de memória são lidos e movidos para o endereço adjacente. É mais ou menos uma combinação dos três testes anteriores, pois testa o endereçamento, leitura e escrita de dados. A operação é repetida 32 vezes no total, para testar todas as combinações possíveis.

Este teste detecta um tipo de erro muito comum que é a “contaminação” de endereços. Isto ocorre quando por um defeito de fabricação o isolamento elétrico entre duas ou mais células de memória fica muito fino, permitindo que os elétrons saltem de um para o outro. Isso faz com que ao gravar um dos bits o outro também seja gravado com o mesmo valor. Esse tipo de problema pode ser bastante intermitente, acontecendo apenas quando o segundo bit estiver com um valor zero, ou apenas esporadicamente, daí a necessidade de tantas repetições.

Teste 7 (Random number sequence): Para eliminar qualquer dúvida, são agora escritas seqüências de números randômicos, preenchendo todos os endereços da memória. Os números são conferidos em pequenos blocos e o teste é repetido diversas vezes.

Teste 8 [Modulo 20, ones&zeros]: Este teste é basicamente uma repetição do teste 7, mas agora utilizando um algoritmo diferente, chamado “Modulo-X”, que elimina a possibilidade de qualquer defeito ter passado desapercebido pelos testes anteriores por ter sido mascarado pelos caches L1 e L2 ou mesmo pelos registradores do processador.

Teste 9 (Bit fade test, 90 min, 2 patterns): Este é um teste final, que permite detectar erros raros relacionados com os circuitos de refresh, ou soft-erros causados por fatores diversos, que alterem os dados armazenados.

No teste, todos os endereços são preenchidos usando uma seqüência de valores pré-definidos. O programa aguarda 90 minutos e verifica os dados gravados, anteriormente. Estes dados são produzidos usando seqüências matemáticas, de forma que o programa só precisa repetir as mesmas operações na hora de verificar, sem precisar guardar uma cópia de tudo que gravou em algum lugar.

Em seguida, a mesma seqüência é gravada novamente, mas desta vez com os dígitos invertidos (o que era 1 vira 0 e o que era 0 vira 1). O programa aguarda mais 90 minutos e checa novamente.

Este teste demora mais de três horas, por isso não é executado automaticamente junto com os outros 8. Pense nele como um último refúgio para os paranóicos.

Para executá-lo, pressione “C“, depois “1” (Test Selection) e em seguida “3” (Select Test). Na opção “Test Number [1-9]” pressione “9” e em seguida “0” (Continue).

Ao detectar um erro, a primeira providencia é trocar o módulo de memória e refazer o teste. Em alguns casos o problema pode não ser no módulo, mas sim na placa mãe. Em alguns casos mais raros pode ser até mesmo que tanto o módulo quanto a placa estejam bons, e o problema seja apenas algum tipo de incompatibilidade entre eles. Jamais jogue fora um pente com erros antes de testá-lo em outra placa mãe diferente, pois existe sempre uma percentagem moderada de chance de ele estar bom.

Experimente também baixar a freqüência de operação da memória, ou do FSB para testar o pente em freqüências mais baixas que as nominais. Muitas vezes um pente danificado por estática ou por variações nas tensões fornecidas pela fonte pode deixar de funcionar estavelmente na freqüência máxima, mas continuar suportando freqüências mais baixas.

Outra dica é limpar cuidadosamente o módulo, removendo a poeira acumulada e limpando os contatos usando uma borracha de vinil (as borrachas de escola, do tipo que não esfarela). Na falta de uma, você também pode usar uma nota de real (com exceção das de R$ 10, que são de plástico) em bom estado. O papel moeda é abrasivo e realmente limpa os contatos na medida certa.

Aqui temos um módulo de 512 MB danificado por estática, flagrado pelo teste. Veja que foram identificados diversos endereços defeituosos. A lista mostra apenas os primeiros erros, mas pressionando a tecla “C” e depois “4” (error summary), é possível ver o número total. Neste caso, o módulo tinha nada menos do que 222 endereços defeituosos. Além de identificar os erros, o memtest mostra a partir de qual MB do módulo eles começam. Pelo screenshot, você pode ser que eles começam a partir do 433° MB:

memoria_html_m1f4a34571

No caso de módulos onde os erros aparecem logo nos primeiros endereços, não existe o que fazer, pois eles farão com que o sistema trave logo no início do boot. Módulos onde os defeitos se concentram no final (como este do exemplo) ainda podem ser usados para testes, pois o sistema acessa sempre a memória a partir do começo, deixando os últimos endereços do módulo por último. Enquanto você estiver rodando aplicativos leves e o sistema não acessar os endereços defeituosos do módulo, tudo funciona normalmente.

No Linux é possível orientar o sistema a utilizar apenas o começo do módulo, ignorando os endereços a partir da onde começam os erros. Isto é feito passando a opção “mem=384M” (onde o “384” é a quantidade de memória que deve ser usada) para o Kernel na tela de boot.

Isso varia um pouco de distribuição para distribuição. No Knoppix você digitaria “knoppix mem=384M” na tela de boot. No Ubuntu é preciso pressionar a tecla “F6” e em seguida adicionar o “mem=384M” (sem mexer nas depois opções da linha):

memoria_html_m18528c7b

Depois de concluído do boot, você pode confirmar usando o comando “free”, que reporta o uso de memória. Você verá que independentemente da capacidade real do módulo, o sistema usa a memória apenas até o MB especificado na opção. Esta dica permite aproveitar a parte “boa” do módulo em algum micro usado para aplicações leves, ao invés de ter que jogá-lo fora.

Não se esqueça de etiquetar estes módulos defeituosos (ou o micro onde eles forem instalados), indicando a partir de qual MB foram identificados endereços defeituosos.

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X