você está aqui: Home  → Arquivo de Mensagens

Aproveitando módulos de memória defeituosos

Colaboração: Carlos E. Morimoto

Data de Publicação: 09 de Julho de 2005

Aproveitando a deixa da dica do Hélio Masayoshi, enviada na Segunda-Feira, aqui vai um artigo mais passo a passo ensinando a usar o BadRAM e o Memtest86:

Cada bit de um pente de memória é composto por um conjunto de um transístor e um minúsculo capacitor. O transístor é usado para gravar e ler o bit de dados, que é armazenado na forma de um impulso elétrico dentro do capacitor. Esta estrutura simples é repetida milhões de vezes em cada chip e estes são finalmente soldados no pente de memória. Uma vez soldados, é muito difícil substituir os chips e (naturalmente) é impossível, por qualquer meio conhecido, reparar individualmente transístores defeituosos dentro deles.

Este um o grande problema. Como não existe como reparar defeitos nos módulos de memória, os módulos defeituosos precisam ser descartados. Muitos chips já nascem com defeitos (nenhum processo de fabricação é perfeito) e são geralmente descartados durante a produção. Outros são danificados por estática, picos de tensão ou defeitos na fonte ou reguladores de tensão da placa mãe.

Os danos nem sempre são imediatos: as descargas geralmente não destroem os filamentos dos circuitos, mas apenas causam o aparecimento de falhas microscópicas, que vão aumentando com o tempo até finalmente romper e inutilizar o componente. Este processo pode demorar meses ou até anos, mas de qualquer forma abrevia sua vida útil.

Estes erros são cruéis pois muitas vezes são difíceis de perceber, ou aparecem apenas em determinadas circunstâncias. Quando os erros aparecem nos últimos endereços do pente, podem ser confundidos com problemas diversos no sistema operacional ou programas (cada vez um programa diferente trava) ou com problemas de estabilidade da máquina sob grande demanda (pois os travamentos só acontecem quando muitos programas estão ativos, consumindo toda a memória disponível).

Normalmente, estes módulos de memória precisariam ser descartados, mas é possível aproveita-los no Linux usando o BadRAM, um patch para o Kernel, que permite especificar determinados endereços, que são marcados como endereços reservados para uso do Kernel e por isso mantidos vagos, sem serem usados pelos aplicativos. É uma abordagem simples, mas que funciona muito bem.

O trabalho neste caso é feito em duas etapas. Na primeira você utiliza o Memtest86, para localizar os endereços defeituosos e, em seguida usa o BadRAM para que eles não sejam mais utilizados pelo sistema operacional. É como marcar os badblocks do HD.

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. Você pode baixar a última versão no: http://www.memtest86.com

No site você vai encontrar também os programas para gerarem 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. Caso ele rodasse sobre como um programa sobre o Linux, ele 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 11 testes. Os 7 primeiros são relativamente rápidos, demoram cerca de 15 minutos num Celeron 900 com 128 MB. Os outros quatro testas são chamados de teste estendido, são muito mais rigorosos, capazes de encontrar erros não detectados pelo teste rápido mas em compensação muito demorados, de 10 a 12 vezes mais. Ou seja, o ideal é deixar o PC ligado de madrugada enquanto você não for precisar dele.

Por default são feitos apenas os testes básicos. Pressionando a tecla "C" e depois "2" (test selection) você pode ativar os testes avançados ativando a opção "3" (all tests).

Se por acaso a tabela inicial do Memtest86 informar incorretamente a quantidade de memória, acesse a opção "4" (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.

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 tempo suficiente para realizar o teste longo.

O tempo necessário varia de acordo com o desempenho e, principalmente da quantidade de memória. Dobrar a quantidade de memória dobra o tempo do teste, usar um processador mais rápido faz o teste correr um pouco mais rápido mas usar memória DDR, que oferecem um barramento de dados mais largo é o que faz o teste correr realmente bem mais rápido.

O Memtest86 já vem pré-instalado em muitas distribuições, aparecendo como uma opção de boot no menu do lilo. Você pode utilizar também o CD de uma versão recente do Kurumin, utilizando a opção "memtest" na tela de boot.

Para que o Memtest86 execute o teste devolvendo os endereços defeituosos na forma dos intervalos de endereços usados pelo BadRAM, pressione a tecla "c" para acessar a configuração e em seguida as opções, "5" (Error Report Mode), "2" (BadRAM Patterns) e depois "0" duas vezes para voltar ao teste principal. Deixe o Memtest86 rodando por um bom tempo e anote os endereços reportados na parte inferior da tela do teste. Ele informa os defeitos já na forma da opção de Kernel que deve ser usada, como em:

  badram=0x13495568,0xfffffff,0x13495568,0xfffffffc

Uma vez anotados os endereços defeituosos, o próximo passo é instalar o BadRAM. Por ser um projeto relativamente recente, não é comum encontra-lo pré-instalado nas distribuições. Quase sempre, você vai precisar recompilar o Kernel, instalando o patch que ativa o suporte. Para fazer a instalação manual, siga os passos abaixo:

1- Comece instalando o pacote "kernel-source" e os compiladores necessários para compilar o Kernel.

2- Baixe o patch correspondente à versão do Kernel em uso no: http://rick.vanrein.org/linux/badram/download.html

3- Acesse a pasta "/usr/src/linux/", onde fica o código fonte do Kernel e aplique o patch do BadRAM usando o comando "patch -p1", indicando a localização do arquivo, como em:

  # patch -p1 < /usr/src/BadRAM-2.6.11.1.patch

4- Ao recompilar o Kernel incluído na distribuição, não é preciso fazer uma compilação completa do Kernel, incluindo os módulos. Você precisa apenas do executável principal, gerado pelo comando "make bzImage". Depois de aplicar o patch do BadRAM, os passos básicos para gerar o novo executável do Kernel e copiá-lo para dentro da pasta /boot são:

  # cd /usr/src/linux/
  # make xconfig

(dentro do configurador gráfico, indique o arquivo de configuração do Kernel atual, dentro da pasta boot, para que seja gerado um Kernel com as mesmas configurações do atual, adicionando apenas o patch do BadRAM)

  # make bzImage

(compila o novo executável do Kernel)

  # cp -a arch/i386/boot/bzImage /boot/vmlinuz-badram

(copia o Kernel gerado para a pasta /boot)

5- Depois de gerar o novo Kernel, abra o arquivo de configuração do Lilo (/etc/lilo.conf) e adicione uma nova seção, incluindo o novo Kernel:

  image=/boot/vmlinuz-badram
  label=badram
  root=/dev/hda1
  read-only
  initrd=/boot/initrd.gz
  append="badram=0x13495568,0xfffffff,0x13495568,0xfffffffc"

Estamos aqui adicionado a opção de iniciar o novo Kernel, que aparecerá na tela de boot como a opção "badram". Você deve alterar as linhas "root" (a partição onde o sistema está instalado) e "initrd" de acordo com a sua instalação. O ideal é copiar estas informações da entrada correspondente ao Kernel principal. Na opção "badram=" vão os endereços defeituosos, informados pelo Memtest86.

Depois de editar o arquivo, não se esqueça de rodar o comando "lilo" para salvar as alterações.

Mas distribuições que incluem o BadRAM por padrão, você pode inicializar o sistema usando diretamente a opção contendo os endereços defeituosos. Ele vem incluído por padrão no Kurumin 5.0 Beta 4 em diante, onde você pode usar a opção "kurumin badram=" na tela de boot, informando os endereços defeituosos. Ao instalar o sistema é preciso adicionar a opção referente ao Badram na linha "append=" do arquivo "/etc/lilo.conf" (que passa opções para o Kernel), sem apagar os demais parâmetros. Depois da modificação a linha ficará "append = "splash=silent apm=power-off nomce quiet devfs=mount badram=0x00f00000,0xfff00000"

A principal limitação do BadRAM é que ele não ajuda em casos onde os endereços defeituosos estão logo no começo dos módulos, nos primeiros 4 ou 6 MB. Nestes casos os endereços defeituosos caem justamente na área ocupada pelo Kernel durante o boot. Se o Kernel é corrompido pelos endereços defeituosos, o boot acaba com um "Kernel Panic" antes que ele tenha a chance de isola-los. Nestes casos a melhor solução é usar o pente defeituosos sempre em par com outro. O módulo bom é instalado no primeiro banco (de forma a ser acessado primeiro), de forma que o Kernel é carregado nos primeiros endereços do módulo bom e tem condições de marcar os endereços defeituosos do módulo ruim.


Curso: Linux Ferramentas Técnicas, com Carlos E. Morimoto

Este é um curso avançado, voltado para quem quer aprender a configurar e corrigir problemas "na unha", manipulando diretamente os arquivos de configuração e módulos do sistema, sem depender de nenhum configurador. É ideal para quem gosta de fuçar e quer entender melhor como o sistema funciona internamente, editando arquivos de configuração, compilando módulos e escrevendo scripts.

Em Porto Alegre, início dia 29/07, com aulas às sextas das 19:00 às 22:00 e aos Sábados das 10:00 às 13:20.

Veja detalhes sobre o curso no: http://www.guiadohardware.net/cursos/


Palestras para Programadores PHP

O grupo PROPHP estará promovendo em parceria com a SUCESU-SP no próximo dia 23 duas palestras voltados aos programadores PHP:

  • Otimizando o desenvolvimento com Smarty Template
  • Introdução a OO e seu uso com PHP5

O valor para não associados da SUCESU é de R$ 30,00

Data: 23 de julho, sábado, 08h30 às 12h30

Valor: Associados SUCESU-SP: Gratuito Não-associados: R$ 30,00

Local: Auditório da SUCESU-SP Rua Tabapuã, 627 - Térreo - Itaim Bibi - São Paulo - SP

Grupo PROPHP


 

 

Veja a relação completa dos artigos de Carlos E. Morimoto

Opinião dos Leitores

Paulo Maravalhas
07 Dez 2016, 19:16
Gostaria de saber se um pente de memória RAM tiver problema é só me lembro no Linux e não lê no Windows?
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script