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.

Esta resposta lhe foi útil? 0 Usuários acharam útil (0 Votos)

Leia também