ECC versus não ECC

ECC versus não ECC

Eu gostaria de construir um servidor de armazenamento (baseado em GNU/Linux ou FreeBSD) que esteja ligado o tempo todo. Para evitar a corrupção de dados (o que é improvável que aconteça, pois nunca tive esse problema, mas é melhor prevenir do que remediar), gostaria de usar a RAM ECC.

Embora não seja tão bom quanto o EDD (?) (que é bem mais caro) e oferece proteção adicional. O ECC parece corrigir apenas erros de bits únicos.

A RAM registrada ECC só pode ser usada com placas de estação de trabalho/servidor, como Intel Xeon ou AMD interlagos/magny-cours/valencia g34 ou c32.

ECC sem buffer pode ser usado em Intel Xeon lga1155 ou AMD AM3+ em placas Asus.

A segunda opção será muito mais barata no lado do processador e da placa-mãe, e duvido que precise de mais de 16 GB de RAM (4x4 GB ECC sem buffer são os maiores dispositivos acessíveis).

A dúvida que estou tendo é (principalmente em relação à placa asus am3 +): a RAM sem buffer ECC é tão boa quanto a RAM registrada no ECC (do ponto de vista de segurança e confiabilidade)? Ou é uma escolha pior. Não me importo muito com a velocidade.

Mais detalhes: o servidor usará um gabinete de servidor com unidades de até 24 x 3,5'' e deverá consumir o mínimo possível. Nesse sentido, o LGA1155 parece ser uma aposta melhor (TDP ~ 20-95W) versus os outros (>80W) pelo dobro do preço. Qualquer sugestão é bem-vinda. Digamos menos de 120W em modo inativo (~ com 10 discos rígidos de 24).

Responder1

Bem, se você usar apenas 16 GB de RAM - o que não é um intervalo de RAM de servidor - você ficará bem com qualquer RAM/sistema de desktop padrão.

Se for apenas um servidor de armazenamento, você nem precisará de tanto desempenho de CPU.

Como você disse, escolha o Sandy Bridge, ele lhe dará um sistema interessante, de alto desempenho e confiável.

Falando em faixas de 16 GB de RAM, você não precisa se preocupar com coisas de ECC.

Responder2

O ECC parece corrigir apenas erros de bits únicos.

Correto. Para corrigir mais erros seriam necessários mais bits. Do jeito que está, você já usa 10 bits para armazenar 8 bits de informação, 'desperdiçando' 20% dos chips de memória para permitir a correção de um único bit e até dois bits de detecção de erros.

Funciona da seguinte maneira. Imagine um 0ou um 1. Se eu ler qualquer um deles, só espero ter lido a coisa certa. Se um 0 foi transformado em 1 por alguma radiação cósmica ou por um chip defeituoso, nunca saberei.

No passado, tentamos resolver isso com paridade. A paridade adicionava um nono bit a cada 8 bits armazenados. Verificamos quantos zeros e quantos 1 havia no byte. O nono foi definido para tornar o número par. (para paridade par) Se você alguma vez leu um byte e o número estava errado, você sabia que algo estava errado. Você não sabe qual parte estava errada.

O ECC expandiu isso. Ele usa 10 bits e um algoritmo complexo para descobrir quando um único bit foi invertido. Ele também sabe qual era o valor original. Uma maneira muito simples de explicar como isso acontece seria esta:

Substitua todos 0os s por 000. Substitua todos 1os s por 111.

Agora você pode ler seis combinações:
000
001
010
100
101
111

Nunca temos 100% de certeza do que foi armazenado originalmente. Se lermos 000, isso pode ter sido exatamente o 000que esperávamos, ou todos os três bits podem ter sido invertidos. Este último é muito improvável. Os bits não mudam aleatoriamente, embora isso aconteça. Digamos que isso aconteça uma em cada dez vezes para alguns cálculos fáceis (a realidade é muito menor). Isso resulta nas seguintes chances de ler o valor correto:

000-> Qualquer um 000(99,9% de certeza), ou um flip triplo (chance de 1/1000)

001-> Sabemos que algo deu errado. Mas ou foi 000e um bit foi invertido (chance de 1:10), ou foi 111e dois bits foram invertidos (uma chance de 1:100). Então, vamos tratar isso como se lemos, 000mas registramos o erro.

010-> O mesmo que acima.

100-> O mesmo que acima.

011-> O mesmo que acima, mas supondo que fosse um111

101-> O mesmo que acima, mas supondo que fosse um111

110-> O mesmo que acima, mas supondo que fosse um111

111-> Qualquer um 111(99,9% de certeza), ou um flip triplo (chance de 1/1000)

111-> Qualquer um 000(99,9% de certeza), ou um flip triplo (chance de 1/1000)

Os ECCs fazem truques semelhantes, mas com mais eficiência. Para 8 bits (um byte), eles usam apenas 10 bits para detectar e corrigir.


RAM registrada ECC só pode ser usada com placas de estação de trabalho/servidor. ECC sem buffer pode ser usado em Intel Xeon lga1155 ou AMD AM3+ em placas Asus.

Já mencionei o que era a parte ECC, agora a parte registrada vs sem buffer.

Nas CPUs modernas, o controlador de memória está no chip da CPU, começando há muito tempo para os chips AMD Opteron e com a série Core i para a Intel. A maioria das CPUs de desktop se comunica diretamente com os soquetes DIMM que contêm a RAM. Funciona e nenhuma lógica extra é necessária. Isso é barato de construir e a velocidade é alta porque não há atraso entre o controlador de memória e a RAM.

Mas um controlador de memória só pode conduzir uma corrente limitada em altas velocidades. Isso significa que há um limite de quantos soquetes de memória podem ser adicionados a uma placa-mãe. (E para torná-lo mais complexo, quanto os DIMMs podem usar, o que leva a classificações de memória. Vou pular isso, pois já é longo).

Em placas para servidores, muitas vezes você deseja usar mais memória do que em um sistema desktop. Portanto, um buffer de "registro" é adicionado à memória. As leituras dos chips no DIMM são primeiro copiadas para esse buffer. Um ciclo de clock depois, esse buffer se conecta ao controlador de memória para transferir os dados.

Este buffer/registro atrasa as coisas, tornando a memória mais lenta. Isso é indesejável e, portanto, só é usado/necessário em placas que possuem muitos bancos de memória. A maioria das placas de consumo não precisa disso, e a maioria das CPUs de consumo não oferece suporte.

RAM sem buffer diretamente conectada versus RAM com buffer/registrada não é um caso em que uma é melhor ou pior que a outra. Eles apenas têm compensações diferentes em termos de quantos slots de memória você pode ter. A RAM registrada permite mais RAM ao custo de alguma velocidade (e possivelmente despesa). Na maioria dos casos em que você precisa de tanta memória quanto possível, essa memória extra mais do que compensa a RAM rodando a uma velocidade um pouco mais lenta.

A dúvida que estou tendo é (principalmente em relação à placa asus am3 +): a RAM sem buffer ECC é tão boa quanto a RAM registrada no ECC (do ponto de vista de segurança e confiabilidade)? Ou é uma escolha pior. Não me importo muito com a velocidade.**

Do ponto de vista da segurança e estabilidade, o ECC sem buffer e o ECC registrado são iguais.


Mais detalhes: o servidor utilizará um gabinete de servidor com unidades de até 24 x 3 ½'' e deverá consumir o mínimo possível.

24 unidades consumirão muita energia. Quanto depende das unidades. Minha unidade SAS de 140 GB e 15K RPM está consumindo apenas 10 watts em modo inativo, o mesmo que o disco SATA 7k2 de 1 TB. Em uso ambos desenham mais.

Multiplique isso por 24. 24x10 Watts em modo inativo significa 240 watts apenas mantendo os discos girando, superando a resistência do ar. O dobro disso para uso.


Nesse sentido, o LGA1155 parece ser uma aposta melhor (TDP ~ 20-95W) versus os outros (>80W) pelo dobro do preço.

A Intel é melhor em CPUs de baixo consumo de energia, no momento em que este artigo foi escrito e para as CPUs que você mencionou.

Qualquer sugestão é bem-vinda. Digamos menos de 120W em modo inativo (~ com 10 discos rígidos de 24).

Se você optar pelo FreeBSD, dê uma olhada no ZFS. Pode ser ótimo. Muitos de seus recursos mais avançados (por exemplo, desduplicação e/ou compactação) consomem muita energia da CPU e exigem bastante memória. O ZFS para uso básico com ZRAID funcionará bem em ambos os conjuntos de CPU mencionados e com 16 GB, mas se você ativar recursos como desduplicação, deverá examinar cuidadosamente a memória recomendada necessária para a capacidade do seu disco; até 5 GB por TB de armazenamento é recomendado poralguns guias.

Mais duas coisas:

  1. Não vi nada sobre como conectar as unidades. Algumas placas podem ter até 10 portas SATA. Mas para qualquer coisa além disso, você precisará de cartões adicionais. Se você considerar o RAID de hardware, talvez seja melhor planejar isso desde o início.
  2. Falha na unidade: você deve usarMultiplicadores de porta SATAentão observe cuidadosamente como eles agem se uma unidade SATA falhar. Muitas vezes não é bonito. Não é um grande problema para uma configuração doméstica, mas não é de nível empresarial. Talvez você também precise considerar como as unidades individuais lidam com erros. A razão pela qual algumas unidades são rotuladas como sendo para uso "NAS" ou "RAID" é que elas lidam com erros de maneira diferente das unidades normais. Sem RAID, você deseja que a unidade tente novamente quantas vezes for possível. Com RAID,você quer que a unidade falhe rapidamente, para que você possa ler de outra cópia.

Responder3

Duas questões separadas.

ECC versus não ECC

  • use ECC sempre que o tempo de atividade for importante
  • custa mais - precisa de (múltiplos de) 9 chips em vez de 8
  • a placa-mãe deve suportá-lo para usá-lo

Registrado versus sem buffer:

  • Pode ter (muito) mais RAM total instalada com DIMMs registrados
    • Menos tensão elétrica na interface do controlador de memória
  • Mas todos os DIMMs instalados devem ser registrados ou não
    • deve remover DIMMS sem buffer se estiver atualizando para Registrado
  • Também é mais caro e um ciclo mais lento para acessar
    • Unbuffered tem latência um pouco menor, se isso importa
    • todos os acessos aleatórios levam muitos ciclos de qualquer maneira
    • Observe que a latência absoluta de acesso (tempo em nanossegundos) não melhorou muito ao longo do histórico de uso de DRAM em PCs
      • custo, capacidade e largura de banda melhoraram bastante
      • caches de memória escondem a latência para a maioria dos acessos à memória de qualquer maneira
    • Latência mais longa prejudica mais o desempenho em 'tempo real' de thread único
      • geralmente não afeta muito os casos de uso de 'servidor'
    • Nenhuma/mínima diferença na largura de banda e no desempenho geral
      • largura de banda de acesso sequencial não afetada
      • Caches L2/L3 significam que os padrões de acesso reais substituem principalmente linhas por vez no cache, portanto, geralmente são acessos 'burst' de qualquer maneira

informação relacionada