- El soporte de RAM ECC, que había desaparecido de las tablas de especificaciones cuando se lanzó AM5, vuelve a confirmarse con casos en los que funciona con la combinación de Ryzen 7000 “Raphael” y motherboards ASRock
- La prueba se realizó con Ryzen 7950X, ASRock B650E PG Riptide, UEFI 1.28, AGESA 1.0.0.7b y 2 módulos v-color ECC UDIMM de 32 GB; tras el entrenamiento del enlace DDR5, Linux arrancó correctamente
- El ancho de memoria de 72 bits en
dmidecodey la indicaciónMulti-bit ECCson pistas útiles, pero al ser información SMBIOS de UEFI no prueban por sí solas que ECC esté activado - Al consultar directamente el UMC de AMD mediante SMN, el bit 30 de
UmcCapHiindica el estado de activación de ECC; en Linux, conryzen_smu, también se confirmaron valores con ese bit establecido en ambos canales de memoria - Aunque no se inyectaron errores reales, los logs EDAC del kernel de Linux se emiten por una ruta que primero verifica el bit de activación de ECC del UMC, por lo que son una evidencia sólida para determinar si ECC está funcionando
Cambios en el soporte ECC de los Ryzen de escritorio
- Las CPU AMD Ryzen de escritorio han tenido desde hace tiempo como una de sus fortalezas el soporte oficial de RAM ECC
- La mayoría de las series Ryzen 1000 a 5000 podían usar RAM ECC con una motherboard adecuada, sin necesidad de recurrir a CPU más caras de clase workstation
- La página de especificaciones de ASRock B550 Steel Legend es un ejemplo que muestra en detalle la compatibilidad con RAM ECC según la generación de CPU
- En el momento del lanzamiento de Ryzen 7000 “Raphael” y Socket AM5, las menciones al soporte ECC desaparecieron
- Incluso la página de especificaciones de ASRock X670E Taichi, una motherboard AM5 de gama alta, no menciona soporte ECC al momento de redactar esto
- Tras actualizar a un Ryzen 7950X, el rendimiento fue satisfactorio, pero la ausencia de ECC al momento de la compra quedó como una gran decepción
Pruebas de ECC en AM5 iniciadas en el foro de ASRock
- En un tema del foro de ASRock, un usuario llamado ApplesOfEpicness compartió su experiencia haciendo funcionar RAM ECC en firmware AMD AGESA junto con un ingeniero de AMD
- Según comentó, en una motherboard ASRock con UEFI actualizado, hizo un corto entre pines de datos y pines de tierra, y confirmó que el error se reportaba hasta el sistema operativo
- Para las pruebas posteriores se usaron una ASRock B650E PG Riptide y 2 módulos v-color ECC UDIMM de 32 GB
- La UEFI de la motherboard se actualizó a 1.28 y AGESA a 1.0.0.7b
- Tras reemplazar la RAM, el entrenamiento del enlace DDR5 tomó bastante tiempo y luego el sistema arrancó
- En ese sistema, el entrenamiento del enlace de 64 GB de RAM tardó casi 3 minutos
- En Ryzen 7000 de escritorio solo es necesario una vez después de cambiar la RAM o modificar los timings, y la UEFI guarda el resultado en caché para reutilizarlo en arranques posteriores
Indicadores de ECC visibles en Linux y sus límites
- En Linux,
sudo dmidecode -t memorymuestra valores relacionados con ECCError Correction Type: Multi-bit ECCTotal Width: 72 bitsData Width: 64 bits
- Total Width 72 bits es una señal llamativa
- En RAM sin ECC se muestra como 64 bits
- La RAM ECC de 64 bits tiene 8 bits adicionales para datos de paridad
- El EDAC del kernel de Linux también aparece activado
EDAC MC: Ver: 3.0.0EDAC MC0: Giving out device to module amd64_edacEDAC amd64: F19h_M60h detected
Por qué dmidecode por sí solo no alcanza
dmidecodees una herramienta que muestra en formato legible las tablas DMI o SMBIOS de la computadora- Estas tablas contienen información como componentes de hardware, números de serie y revisión del BIOS
- Evitan tener que explorar directamente el hardware real, pero la información mostrada puede no ser confiable
- SMBIOS define estructuras de datos y métodos de acceso para leer información de administración generada por el BIOS
- Permite que el sistema operativo no tenga que explorar directamente los dispositivos
- La información de
dmidecoderelacionada con ECC proviene de UEFI, no del procesador- Parte de la información, como la velocidad de memoria, puede provenir del controlador de memoria
- La información de ECC viene de UEFI, por lo que aunque muestre que la memoria es compatible con ECC, no garantiza que ECC esté realmente activado
- La activación de ECC la determina en última instancia el controlador de memoria del sistema
Cómo consultar directamente el UMC de AMD
- Los procesadores AMD exponen un bus llamado System Management Network, o SMN
- Este bus puede usarse para consultar y configurar el AMD Unified Memory Controller, o UMC
- Según la documentación del AMD UMC en illumos, al consultar el registro
UmcCapHise puede verificar si ECC está activado- La información relacionada no forma parte de la AMD Processor Programming Reference pública, y puede inferirse a partir del código fuente abierto de los kernels Linux e illumos
- El acceso directo a SMN es peligroso
- En especial, los comandos de escritura pueden dañar gravemente la computadora
- No se deben realizar operaciones de escritura en SMN
- En illumos se consultan por separado los dos canales de memoria del procesador Ryzen 7000
- Dirección del canal 0:
0x50df4 - Dirección del canal 1:
0x150df4 - El valor devuelto en ambos canales fue
0x40000030
- Dirección del canal 0:
- Lo importante es el bit 30
- Si este bit está establecido, ECC está activado en el controlador de memoria
Consulta de SMN en Linux con ryzen_smu
- En Linux también se puede acceder al bus SMN con el driver
ryzen_smu- En ese sistema fue necesario un parche para instalarlo
- El driver proporciona el archivo
/sys/kernel/ryzen_smu_drv/smn- Para consultar, se escribe una dirección de 4 bytes en formato little-endian y se lee un resultado de 4 bytes también en formato little-endian
- Los resultados de consultar ambos canales con un script en Python fueron los siguientes
0x00050df4:0x400000000x00150df4:0x40000000
- En el valor devuelto, el
4del primer nibble significa que el bit 30 está establecido, y el controlador de memoria está reportando ECC activado - En Windows, herramientas como SMUDebugTool podrían permitir consultas similares, pero no se garantiza el funcionamiento de esa herramienta
Inyección real de errores y confiabilidad de EDAC
- La forma más segura de verificar el funcionamiento de ECC es inyectar errores reales
- ApplesOfEpicness hizo un corto entre pines de datos y pines de tierra de la motherboard
- Otro método es llevar el overclock de la RAM hasta un punto inestable
- En esta prueba no se hicieron cortos físicos en pines ni overclock repetido de RAM
- El hecho de que el entrenamiento del enlace DDR5 tarde varios minutos cada vez también vuelve más pesada la prueba de overclock
- Hasta ahora no se han observado errores ocurridos naturalmente
- La ruta de mensajes EDAC del kernel de Linux está vinculada con el bit de activación de ECC del UMC de AMD
- El log
Giving out device to moduleproviene deedac_mc_add_mc_with_groups - Esta función se llama desde la ruta
init_one_instance init_one_instancesolo se llama cuandopvt->ops->ecc_enabledes verdadero- Ryzen 7000, es decir Zen 4, pertenece a la family
0x19, y en este caso se usaumc_ecc_enableddeumc_ops
- El log
umc_ecc_enabledverifica el bitUMC_ECC_ENABLEDdeumc_cap_hiUMC_ECC_ENABLEDes el bit 30- En procesadores AMD, el mensaje
EDAC MC0: Giving out device to module amd64_edaces un indicador confiable de que el UMC reportó ECC activado
Conclusión
- Incluso en CPU Ryzen 7000 de escritorio, al menos con la combinación de motherboards ASRock, es relativamente sencillo hacer funcionar RAM ECC
- La información basada en SMBIOS de
dmidecodeno alcanza por sí sola, pero si se combina el bit 30 del UMC con la ruta EDAC de Linux, se puede confirmar de forma más directa el estado de activación de ECC
1 comentarios
Opiniones de Hacker News
Necesito actualizar el procesador y me interesa mucho una configuración con RAM ECC.
Vi una publicación en /r/AMD donde dos personas discutían si los procesadores o motherboards AMD realmente soportan ECC, pero no sé quién tiene razón: https://www.reddit.com/r/Amd/comments/lzxqod/list_of_am4_mot...
Me pregunto si este artículo confirma que la combinación AMD+ASRock realmente usa RAM ECC.
Normalmente aparece en la sección “Memory” con algo como “ECC & Non-ECC, Unbuffered Memory”.
Hay que tener cuidado con la expresión “On-die ECC”, porque es una función que también existe en memorias Non-ECC y no tiene relación con el ECC del que se habla aquí.
Hay que comprar ECC DDR5 UDIMM y no equivocarse comprando ECC DDR5 RDIMM, que no es compatible con motherboards AM5.
Los ECC DDR5 UDIMM pueden tener un ancho de 80 bits o 72 bits; lo importante es que no sean los 64 bits de los Non-ECC DDR5 UDIMM.
Cuando lo revisé antes, ASUS era la que tenía más placas AM5 con soporte ECC, y la PRIME X670E-PRO WIFI era la que más me gustaba porque tenía buena capacidad de expansión PCIe más allá de la ranura de GPU.
El nivel 0 es no soportarlo en absoluto, al punto de que no arranca si se instala RAM ECC; el 1 es que se puede instalar, pero sin usar la función ECC; el 2 es que la circuitería existe, pero el fabricante del motherboard no verificó la detección y corrección de errores; y el 3 es que la función ECC existe y el fabricante la verificó.
En una placa de nivel servidor como Supermicro, se puede esperar el nivel 3.
Cuando en un procesador AMD aparece “ECC supported”, es difícil saber de qué nivel se trata, pero en Intel, si la CPU/chipset dice que soporta ECC, se puede asumir que realmente lo soporta.
Usé a propósito un DIMM ECC defectuoso y pude generar en poco tiempo errores corregibles y no corregibles.
Si todos los demás componentes están presentes, parece poco probable que ASRock no haya hecho el cableado, pero si el kernel dice que hay ECC, yo lo daría por correcto.
Si no, se devuelve la placa como defectuosa y se usa otro fabricante.
Eso sí, es una lástima que no tengan placas X670E mini-ITX/mATX. Eso solo lo tiene ASUS.
dmidecodeinforma un ancho de datos de 128 bits, no 72 bits, pero también reporta corrección de múltiples bits, no solo de un bit.En placas Intel con UDIMM, por ejemplo Supermicro+Xeon, estaba acostumbrado a ver 72 bits, pero esta información parece depender más de cómo reportan el controlador de memoria y el motherboard que del soporte real del hardware.
Aun así, EDAC funciona, se registra el driver correcto y de vez en cuando recibo advertencias en EDAC/RAS de que errores corregibles fueron efectivamente corregidos, así que para mí eso cierra el tema.
Aunque se sale un poco del tema, el soporte ECC que también funciona en la plataforma AM4 más antigua y en núcleos APU Zen3 se ve así, y en mi sistema definitivamente existe.
Es una combinación de ASRock B550M-ITX/ac y AMD Ryzen 5 PRO 5650G, y antes, cuando usaba un Ryzen 5 3600 con una GPU dedicada, funcionaba igual.
En GNU/Linux moderno, para detectar y registrar actividad ECC hay que habilitar el servicio
rasdaemon.Este servicio interpreta MCE y otros errores relacionados con hardware y los guarda en una base de datos; la salida consultada arriba es resultado de eso.
Aunque, pensándolo de nuevo, la frecuencia es bastante alta, así que tal vez el módulo de memoria esté fallando. Sobre todo porque siempre es el mismo módulo y la misma dirección.
https://www.asus.com/global/support/FAQ/1045186/
dmidecodemuestra un ancho de 72 bits, mientras quedmesg | grep -i EDACtambién muestra mucha información que parece indicar que ECC está activado.Pero la salida de ese comando está vacía y solo aparecen “No Memory errors”, “No PCIe AER errors”, “No Extlog errors”, “No MCE errors”.
Me pregunto si hay que activar algo para que se registren los errores, o si
dmidecodeydmesgme engañaron.Buen artículo. Uso RAM ECC también en mi placa Threadripper
Una de las cosas que el equipo de operaciones de Blekko descubrió en placas Intel fue que había que indicarle explícitamente a la placa que reportara realmente los errores corregibles
El valor predeterminado era generar un machine check si había un error no recuperable, y dejar pasar lo demás
Recuerdo que, en unos 1600 sistemas de 192GB, veíamos errores corregibles aproximadamente una vez por semana
En 6 años no recuerdo ni un solo error no recuperable, así que estuvo bastante bien
Teníamos una cantidad similar de equipos y, en promedio, una cantidad similar de RAM; también había errores no recuperables de vez en cuando. Tal vez una o dos veces al año, así que se creó una política
Observábamos si había ocurrido solo una vez; si no volvía a fallar pronto, lo dábamos por bueno, y si volvía a fallar pronto, reemplazábamos la RAM
Las mejores placas de servidor incluso indican con un LED qué módulo de RAM hay que cambiar
Los errores corregibles no los reemplazábamos hasta que el conteo se volvía bastante alto, y sistemas con uno o dos errores por día siguieron funcionando bien durante mucho tiempo
En cambio, también había sistemas que pasaban mucho tiempo en 0 y luego, tras unos pocos errores durante varios días, saltaban a cifras grandes
Un sistema llegó a miles por hora, al punto de volverse inutilizable por el costo de manejar excepciones de machine check, pero como el intervalo de reporte era de 1 hora, no supimos la causa hasta el siguiente reporte
Actualmente uso un Ryzen 3700X y una motherboard ASUS TUF Gaming X570, y necesito más rendimiento de un solo núcleo y más velocidad de NVMe/disco
Ya estoy usando doble GPU, 2 M.2 NVMe y 6 SATA
Estoy considerando una actualización a fin de año; por los carriles PCIe pensé por un momento en Threadripper, pero todavía no hay Threadripper Zen4 y probablemente sea muy caro
Las opciones son subir a un Ryzen 5900X y mantener el resto, o gastar más e ir por un Ryzen AM5 con una motherboard nueva
También miré Intel, pero al ver que se queda en 20 carriles PCIe, me inclino por descartarlo
Quiero agregar un adaptador de 10Gb para sacar algunos discos giratorios afuera, así que necesito más carriles PCIe
El rendimiento multinúcleo del 3700X me alcanza, y si compro una motherboard nueva, por velocidad quiero al menos un espejo de 2 NVMe y 6 o más puertos SATA
No sé cómo será en AMD, pero en las placas Intel normalmente solo una ranura M.2 está conectada directamente al CPU y las otras tres pasan por el chipset, por lo que comparten cuello de botella incluso con la tarjeta Ethernet de 10Gb
Al final fue mucho más rápido comprar una placa con soporte PCIe 5.0 y un único SSD suficientemente grande; tanto las IOPS totales como el throughput fueron mayores que con el arreglo RAID 0 anterior
El 5900X no es una actualización tan grande
Como caso de referencia, Hetzner ofrece desde hace unos meses servidores con CPU Ryzen 7000 y RAM ECC
https://www.hetzner.com/dedicated-rootserver/matrix-ax
El AX52 ofrece RAM ECC como actualización opcional, y el AX102 incluye ECC por defecto
No creo que hayan ofrecido ECC que en realidad no funcione
Por eso probablemente pueda garantizar con seguridad el soporte de ECC de punta a punta
Ojalá los legisladores se pongan las pilas y hagan obligatoria la ECC
Es inquietante que la mayor parte del cómputo se realice en sistemas Non-ECC vulnerables
Es una forma bastante desastrosa de segmentación artificial del mercado
¿Cómo esperas que gente así legisle sobre ECC?
Pero mi sistema Intel con 64GB de RAM Non-ECC funciona medio día todos los días y de noche hiberna; incluso usando CAD 3D, Photoshop, VS Code lleno de extensiones y contenedores Docker en WSL2, casi no veo errores
Tampoco tengo cuelgues ni pantallazos azules
Me pregunto qué debería esperar exactamente de un error de bit flip. Si ocurren bit flips de un solo bit con tanta frecuencia mientras uso casi al máximo los 64GB de RAM, uno pensaría que se manifestarían de alguna forma
No tengo el valor de hacer un corto físico entre pines, ni la paciencia para overclockear la RAM lentamente esperando varios minutos cada vez el entrenamiento del enlace DDR5
Así que me conformo con que el controlador de memoria reporte que ECC está activado
En cambio, ¿qué tal apuntarle aire tibio de una secadora de pelo a la RAM? Antes vi que usaban esa técnica para provocar errores
https://hackaday.com/2022/01/29/blast-chips-with-this-bbq-li...
https://hackaday.com/tag/emfi/
No se recomienda para uso real, pero puede servir para encontrar los límites de la memoria o provocar errores
En mi sistema I7-4770K sin overclock aparecen errores, pero en una vieja placa Supermicro de la generación X10 parece que no se detectan errores aunque la prueba Rowhammer corra indefinidamente
Eso sí, si los sistemas modernos están diseñados para no ser vulnerables a ataques Rowhammer, puede que este método no funcione
Se sabe que la RAM de la Raspberry Pi 4B y del CM4 usa RAM ECC, pero no es el ECC del que se habla aquí
Es ECC on-die y su objetivo es mejorar el rendimiento de fabricación del chip; los errores ECC se corrigen sin reportarse mediante hardware
Supongo que los errores ECC no corregibles simplemente se leerían como datos incorrectos
Me pregunto si los módulos de RAM modernos también usan chips con ECC on-die
El entrenamiento de enlace se puede desactivar en el BIOS, así que se pueden encontrar rápidamente configuraciones de ancho de banda al límite
Los resultados no serán muy repetibles, pero eso no importa
Algunas, quizá todas las placas madre ASUS AM5, tienen soporte ECC oficial
Lo acabo de verificar y aparece tanto en el manual de la placa como en el manual del BIOS del modelo que revisé
Una de las opciones relacionadas del BIOS viene por defecto en Auto, pero contra la intuición, en ese estado queda desactivada, así que hay que cambiarla
El reporte de ECC para estos procesadores entró en Linux 6.5, por lo que los usuarios de Debian Stable tendrán que esperar a que llegue a Backports o salirse del camino estándar
https://www.phoronix.com/news/AMD-EDAC-Ryzen-7000-Series
Si se pudiera ver el valor aplicado realmente, sería más tolerable, pero nueve de cada diez veces no queda claro
Hay rumores de que versiones antiguas de AGESA tenían un bug que impedía que el chipset reconociera y aprovechara correctamente la RAM ECC
Supuestamente ocurría aunque ese chipset debiera soportarla
En la placa madre que estés considerando, conviene verificar que exista una actualización de firmware con al menos AGESA 1.0.0.5 patch C
https://www.reddit.com/r/truenas/comments/10lqofy/
AGESA es parte del firmware de sistemas AMD e inicializa componentes centrales del sistema: https://en.wikipedia.org/wiki/AGESA
Actualicé a AGESA 1.0.0.7b antes de instalar la RAM ECC
No sabía que la serie Ryzen 7000 no indicaba oficialmente soporte ECC
Por ejemplo, la línea ASRock Rack lo soporta: https://www.asrockrack.com/general/productdetail.asp?Model=1...
Esta placa madre ASUS también afirma soportar ECC: https://www.asus.com/us/motherboards-components/motherboards...
Ninguna de las dos existía cuando compré mi primera placa madre AM5. Fue justo después del lanzamiento y, como las cifras de rendimiento eran demasiado buenas, me lancé temprano
Todos los CPU Ryzen 7000 que se venden actualmente tienen soporte ECC oficial, pero también se requiere soporte de la placa madre
Este tipo de soporte ECC condicional existe desde siempre en los CPU de consumo de AMD, remontándose hasta el Athlon 64, pero creo que es la primera vez que lo veo mencionado en el material de marketing de AMD para la serie Ryzen 7000
Lo que decía el autor es que en la documentación de la placa ASRock desapareció la mención al soporte ECC
ASRock había indicado soporte ECC en placas Ryzen anteriores, así que fue un cambio llamativo
Ejemplo de la página de especificaciones del Ryzen 5 7600: https://www.amd.com/en/product/12756#:~:text=ECC%20Support,R...)
Además, se confunde con el ECC on-chip que usa toda DDR5
DDR5 necesita ECC on-chip para corregir errores que ocurren durante el funcionamiento normal, pero no es ECC que proteja también los datos transmitidos al CPU a través del bus de memoria