Pesquisa · Mapa mental

Memória ECC

Memória com código de correção de erro é um tipo de armazenamento de dados de computador que usa um código de correção de erro (ECC) para detectar e corrigir corrupção de dados de n bits que ocorre na memória.

Fonte: Wikipédia (pt)Atualizado em 20/10/2026
01

Contexto: erros de memória

Conceito

Os códigos de correção de erro protegem contra corrupção de dados não detectada e são usados em computadores onde essa corrupção é inaceitável, exemplos sendo aplicações científicas e financeiras, ou em servidores de banco de dados e arquivos. O ECC também pode reduzir o número de falhas em aplicações servidoras multi-usuário e sistemas de máxima disponibilidade. Interferência elétrica ou magnética dentro de um sistema de computador pode fazer com que um único bit de memória de acesso aleatório dinâmica (DRAM) mude espontaneamente para o estado oposto. Inicialmente, pensava-se que isso se devia principalmente a partículas alfa emitidas por contaminantes no material de encapsulamento dos chips, mas pesquisas mostraram que a maioria dos erros brandos únicos em chips DRAM ocorre como resultado de radiação de fundo, principalmente nêutrons de secundários de raios cósmicos, que podem alterar o conteúdo de uma ou mais células de memória ou interferir na circuitaria usada para ler ou escrever nelas. Assim, as taxas de erro aumentam rapidamente com o aumento da altitude; por exemplo, em comparação com o nível do mar, a taxa de fluxo de nêutrons é 3,5 vezes maior a 1,5 km e 300 vezes maior a 10–12 km (a altitude de cruzeiro de aviões comerciais). Como resultado, sistemas que operam em altas altitudes exigem provisões especiais para confiabilidade.

Taxas de erro no mundo real e consequências

Trabalhos publicados entre 2007 e 2009 mostraram taxas de erro amplamente variáveis, com mais de 7 ordens de magnitude de diferença, variando de 10−10 erro/(bit·h), aproximadamente um erro de bit por hora por gigabyte de memória, a 10−17 erro/(bit·h), aproximadamente um erro de bit por milênio por gigabyte de memória. Um estudo em larga escala baseado no grande número de servidores do Google foi apresentado na conferência SIGMETRICS/Performance '09. A taxa de erro real encontrada foi várias ordens de magnitude maior do que os estudos anteriores de pequena escala ou laboratoriais, com entre 25.000 (2,5×10−11 erro/(bit·h)) e 70.000 (7,0×10−11 erro/(bit·h), ou 1 erro de bit por gigabyte de RAM a cada 1,8 horas) erros por bilhão de horas de dispositivo por megabit. Mais de 8% dos módulos de memória DIMM foram afetados por erros por ano.

Soluções

Várias abordagens foram desenvolvidas para lidar com inversões indesejadas de bits, incluindo programação consciente de imunidade, memória com paridade de RAM e memória com ECC. Este problema pode ser mitigado usando módulos DRAM que incluem bits de memória extras e controladores de memória que exploram esses bits. Esses bits extras são usados para registrar paridade ou para usar um código de correção de erro (ECC). A paridade permite a detecção de todos os erros de bit único (na verdade, qualquer número ímpar de bits errados), mas não a correção, então o sistema tem que continuar (apenas sinalizando o problema) ou parar. Códigos de correção de erro permitem que mais erros sejam corrigidos; quanto depende do tipo exato de memória usada.

02

Esquemas

Subsistemas de memória modernos podem fornecer integridade de dados por meio de um ou mais dos seguintes esquemas:

Relato de erros

Muitas implementações iniciais de memória ECC, assim como o ECC no dado, mascaram erros corrigíveis, agindo "como se" o erro nunca tivesse ocorrido, e relatam apenas erros não corrigíveis. Implementações modernas registram tanto erros corrigíveis (CE) quanto erros não corrigíveis (UE). Algumas pessoas substituem proativamente módulos de memória que exibem altas taxas de erro, a fim de reduzir a probabilidade de eventos de erro não corrigíveis.

03

Implementações

Memória de servidor padrão: SECDEC de banda lateral

A memória de servidor padrão é projetada para um código de Hamming de correção de erro único e detecção de erro duplo (SECDED), que permite que um erro de bit único seja corrigido e erros de bit duplo sejam detectados por palavra (a unidade de transferência do barramento). Desde o DDR SDRAM, a largura de barramento padrão (tamanho da palavra) no que diz respeito à memória é de 64 bits. Como resultado, a configuração típica entre DDR e DDR4 é uma palavra de 72 bits com 64 bits de dados e 8 bits de verificação. O DDR5 SDRAM divide o barramento em dois subcanais de 32 bits um tanto independentes, então a memória ECC usa 80 bits de largura total, divididos entre dois canais de 40 bits (32 dados, 8 verificação). O ECC também é usado com tamanhos menores e maiores.

Disposição dos bits

A detecção e correção de erro depende de uma expectativa dos tipos de erros que ocorrem. Implicitamente, assume-se que a falha de cada bit em uma palavra de memória é independente, resultando na improbabilidade de dois erros simultâneos. Esse era o caso quando os chips de memória tinham um bit de largura, o que era típico na primeira metade da década de 1980; desenvolvimentos posteriores moveram muitos bits para o mesmo chip. Essa fraqueza é abordada por várias tecnologias, incluindo o Chipkill da IBM, o Extended ECC da Sun Microsystems, o Chipspare da Hewlett-Packard e o Single Device Data Correction (SDDC) da Intel, todos os quais garantem que a falha de um chip de memória afete apenas um bit por palavra ECC. Isso é conseguido espalhando os bits das palavras ECC entre os chips, uma forma de interleaving. Para garantir que cada chip receba apenas um bit por palavra, pode ser necessário intercalar entre vários módulos de memória (pentes).

Pelo próprio chip de memória

Alguns chips DRAM incluem circuitos internos de correção de erros "no chip" ou "no dado", que permitem que sistemas com controladores de memória não ECC ainda obtenham a maioria dos benefícios da memória ECC. Em alguns sistemas, um efeito semelhante pode ser alcançado usando módulos de memória EOS. Como mencionado acima, o ECC no dado é obrigatório no DDR5 e LPDDR6. No entanto, sua falta de relato significa que muito pouco se sabe sobre o verdadeiro estado do chip de memória até que os erros excedam a capacidade do algoritmo no dado de realizar a correção; nenhuma informação sobre quanta "margem" existe é transmitida. Algoritmos sofisticados foram construídos para inferir a existência de erros corrigidos com base em erros não corrigidos.

Localização da correção

Muitos sistemas de memória ECC usam um circuito EDAC "externo" entre a CPU e a memória. Alguns sistemas com memória ECC usam sistemas EDAC internos e externos; o sistema EDAC externo deve ser projetado para corrigir certos erros que o sistema EDAC interno não consegue corrigir. CPUs modernas de desktop e servidor integram o circuito EDAC na CPU, mesmo antes da mudança para controladores de memória integrados à CPU, que estão relacionados à arquitetura NUMA. A integração da CPU permite um sistema EDAC com penalidade zero durante a operação sem erros.

Algoritmos de correção

Em 2009, os códigos de correção de erro mais comuns usavam códigos de Hamming ou Hsiao que fornecem correção de erro de bit único e detecção de erro de bit duplo (SEC-DED). Outros códigos de correção de erro foram propostos para proteger a memória – códigos de correção de erro duplo e detecção de erro triplo (DEC-TED), códigos de correção de nibble único e detecção de nibble duplo (SNC-DND), códigos de correção de erro Reed–Solomon, etc. No entanto, na prática, a correção de múltiplos bits é geralmente implementada por interleaving de múltiplos códigos SEC-DED. Pesquisas iniciais tentaram minimizar a área e os atrasos dos circuitos ECC. Hamming foi o primeiro a demonstrar que códigos SEC-DED eram possíveis com uma determinada matriz de verificação. Hsiao mostrou que uma matriz alternativa com colunas de peso ímpar fornece capacidade SEC-DED com menos área de hardware e menor atraso do que os códigos SEC-DED de Hamming tradicionais. Pesquisas mais recentes também tentam minimizar a energia, além de minimizar a área e o atraso.

Computadores pessoais

Seymour Cray disse famosamente "paridade é para fazendeiros" quando questionado por que omitiu isso do CDC 6600. Mais tarde, ele incluiu a paridade no CDC 7600, o que fez com que os especialistas observassem que "aparentemente muitos fazendeiros compram computadores". O IBM PC original e todos os PCs até o início dos anos 1990 usavam verificação de paridade. Os posteriores, na maioria, não. A maioria dos caminhos de dados em um computador pessoal da década de 2020, incluindo PCIe, SATA, interconexão chip a chip e armazenamento em disco, têm alguma forma de proteção ECC. A falta de ECC na memória principal é comparativamente incomum, especialmente dado o tamanho e a maior probabilidade de corrupção. Linus Torvalds escreveu uma longa postagem em um fórum em 2021 atacando a escolha da Intel de abandonar o suporte a ECC em plataformas desktop, quando as plataformas desktop contemporâneas da AMD podiam usar (mas não necessariamente ativar o recurso ECC) DIMMs registrados com suporte ECC.

04

Cache

Muitas CPUs usam códigos de correção de erro no cache no chip, incluindo os processadores Intel Itanium, Xeon, Core e Pentium (desde a microarquitetura P6), os processadores AMD Athlon, Opteron, todos os processadores baseados em Zen- e Zen+ (EPYC, EPYC Embedded, Ryzen e Ryzen Threadripper), e o DEC Alpha 21264. Desde 2006[update], EDC/ECC e ECC/ECC são as duas técnicas de proteção de erro de cache mais comuns usadas em microprocessadores comerciais. A técnica EDC/ECC usa um código de detecção de erro (EDC) no cache de nível 1. Se um erro é detectado, os dados são recuperados do cache de nível 2 protegido por ECC. A técnica ECC/ECC usa um cache de nível 1 protegido por ECC e um cache de nível 2 protegido por ECC. CPUs que usam a técnica EDC/ECC sempre escrevem (write-through) todos os STOREs para o cache de nível 2, de modo que, quando um erro é detectado durante uma leitura do cache de dados de nível 1, uma cópia desses dados pode ser recuperada do cache de nível 2.

05

Memória registrada

A memória registrada, ou bufferizada, não é o mesmo que ECC; as tecnologias executam funções diferentes. É comum que a memória usada em servidores seja registrada, para permitir o uso de muitos módulos de memória sem problemas elétricos, e ECC, para integridade dos dados.

06

Custo e benefícios

O uso de ECC para aumentar a segurança dos dados geralmente vem com um custo maior, resultando em um desempenho marginalmente mais lento e custos de memória mais altos. A memória ECC é mais cara do que a memória não ECC devido à sua funcionalidade adicional de verificação de erros. O custo adicional da memória ECC para 1 GB em 2010 varia entre $0 e $15, dependendo do desempenho e do fabricante. O design do ECC e seu propósito em cargas de trabalho de alta confiabilidade o posicionaram para ter sobrecarga adicional para validação e os projetos adicionais de nível de circuito dentro da memória. As características mencionadas geralmente resultam em custos mais altos para a implementação do ECC. Os fabricantes de placas-mãe podem optar por adicionar compatibilidade com ECC de níveis variados, dependendo do segmento de mercado. Algumas placas e processadores habilitados para ECC são capazes de suportar ECC sem buffer (não registrado), mas também funcionarão com memória não ECC; o firmware do sistema ativa a funcionalidade ECC se a memória ECC estiver instalada.

Vídeos recomendados

Fontes consultadas

Continue pesquisando