Identificando módulos de memória defeituosos

Apesar da complexidade, não é muito comum que um processador venha com defeito de fábrica, geralmente eles são testados antes do encapsulamento e os que não funcionam são simplesmente descartados. O problema mais comum com relação a eles são os casos de superaquecimento, que podem ser resolvidos com a limpeza do cooler ou uma ventilação adequada.

Mas, não podemos dizer o mesmo dos módulos de memória, onde os defeitos são muito mais comuns e infelizmente mais difíceis de detectar. Um agravante é que existem muitos fabricantes diferentes de memórias, todos trabalhando com margens muito baixas, por isso existe sempre a tentação de colocar no mercado módulos que não foram 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 módulos 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 módulo de memória com defeito. Esses 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 módulo de memória.

Existem inúmeros programas desse 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.

Existem duas opções de download. O mais prático é baixar uma imagem ISO, que pode ser usada para fazer um CD bootável. O arquivo tem apenas 64 kb compactado e 1.6 MB depois de descompactado. No site você vai encontrar também os programas para gerar o disquete de boot no Windows e Linux. Tanto faz usar o CD ou o disquete, o programa é exatamente o mesmo.

É necessário dar boot diretamente no Memtest para que ele possa testar realmente toda a memória do sistema. Se ele rodasse como um programa sobre o Linux ou Windows, não teria como acessar áreas utilizadas pelo sistema e programas, e o teste não seria confiável.

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 são em contrapartida muito demorados. Os 8 testes são executados automaticamente, mas o nono (veja detalhes a seguir) 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, dentro dela, 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:

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 com a 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.

O Memtest86 já vem pré-instalado em muitas distribuições, aparecendo como uma opção no menu de boot. 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 1 (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 sequências de dados de 8 bits, repetindo o teste 20 vezes com sequências diferentes.

Teste 4 (Moving inversions, random pattern): Este teste é similar ao teste número 3, mas dessa 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 essa “insistência” e o uso de diversas sequê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. Isso 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 uma para outra. 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 sequê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 despercebido pelos testes anteriores por ter sido mascarado pelos caches L1 e L2 ou mesmo pelos registradores do processador.
Note que tanto o teste 7 quanto o 8 são bastante demorados e servem apenas para detectar erros extremamente raros, eliminando qualquer dúvida sobre a saúde dos módulos. Eles foram criados realmente como um exercício de perfeccionismo.

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 sequência de valores predefinidos. O programa aguarda 90 minutos e verifica os dados gravados, anteriormente. Esses dados são produzidos usando sequê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 sequê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 providência é 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. Eu observei isso, por exemplo, em uma Tyan Tiger MPX que testei em 2001. A placa só ficou completamente estável com o terceiro módulo de memória que testei, sendo que os dois primeiros não tinham defeitos e passaram no teste do memtest86 depois de instalados em outros micros.

Um dos motivos era que essa placa utilizava um valor CAS de 2.5 ciclos (valor fixo), uma configuração incomum para a época. Assim como ela, muitas outras placas utilizam configurações incomuns, que podem causar incompatibilidades com memórias de algumas marcas. Jamais jogue fora um módulo com erros antes de testá-lo em outra placa-mãe diferente, pois ele pode estar bom.

Experimente também baixar a frequência de operação da memória, ou do FSB para testar o módulo em frequências mais baixas que as nominais. Muitas vezes um módulo danificado por estática ou por variações nas tensões fornecidas pela fonte, pode deixar de funcionar estavelmente na frequência máxima, mas continuar suportando frequê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 cédula 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. Nesse 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 ver que eles começam a partir do 433° MB:

No caso de módulos em que 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 esse 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. Isso é 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 Ubuntu, por exemplo, é preciso pressionar a tecla “F6” e em seguida adicionar o “mem=384M” (sem mexer nas demais opções da linha):

No caso do Windows XP, é possível usar a opção “/maxmem=”. Adicione a linha no arquivo “boot.ini”, especificando a quantidade de memória que deve ser utilizada (em MB), como em “/maxmem=384”. Esta alteração pode ser feita também através do msconfig, através da aba “Boot.ini > Opções Avançadas”.

Depois de concluído o 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. Essa 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 os módulos defeituosos (ou o PC onde eles forem instalados), indicando a partir de qual MB foram identificados endereços defeituosos. Assim você evita ter de executar o teste novamente cada vez que precisar reinstalar o sistema, ou instalar os módulos em outro micro.

Além do memtest86 e outros softwares, também existem testadores de memória dedicados, que executam uma sequência de testes automatizados, que, além de detectar defeitos, identificam as características do módulo, como a frequência suportada, CAS latency e assim por diante. Estes testadores são caros e, para ser sincero, o teste não é tão confiável quanto a sequência do memtest. A vantagem é que eles permitem testar um grande número de módulos em pouco tempo, de forma prática, por isso podem ser interessantes para distribuidores e lojas.

Duas das maiores empresas nesse segmento são a http://www.memorytest.com/ e a http://www.simmtester.com/, onde você pode se informar sobre os preços e os modelos disponíveis.

Testador de memória

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X