Confirmado o suporte a RAM ECC nos CPUs desktop AMD Ryzen 7000
(sunshowers.io)- O suporte a RAM ECC, que havia desaparecido da tabela de especificações no lançamento do AM5, foi confirmado novamente em um caso funcional com a combinação de Ryzen 7000 “Raphael” e placa-mãe ASRock
- O teste foi realizado com Ryzen 7950X, ASRock B650E PG Riptide, UEFI 1.28, AGESA 1.0.0.7b e dois módulos v-color ECC UDIMM de 32 GB, e o sistema conseguiu inicializar o Linux após o link training do DDR5
- A largura de memória de 72 bits e a indicação
Multi-bit ECCnodmidecodesão pistas úteis, mas como essas informações vêm do SMBIOS da UEFI, não provam sozinhas que o ECC está realmente ativado - Consultando diretamente o UMC da AMD via SMN, o bit 30 de
UmcCapHiindica o estado de ativação do ECC, e no Linux também foi confirmado peloryzen_smuque esse bit está definido nos dois canais de memória - Embora não tenha havido injeção real de erros, o log EDAC do kernel Linux é emitido por um caminho que verifica o bit de ativação de ECC no UMC, o que serve como forte evidência de que o ECC está funcionando
Mudanças no suporte a ECC nos desktops Ryzen
- Os CPUs desktop AMD Ryzen historicamente tinham como um dos pontos fortes o suporte oficial a RAM ECC
- A maior parte das séries Ryzen 1000 a 5000 podia usar RAM ECC com a placa-mãe adequada, sem necessidade de CPUs workstation mais caros
- A página de especificações da ASRock B550 Steel Legend é um exemplo de como a compatibilidade com RAM ECC era detalhada por geração de CPU
- No lançamento do Ryzen 7000 “Raphael” e do Socket AM5, as menções ao suporte a ECC desapareceram
- Até na página de especificações da ASRock X670E Taichi, uma placa-mãe AM5 de alto custo, não há menção a suporte a ECC no momento da escrita
- Embora o desempenho após o upgrade para o Ryzen 7950X tenha sido satisfatório, a ausência de ECC na época da compra ficou como uma grande frustração
O teste de ECC no AM5 que começou no fórum da ASRock
- No tópico do fórum da ASRock, um usuário chamado ApplesOfEpicness compartilhou a experiência de fazer a RAM ECC funcionar no firmware AMD AGESA junto com um engenheiro da AMD
- Segundo ele, em uma placa-mãe ASRock com UEFI atualizada, foi possível confirmar que erros eram reportados ao sistema operacional ao curto-circuitar pinos de dados e de aterramento
- Depois disso, o teste usou a ASRock B650E PG Riptide e dois módulos v-color ECC UDIMM de 32 GB
- A UEFI da placa-mãe foi atualizada para 1.28, e o AGESA para 1.0.0.7b
- Após a troca da RAM, o sistema inicializou depois de um longo processo de link training do DDR5
- Nesse sistema, o link training com 64 GB de RAM levou quase 3 minutos
- Nos desktops Ryzen 7000, isso só é necessário uma vez após troca de RAM ou alteração de timings, e a UEFI armazena o resultado em cache para reutilizá-lo nos boots seguintes
Indicações de ECC no Linux e suas limitações
- No Linux,
sudo dmidecode -t memorymostra valores relacionados a ECCError Correction Type: Multi-bit ECCTotal Width: 72 bitsData Width: 64 bits
- A largura total de 72 bits é um sinal chamativo
- Em RAM sem ECC, o valor aparece como 64 bits
- RAM ECC de 64 bits tem 8 bits adicionais para dados de paridade
- O EDAC do kernel Linux também apareceu como ativo
EDAC MC: Ver: 3.0.0EDAC MC0: Giving out device to module amd64_edacEDAC amd64: F19h_M60h detected
Por que só o dmidecode não basta
dmidecodeé uma ferramenta que exibe de forma legível as tabelas DMI ou SMBIOS do computador- Essas tabelas contêm informações como componentes de hardware, números de série e revisão da BIOS
- Isso evita ter de sondar diretamente o hardware, mas as informações exibidas podem não ser confiáveis
- O SMBIOS define estruturas de dados e formas de acesso para ler informações de gerenciamento criadas pela BIOS
- Isso permite que o sistema operacional não precise sondar diretamente os dispositivos
- As informações de ECC vistas no
dmidecodevêm da UEFI, não do processador- Alguns dados, como velocidade da memória, podem vir do controlador de memória
- Já as informações de ECC vêm da UEFI, então elas mostram que a memória é compatível com ECC, mas não garantem que o ECC esteja de fato ativado
- Em última instância, quem decide se o ECC está ativado é o controlador de memória do sistema
Como consultar diretamente o UMC da AMD
- Os processadores AMD expõem um barramento chamado System Management Network, ou SMN
- Esse barramento pode ser usado para consultar e configurar o AMD Unified Memory Controller, ou UMC
- Pela documentação do UMC da AMD no illumos, é possível consultar o registrador
UmcCapHipara verificar se o ECC está ativado- Essas informações não fazem parte da referência pública AMD Processor Programming Reference, mas podem ser identificadas no código-fonte aberto dos kernels Linux e illumos
- O acesso direto ao SMN é arriscado
- Especialmente comandos de escrita podem danificar seriamente o computador
- Não se deve realizar operações de escrita no SMN
- No illumos, os dois canais de memória do Ryzen 7000 são consultados separadamente
- Endereço do canal 0:
0x50df4 - Endereço do canal 1:
0x150df4 - O valor retornado foi
0x40000030em ambos os canais
- Endereço do canal 0:
- O ponto principal é o bit 30
- Se esse bit estiver definido, o ECC está ativado no controlador de memória
Consultando o SMN no Linux com ryzen_smu
- No Linux, também é possível acessar o barramento SMN com o driver
ryzen_smu- Nesse sistema, foi necessário aplicar um patch para instalação
- O driver fornece o arquivo
/sys/kernel/ryzen_smu_drv/smn- Para consultar, é preciso escrever um endereço de 4 bytes em formato little-endian e ler o resultado de 4 bytes também em little-endian
- O resultado da consulta aos dois canais com um script em Python foi o seguinte
0x00050df4:0x400000000x00150df4:0x40000000
- No valor retornado, o
4no primeiro nibble significa que o bit 30 está definido, e o controlador de memória está reportando o ECC como ativado - No Windows, ferramentas como SMUDebugTool talvez permitam consultas semelhantes, mas o funcionamento dessa ferramenta não é garantido
Injeção real de erros e confiabilidade do EDAC
- A forma mais confiável de validar o funcionamento do ECC é injetar erros reais
- ApplesOfEpicness fez um curto entre pinos de dados e de aterramento da placa-mãe
- Outro método é forçar overclock da RAM até um ponto instável
- Neste teste, não foram feitos curto físico em pinos nem overclock repetido da RAM
- O fato de o link training do DDR5 levar vários minutos a cada tentativa também torna o teste de overclock mais trabalhoso
- Até o momento, não foram observados erros naturais
- O caminho das mensagens do EDAC no kernel Linux está ligado ao bit de ativação de ECC do UMC da AMD
- O log
Giving out device to modulevem deedac_mc_add_mc_with_groups - Essa função é chamada pelo caminho
init_one_instance init_one_instancesó é chamado quandopvt->ops->ecc_enabledé verdadeiro- No Ryzen 7000, ou seja, Zen 4, a family é
0x19, e nesse caso é usadoumc_opscomumc_ecc_enabled
- O log
umc_ecc_enabledverifica o bitUMC_ECC_ENABLEDemumc_cap_hiUMC_ECC_ENABLEDé o bit 30- Nos processadores AMD, a mensagem
EDAC MC0: Giving out device to module amd64_edacé um indicador confiável de que o UMC reportou o ECC como ativado
Conclusão
- Mesmo nos CPUs desktop Ryzen 7000, pelo menos em combinação com placas-mãe ASRock, é relativamente fácil fazer a RAM ECC funcionar
- As informações baseadas em SMBIOS do
dmidecodenão bastam sozinhas, mas observar em conjunto o bit 30 do UMC e o caminho do EDAC no Linux permite confirmar de forma mais direta que o ECC está ativado
1 comentários
Opiniões do Hacker News
Preciso fazer upgrade do processador e tenho bastante interesse em uma configuração com RAM ECC
Vi uma discussão no /r/AMD entre duas pessoas sobre processadores ou placas-mãe AMD realmente oferecerem suporte a ECC, mas não sei quem está certo: https://www.reddit.com/r/Amd/comments/lzxqod/list_of_am4_mot...
Fico curioso se este texto confirma que a combinação AMD+ASRock é realmente RAM ECC
Normalmente, na seção “Memory”, aparece algo como “ECC & Non-ECC, Unbuffered Memory”
É preciso tomar cuidado porque a expressão “On-die ECC” é um recurso que também existe em memórias Non-ECC e não tem relação com o ECC mencionado aqui
É necessário comprar ECC DDR5 UDIMM, e não comprar por engano ECC DDR5 RDIMM, que não é compatível com placas-mãe AM5
ECC DDR5 UDIMM pode ter largura de 80 bits ou 72 bits; só não pode ser a de 64 bits das Non-ECC DDR5 UDIMM
Quando verifiquei antes, a ASUS era quem tinha mais placas AM5 com suporte a ECC, e eu gostava mais da PRIME X670E-PRO WIFI por ter boa expansibilidade PCIe além do slot de GPU
O nível 0 é não oferecer suporte nenhum, a ponto de o sistema não dar boot se você espetar RAM ECC; o 1 é aceitar a memória, mas não usar a função ECC; o 2 é ter o circuito, mas sem o fabricante da placa-mãe validar a detecção e correção de erros; o 3 é ter a função ECC e ela ser validada pelo fabricante
Em uma placa de nível servidor, como Supermicro, dá para esperar o nível 3
Quando aparece “ECC supported” em um processador AMD, é difícil saber qual é o nível, mas, no caso da Intel, se a CPU/chipset diz que oferece suporte a ECC, dá para considerar que oferece suporte de fato
Usei de propósito um DIMM ECC defeituoso e consegui gerar, em pouco tempo, erros corrigíveis e erros incorrigíveis
Como todos os outros componentes estão presentes, parece improvável que a ASRock não tenha feito o cabeamento, mas, se o kernel diz que há ECC, eu consideraria correto
Caso contrário, basta devolver a placa como defeituosa e usar outro fabricante
Só é uma pena não haver placa X670E mini-ITX/mATX. Isso só a ASUS tem
O
dmidecodeinforma largura de dados de 128 bits, não 72 bits, mas também informa correção de múltiplos bits, não apenas de bit únicoEm UDIMM de placas Intel, por exemplo Supermicro+Xeon, eu estava acostumado com 72 bits, mas essa informação parece depender mais da forma como o controlador de memória e a placa-mãe reportam do que do suporte real do hardware
Ainda assim, o EDAC funciona, o driver correto é registrado, e às vezes recebo avisos no EDAC/RAS de que erros corrigíveis foram de fato corrigidos; então, para mim, isso resolve a questão
Fugindo um pouco do assunto, mas o suporte a ECC que funciona também na plataforma AM4 antiga e em núcleos Zen3 APU aparece assim, e no meu sistema ele definitivamente existe
É uma combinação ASRock B550M-ITX/ac com AMD Ryzen 5 PRO 5650G, e antes, quando eu usava um Ryzen 5 3600 com GPU dedicada, funcionava do mesmo jeito
No GNU/Linux moderno, para detectar e registrar atividade de ECC, é preciso ativar o serviço
rasdaemonEsse serviço interpreta MCE e outros erros relacionados a hardware e os armazena em um banco de dados; a saída consultada acima também é resultado disso
Mas, pensando melhor, a frequência é bem alta, então o módulo de memória pode estar com defeito. Especialmente porque é sempre o mesmo módulo e o mesmo endereço
https://www.asus.com/global/support/FAQ/1045186/
dmidecodemostra largura de 72 bits;dmesg | grep -i EDACtambém mostra muitas informações que parecem indicar que o ECC está ativadoMas a saída desse comando fica vazia e só aparecem “No Memory errors”, “No PCIe AER errors”, “No Extlog errors”, “No MCE errors”
Fico me perguntando se preciso ativar algo para que os erros sejam registrados, ou se fui enganado pelo
dmidecodee pelodmesgBom texto. Uso ECC RAM também na minha placa Threadripper
Uma das coisas que a equipe de operações do Blekko descobriu em placas Intel foi que era preciso dizer explicitamente à placa para reportar erros corrigíveis de fato
O padrão era emitir um machine check se houvesse um erro irrecuperável e, fora isso, simplesmente seguir em frente
Pelo que me lembro, em cerca de 1600 sistemas com 192 GB, víamos erros corrigíveis aproximadamente uma vez por semana
Em 6 anos não me lembro de nenhum erro irrecuperável, então foi bem bom
Tínhamos uma quantidade parecida de máquinas e, em média, uma quantidade de RAM semelhante, e também havia erros irrecuperáveis de vez em quando. Provavelmente uma ou duas vezes por ano, então criamos uma política
Observávamos para ver se tinha acontecido só uma vez; se não falhasse de novo logo, considerávamos ok, e se falhasse de novo logo, trocávamos a RAM
Placas de servidor melhores às vezes indicam por LED qual módulo de RAM deve ser trocado
Para erros corrigíveis, não trocávamos até a contagem ficar bem alta, e havia sistemas com um ou dois erros por dia que continuaram rodando bem por muito tempo
Por outro lado, também havia sistemas que ficavam muito tempo com 0 ocorrências e, depois de alguns dias com poucas ocorrências, saltavam para números grandes
Um sistema chegou a milhares por hora, a ponto de ficar inutilizável por causa do custo de tratar exceções de machine check, mas o intervalo de relatório era de 1 hora, então não sabíamos a causa até o relatório seguinte
Atualmente uso um Ryzen 3700X e uma placa-mãe ASUS TUF Gaming X570, e preciso de mais desempenho single-core e velocidade de NVMe/disco
Já uso GPU dupla, 2 M.2 NVMe e 6 SATA
Estou considerando um upgrade no fim do ano; por causa das pistas PCIe, cheguei a pensar brevemente em Threadripper, mas ainda não há Zen4 Threadripper e o preço provavelmente será muito alto
As opções são subir para um Ryzen 5900X e manter o resto, ou gastar mais e ir para um Ryzen AM5 com uma placa-mãe nova
Também olhei Intel, mas ao ver que para em 20 pistas PCIe, estou inclinado a descartar
Quero adicionar um adaptador de 10 Gb para mover alguns discos rígidos para fora, então preciso de mais pistas PCIe
O desempenho multicore do 3700X é suficiente, e se eu comprar uma placa-mãe nova, quero pelo menos 2 NVMe em espelho e 6 ou mais portas SATA por velocidade
Não sei como é do lado da AMD, mas placas Intel normalmente têm só um slot M.2 ligado diretamente à CPU, e os outros três passam pelo chipset, então acabam compartilhando gargalo também com a placa Ethernet de 10 Gb
No fim, foi muito mais rápido comprar uma placa com suporte a PCIe 5.0 e um único SSD suficientemente grande, e tanto o IOPS total quanto a taxa de transferência ficaram maiores que no arranjo RAID 0 anterior
O 5900X não é um upgrade tão grande assim
Como caso de referência, a Hetzner oferece servidores com CPUs Ryzen 7000 e ECC RAM há alguns meses
https://www.hetzner.com/dedicated-rootserver/matrix-ax
O AX52 oferece ECC RAM como upgrade opcional, e o AX102 vem com ECC por padrão
Não acho provável que eles estivessem oferecendo ECC que não funciona de verdade
Então eles devem conseguir garantir suporte a ECC de ponta a ponta
Gostaria que os legisladores acordassem e tornassem ECC obrigatório
É preocupante que a maior parte da computação seja feita em sistemas Non-ECC vulneráveis
É uma forma bem ruim de segmentação artificial de mercado
Como esperar que gente assim legisle sobre ECC?
Mas meu sistema Intel, com 64 GB de RAM Non-ECC, roda meio dia todos os dias e hiberna à noite; uso 3D CAD, Photoshop, VS Code cheio de extensões e contêineres Docker no WSL2, e quase não vejo erros
Também não há travamentos nem tela azul
Fico curioso sobre o que exatamente se deve esperar de um erro de inversão de bit. Se inversões de um único bit acontecessem com tanta frequência numa situação em que quase todos os 64 GB de RAM estão em uso, imagino que apareceriam de alguma forma
Não tenho coragem de curto-circuitar pinos fisicamente, nem paciência para fazer overclock da RAM devagar esperando vários minutos pelo treinamento do link DDR5 a cada vez
Então me contento com o controlador de memória reportando que o ECC está ativado
Mas que tal jogar ar quente de um secador de cabelo na RAM? Já vi essa técnica ser usada no passado para gerar erros
https://hackaday.com/2022/01/29/blast-chips-with-this-bbq-li...
https://hackaday.com/tag/emfi/
Não é recomendado para uso real, mas pode servir para encontrar os limites da memória ou criar erros
No meu sistema com I7-4770K sem overclock, os erros aparecem, mas uma placa antiga da geração Supermicro X10 parece não detectar erros mesmo rodando um teste Rowhammer indefinidamente
Porém, se sistemas modernos forem projetados para não serem vulneráveis a ataques Rowhammer, esse método pode não funcionar
A RAM do Raspberry Pi 4B e do CM4 é conhecida por usar RAM ECC, mas não é o mesmo ECC de que estamos falando aqui
Trata-se de ECC on-die, voltado a melhorar o rendimento dos chips, e os erros ECC são corrigidos sem serem reportados pelo hardware
Imagino que erros ECC incorrigíveis simplesmente sejam lidos como dados incorretos
Fico curioso se módulos de RAM modernos também usam chips com ECC on-die
O treinamento do link pode ser desativado no BIOS, permitindo encontrar rapidamente uma configuração de largura de banda no limite
O resultado talvez não seja muito repetível, mas isso não importa
Algumas, talvez todas, as placas-mãe ASUS AM5 têm suporte oficial a ECC
Acabei de verificar, e isso aparece tanto no manual da placa quanto no manual do BIOS do modelo em questão
Uma das configurações relacionadas no BIOS tem Auto como padrão, mas, contra a intuição, nesse estado ela fica desativada, então é preciso alterá-la
O reporte de ECC desses processadores entrou no Linux 6.5, então usuários do Debian Stable precisam esperar chegar aos Backports ou sair do caminho padrão
https://www.phoronix.com/news/AMD-EDAC-Ryzen-7000-Series
Se desse para ver o valor realmente aplicado, até seria melhor, mas em nove de cada dez vezes isso não fica claro
Há rumores de que versões antigas do AGESA tinham um bug que impedia o chipset de reconhecer e usar corretamente RAM ECC
Mesmo quando aquele chipset deveria oferecer suporte
Para a placa-mãe que você estiver considerando, é preciso conferir se existe atualização de firmware com pelo menos AGESA 1.0.0.5 patch C
https://www.reddit.com/r/truenas/comments/10lqofy/
AGESA é parte do firmware de sistemas AMD e inicializa componentes centrais do sistema: https://en.wikipedia.org/wiki/AGESA
Atualizei para AGESA 1.0.0.7b antes de instalar RAM ECC
Eu não sabia que a série Ryzen 7000 não declarava oficialmente suporte a ECC
Por exemplo, a linha ASRock Rack oferece suporte: https://www.asrockrack.com/general/productdetail.asp?Model=1...
Esta placa-mãe da ASUS também afirma ter suporte a ECC: https://www.asus.com/us/motherboards-components/motherboards...
Nenhuma das duas existia quando comprei minha primeira placa-mãe AM5. Foi logo após o lançamento, e os números de desempenho eram tão bons que comprei cedo
Todas as CPUs Ryzen 7000 atualmente à venda têm suporte oficial a ECC, mas também é necessário suporte da placa-mãe
Esse tipo de suporte condicional a ECC sempre existiu nos CPUs AMD de consumo, remontando ao Athlon 64, mas acho que é a primeira vez que vejo isso declarado nos materiais de marketing da AMD para a série Ryzen 7000
O que o autor quis dizer é que a menção ao suporte a ECC desapareceu da documentação da placa-mãe ASRock
Como a ASRock vinha declarando suporte a ECC em placas-mãe Ryzen anteriores, foi uma mudança notável
Exemplo da página de especificações do Ryzen 5 7600: https://www.amd.com/en/product/12756#:~:text=ECC%20Support,R...)
Além disso, há confusão com o ECC on-chip usado por todos os DDR5
DDR5 precisa de ECC on-chip para corrigir erros que ocorrem durante a operação normal, mas isso não é ECC que proteja também os dados transmitidos para a CPU pelo barramento de memória