Entenda o que é memória ECC, como ela corrige erros de bit, a diferença para o ECC on-die do DDR5 e como verificar se o seu servidor usa ECC.
Para que serve este guia
Praticamente todo servidor profissional usa memória ECC, enquanto computadores domésticos quase nunca usam. Este guia explica o que a sigla significa, que tipo de problema ela evita, por que isso importa para bancos de dados, virtualização e ZFS, e como confirmar se a memória do seu servidor tem ECC ativo.
O que é memória ECC
ECC (Error-Correcting Code, código de correção de erros) é um mecanismo em que o módulo de memória guarda, junto com cada bloco de dados, alguns bits extras calculados a partir desses dados. Em módulos DDR4 com ECC, por exemplo, cada palavra de 64 bits de dados é acompanhada de 8 bits de verificação, totalizando 72 bits (por isso os pentes ECC têm chips a mais).
Na leitura, o controlador de memória do processador recalcula o código e compara:
- Se um bit estiver trocado, o erro é corrigido na hora, de forma transparente, e registrado em log.
- Se dois bits estiverem trocados, o erro é detectado (não corrigido). O sistema sabe que o dado está corrompido e pode parar o processo ou a máquina em vez de seguir com informação errada.
Esse esquema básico é chamado de SECDED (Single Error Correction, Double Error Detection). Processadores de servidor oferecem modos mais robustos, como Chipkill (AMD, IBM) ou SDDC/ADDDC (Intel), que corrigem até a falha de um chip inteiro do pente.
O que é um "bit flip" e com que frequência acontece
A memória RAM guarda bits como cargas elétricas minúsculas. Essas cargas podem ser alteradas por radiação de fundo (partículas cósmicas), ruído elétrico, defeitos de fabricação ou desgaste do próprio chip. O resultado é um bit que era 0 virar 1, ou vice-versa.
Um estudo do Google com a frota de servidores da empresa (Schroeder, Pinheiro e Weber, 2009) observou que mais de 8% dos pentes de memória apresentavam algum erro por ano, e que a maioria dos erros vinha de falhas físicas persistentes, e não de eventos aleatórios isolados. Em escala de datacenter, erro de memória não é raridade: é rotina.
Por que servidores usam memória ECC
- Corrupção silenciosa de dados: sem ECC, um bit trocado pode alterar um valor em um banco de dados, um arquivo sendo gravado ou um cálculo, sem que ninguém perceba. O dado errado é gravado no disco como se fosse correto.
- Travamentos inexplicáveis: um bit trocado em código do kernel ou de um driver pode causar tela azul ou kernel panic que parecem aleatórios.
- Muita memória, muito tempo ligado: servidores têm centenas de gigabytes de RAM e ficam ligados meses seguidos. A chance de algum erro em algum momento cresce com os dois fatores.
- Diagnóstico antecipado: erros corrigidos ficam registrados. Quando um pente começa a acumular erros, dá para substituí-lo antes que ele cause falha.
- Virtualização: em um host com dezenas de VMs, um erro de memória pode afetar vários sistemas de uma vez.
Memória ECC e ZFS
O ZFS verifica checksums de tudo o que lê do disco, mas não tem como saber se um dado foi corrompido enquanto estava na RAM, antes de ser gravado. A documentação do OpenZFS recomenda ECC pelo mesmo motivo que recomenda para qualquer sistema que preze a integridade dos dados: ZFS sem ECC não é mais perigoso que outro sistema de arquivos sem ECC, mas o ECC fecha a última brecha de proteção.
RDIMM, UDIMM e o "ECC" do DDR5
- RDIMM (registrada): tem um chip intermediário (registrador) que permite usar muitos pentes por canal. É o padrão em servidores Xeon e EPYC e praticamente sempre tem ECC.
- UDIMM (sem buffer): usada em desktops e servidores de entrada. Existe com e sem ECC.
- ECC on-die do DDR5: todo chip DDR5 tem correção interna, criada para compensar a densidade maior das células. Ela não substitui o ECC tradicional: corrige erros dentro do chip, mas não protege o caminho até o processador nem informa ao sistema o que aconteceu. Um pente DDR5 "comum" não é um pente ECC.
Como verificar se o servidor usa memória ECC
No Linux:
dmidecode -t memory | grep -i "error correction"
# Exemplo: "Error Correction Type: Multi-bit ECC"
apt install rasdaemon
systemctl enable --now rasdaemon
ras-mc-ctl --summary # resumo de erros de memória registrados
ras-mc-ctl --errors # lista detalhada
No Windows Server (PowerShell):
Get-CimInstance Win32_PhysicalMemoryArray | Select-Object MemoryErrorCorrection
Valor 6 indica ECC multi-bit, 5 ECC de bit único e 3 sem correção.
O log de eventos do IPMI/iLO (SEL) também registra erros corrigíveis e não corrigíveis, inclusive indicando o slot do pente afetado.
Perguntas frequentes
Memória ECC é mais lenta?
A diferença de desempenho é muito pequena, normalmente imperceptível nas aplicações. Em troca, você ganha integridade de dados.
Posso misturar memória ECC e não ECC?
Não é recomendado e, em servidores com RDIMM, não funciona: as placas exigem pentes do mesmo tipo.
Erros corrigidos são motivo de preocupação?
Um ou outro erro esporádico é normal. Muitos erros corrigidos no mesmo pente, ou aumentando com o tempo, indicam que ele deve ser trocado. Um erro não corrigível é sempre motivo para acionar o suporte.
Preciso de ECC em um servidor pequeno?
Para qualquer servidor que guarde dados importantes (banco de dados, arquivos, ERP), ECC é fortemente recomendado, independentemente do tamanho.
Leitura complementar
Precisa de ajuda?
Os servidores dedicados da E-Consulters usam memória ECC. Se quiser saber mais sobre as configurações, fale com o nosso comercial. Se você já é cliente e encontrou erros de memória no log, abra um ticket informando o que aparece no SEL do IPMI/iLO.
