ERROS EM MEMÓRIAS

Inicialmente, deve-se saber mais sobre erros em memória.

Todos os tipos de memória são passíveis de erros que podem ser causados por inúmeros fatores, desde variações na tensão da tomada que não são completamente absorvidos pela fonte de alimentação, estática, diversos tipos de interferências eletromagnéticas e, por incrível que possa parecer, até mesmo raios cósmicos, que num PC doméstico causam um soft-error em média a cada poucos meses. Esses erros podem ser de hardware, chamados de hard-error, ou de software, chamados de soft-error.

Um erro de hardware é devido a defeitos físicos. Todos os tipos de memória presentes em um computador - RAM, HD, CD/DVD - são suscetíveis a erros causados por danos interferências eletromagnéticas ou variações de tensão, por exemplo. Esses danos físicos não possibilitam consertos, só resta a substituição da peça nesse caso. Já os erros de software são erros momentâneos, onde um ou alguns poucos bits são alterados, sem que os chips de memória sejam danificados. Podem ser causados por distúrbios elétricos, pela longa duração de operações ou pela relação quantidade de memória RAM e a parcela em uso dessa memória. Esses "soft-errors" podem causar os mais diversos efeitos colaterais, como travamentos de programas, pequenos danos em arquivos salvos. 


Encontrar Erros

MÉTODOS DE DIAGNÓSTICOS E CORREÇÃO DE ERROS

Foram criados métodos de diagnóstico e correção de erros a fim de aumentar a confiabilidade de sistemas. Inicialmente, com os sistemas de paridade, usados em muitos módulos de 30 e 72 vias. A paridade é um método mais antigo, que somente é capaz de identificar alterações nos dados depositados nas memórias, sem condições de fazer qualquer tipo de correção. A paridade consiste na adição de mais um bit para cada byte de memória, que passa a ter 9 bits, tendo o último a função de diagnosticar alterações nos dados.

ECC

Em seguida temos o ECC, o sistema atual, que permite não apenas identificar, mas também corrigir erros simples. O ECC acaba sendo a solução perfeita, pois permite que um servidor continue funcionando, sem interrupções e de forma confiável, mesmo com um grande número de soft-errors, causados por fatores diversos.

FUNCIONAMENTO DE ECC

O número de bits necessários para implementar o ECC decresce conforme aumenta a largura do barramento usado pelo módulo. Em um módulo de 32 bits são necessários 7 bits adicionais para cada 32 bits de memória, mas nos módulos DIMM de 64 bits atuais, são necessários apenas 8 bits para cada 64 bits de memória, ou seja, o mesmo que seria necessário para usar paridade. Os módulos DIMM com ECC são fáceis de identificar, pois eles possuem 5, 9 ou 18 chips, em vez de 4, 8 ou 16. O uso de ECC é mais comum em módulos registered, que são específicos para servidores, mas também é possível encontrar alguns módulos unbuffered com ECC.

Quanto maior a quantidade de bits destinados ao ECC, mais complexos serão os códigos armazenados, e maior será a possibilidade de um eventual erro ser corrigido. Apesar de ainda não ser muito usado em memórias RAM, justamente devido à boa confiabilidade das memórias atuais, o ECC é item obrigatório em discos rígidos e CD-ROMs, pois neles o corrompimento de dados é muito comum. É justamente o uso do ECC que permite que estas mídias sejam confiáveis.

Nos CD-ROMs, por exemplo, são usados nada menos do que 276 bytes de códigos de correção de erros para cada setor de 2048 bytes. Em um HD, cada setor armazena, além dos 512 bytes de dados, mais algumas dezenas de bytes contendo os códigos ECC. A criação dos bytes de ECC, assim como sua utilização posterior é feita pela placa lógica, um processo automático que é feito de forma completamente transparente ao sistema operacional. 

Quando um setor é lido pela cabeça de leitura, juntamente com os dados são lidos alguns dos códigos ECC, que visam apenas verificar se os dados que estão sendo lidos são os mesmos que foram gravados, uma técnica que lembra o sistema de paridade antigamente usado na memória RAM. Caso seja verificado um erro, são usados os demais códigos para tentar corrigir o problema.

Na grande maioria dos casos, esta primeira tentativa é suficiente. Estes erros transitórios, que são corrigidos com a ajuda dos códigos ECC são chamados de "soft errors" e não causam nenhum efeito colateral além de um delay de alguns milissegundos na leitura. Caso não seja possível corrigir o erro usando o ECC, a controladora faz uma nova tentativa de leitura do setor, pois é grande a possibilidade do erro ter sido causado por alguma interferência ou instabilidade momentânea. Caso o erro persista, ela fará várias tentativas sucessivas, reduzindo a velocidade de rotação dos discos e comparando o resultado de várias leituras, de forma a tentar recuperar os dados gravados no setor. Esse processo gera aquele ruído característico de HD sendo "mastigado" e quase sempre indica o aparecimento de um badblock.

DETALHES TÉCNICOS

E é interessante esclarecer alguns termos técnicos, que são confudidos por muitos na hora de analisar expecificações.

Não vamos confundir memória buffered (registrada) com memória ECC. Existem módulos de memória com ambos ECC e buffered. E existe também módulos de memória com "buffered non-ECC" e outros com "unbuffered ECC". Lembrando que ECC é Error Correction Code e significa "Código de Correção de Erro", então "non-ECC" é not support ECC e significa "não suporta ECC". ECC não é o mesmo que memória registrada. Existem 3 tipos de memórias DIMM SDRAM (não confundir com memória PC133 como muitos fazem, pois memória DDR também é DIMM SDRAM): buffered, unbuffered e registered (em português, com buffer, sem buffer e registrada).

As mais comuns são as memórias unbuffered e também podem ter ECC. As memórias registradas se diferem das unbuffered por ter 3 chips na placa de memória além dos 8 ou 9 chips de memória (ou o dobro, caso seja memória double side), que são dois registradores e um PLL. Tudo isso para manter a integridade do sinal quando se tem vários bancos de memória populados. Memórias registradas podem ter ECC ou não. Porém, como são voltadas para o mercado de estações de trabalho de alto desempenho e servidores, em geral só se encontra com ECC, mas que pode ser desativado pela placa-mãe.

 

MEMÓRIA RAM ECC

As Memórias ECC foram criadas com o propósito de fornecer maior confiabilidade. Problemas em alguns bits presentes na memória causam diversos danos, como travamentos de aplicativos que estavam sendo executados, arquivos salvos corrompidos, o travamento da máquina. Esse tipo de memória é capaz de detectar e corrigir alguns erros de software. Erros de memória que não são corrigidos imediatamente podem causar o travamento do computador. E isso é preocupante. Mesmo quando estamos falando de um computador desktop, o resultado são danos como perda de arquivos, necessidade de reiniciar o pc.

Esse cenário crítico é agravado quando estamos trabalhando em servidores, onde todos os clientes serão afetados em caso de falhas e travamentos. Ou até mesmo em Workstation, ou em sistemas menores mas que realizam operações de alta prioridade, como em bancos. Entretanto, como essa verificação de erros demora um tempo, ela é mais lenta (além de mais cara) do que uma memória comum. Mas como este tipo de memória é utilizada em servidores, estações de alto desempenho, controles industriais, e sistemas envolvidos na área de negócios críticos. 

O uso de memória ECC torna-se obrigatório se tratar de servidores. E o uso em desktops fica a critério do usuário, conforme o quão crítico é o cenário em que o computador irá trabalhar. Apesar de focar esse arquivo em memória RAM ECC, é mais comum encontrar memória ECC em discos rígidos, mídias de CDs e DVDs, onde é mais comum a ocorrência de erros.

DIFERENCIAL

O diferencial de uma memória RAM ECC está em seu número de bits. Em módulos de 32 bits, são 7 bits adicionais para cada 32 bits de memória. E em módulos de 64 bits, são 8 bits adicionais para cada 64 bits. Podemos identificar os módulos de 64 bits, pois possuem ou 5 ou 9 ou 18 chips, ao invés dos tradicionais ou 4 ou 8 ou 16. O número de bits adicionais diminui conforme aumenta o tamanho do barramento da memória. Estes bits adicionais colocados nas memórias possuem códigos que permitem identificar se os dados que estão sendo lidos pela cabeça de leitura, no caso de discos e mídias, são os mesmos que foram gravados. Dessa maneira, quando um setor do disco ou de uma mídia é lido pela cabeça de leitura, são lidos também os respectivos ECCs, que permitem determinar a integridade dos dados ali gravados. Caso algum erro seja encontrado, os demais ECCs são lidos na tentativa de corrigir o problema.

Normalmente, a correção é bem sucedida já na primeira tentativa, mas caso isto não aconteça, uma nova leitura do setor é feita, na esperança de que o problema seja apenas momentâneo. Se mesmo assim o erro persistir, a velocidade de rotação do disco será diminuída e diversas leituras consecutivas serão feitas na tentativa de recuperar os dados armazenados naquele setor. Normalmente este processo gera os chamados badblocks.

Memórias tipo ECC requerem maiores recursos do que a memória com paridade para armazenar dados e causam uma degradação de performance de aproximadamente 3% no subsistema de memória, porém o resultado em detecção e correção de erros conseguida, principalmente em sistemas críticos, é um benefício que vale a troca. 

VANTAGENS

A principal vantagem na utilização de memórias ECC é justamente o fato de elas possuírem este mecanismo de "busca e correção de erro", tornando memórias como HDs e mídias de CD/DVD mais confiáveis. Além disso, a marcação dos badblocks, mesmo não sendo muito agradável, faz com que não ocorra a gravação de outros dados naquele setor, eliminando o risco de que outros arquivos e documentos sejam corrompidos. A correção destes "soft-errors" não prejudica seus componentes.

O desempenho da máquina pode ser atrasado em alguns milissegundos na leitura do disco. Diante dessa perda, é necessário analisar o cenário que a máquina estará trabalhando. No ponto de visto do usuário final, a perda é imperceptível.

CUSTO E BENEFÍCIO

A necessidade de uso da memória RAM com ou sem ECC depende do quão crítico são as operações da aplicação. Um servidor de missão crítica - arquivos, web, banco de dados, cloud - obrigatoriamente deverá conter ECC pois assim garante a integridade das informações em seu tráfego pelo sistema. Para o usuário comum vai depender do quanto está disposto a gastar para compor seu computador. É importante destacar que para utilizar memória RAM ECC, o computador deve possuir uma placa mãe compatível.

As memórias RAM utilizadas nos PCs comuns já possuem uma confiabilidade relativamente alta diante do perfil das tarefas executadas por esses usuários. Logo, não julgo necessário comprar memórias ECC para utilizá-las em seu computador em casa. Ressaltando que o preço das memórias RAM ECC é superior ao das memórias comuns, e o fato de ser necessária uma placa mãe compatível com ECC, torna a aquisição ainda mais custosa, financeiramente.

Corsair e Kingston são marcas com bons conceitos no mercado, ao lado da Samsung e da Mushkin. Em geral, os modelos top de linha, além de aguentarem overs maiores, também trabalham com latencias mais baixas. 

Nesse artigo, mostrei detalhes do funcionamento da memória RAM ECC. Mas além disso, métodos de detecção e correção de erros. Citei definições importantes para o entendimento do tratamento de erros em memórias de um computador. Obrigado a todos leitores. E estou a disposição para dúvidas e críticas.