2 puntos por GN⁺ 2023-10-10 | 1 comentarios | Compartir por WhatsApp
  • 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 dmidecode y la indicación Multi-bit ECC son 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 UmcCapHi indica el estado de activación de ECC; en Linux, con ryzen_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 memory muestra valores relacionados con ECC
    • Error Correction Type: Multi-bit ECC
    • Total Width: 72 bits
    • Data 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.0
    • EDAC MC0: Giving out device to module amd64_edac
    • EDAC amd64: F19h_M60h detected

Por qué dmidecode por sí solo no alcanza

  • dmidecode es 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 dmidecode relacionada 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 UmcCapHi se 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
  • 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: 0x40000000
    • 0x00150df4: 0x40000000
  • En el valor devuelto, el 4 del 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 module proviene de edac_mc_add_mc_with_groups
    • Esta función se llama desde la ruta init_one_instance
    • init_one_instance solo se llama cuando pvt->ops->ecc_enabled es verdadero
    • Ryzen 7000, es decir Zen 4, pertenece a la family 0x19, y en este caso se usa umc_ecc_enabled de umc_ops
  • umc_ecc_enabled verifica el bit UMC_ECC_ENABLED de umc_cap_hi
    • UMC_ECC_ENABLED es el bit 30
    • En procesadores AMD, el mensaje EDAC MC0: Giving out device to module amd64_edac es 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 dmidecode no 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

 
GN⁺ 2023-10-10
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.

    • Al comprar un motherboard, hay que verificar que las especificaciones indiquen explícitamente soporte 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.
    • En ECC, “soporte” puede tener varios niveles.
      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.
    • No sé en el caso de ASRock, pero en las placas ASUS X570 ECC funciona con seguridad.
      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.
    • Uso ECC en placas ASRock X570 y B550, y ASRock permite ECC unbuffered desde hace bastante tiempo.
      Eso sí, es una lástima que no tengan placas X670E mini-ITX/mATX. Eso solo lo tiene ASUS.
    • Uso una combinación ASRock X570 PG 4S + Ryzen 5 2600 + Kingston 32GB 2666 ECC, y la lista de soporte de CPU/memoria de esta placa también dice que ECC funciona con esta configuración.
      dmidecode informa 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.

    • Con esa frecuencia de errores, es razonable sentir que es difícil confiar en la información que entrega una computadora sin ECC.
      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.
    • Las APU quedan explícitamente fuera del soporte ECC, salvo las SKU PRO.
      https://www.asus.com/global/support/FAQ/1045186/
    • Instalé RAM ECC en un sistema Gigabyte B550I, y dmidecode muestra un ancho de 72 bits, mientras que dmesg | grep -i EDAC tambié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 dmidecode y dmesg me engañaron.
    • Me da curiosidad qué módulos de memoria usas.
  • 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

    • Tuviste mejor suerte. Nuestros sistemas reportaban errores corregibles sin tener que pedirlo aparte
      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

    • Probé usar dos NVMe en espejo, pero hay muchas cosas a tener en cuenta para obtener el máximo rendimiento
      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
    • Me da curiosidad en qué cargas de trabajo la velocidad de NVMe se vuelve un cuello de botella
    • Estoy usando un 5900X, y siento que habría sido mejor esperar y comprar un 5800X3D
    • Si necesitas más, conviene ir por un 5950X, que cuesta alrededor de 4/3 y tiene el doble de núcleos, o considerar un CPU con caché 3D para los UPS de Factorio
      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

    • Tengo entendido que Hetzner fabrica sus propias motherboards o encarga su fabricación
      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

    • Parece que no viste esas audiencias donde los congresistas llamaban a gente como Zuck y les preguntaban cómo usar un celular
      ¿Cómo esperas que gente así legisle sobre ECC?
    • Si los sistemas Non-ECC funcionan perfectamente bien el 99.9999% del tiempo, cuesta decir que sean vulnerables
    • A menudo oigo decir que las máquinas Non-ECC son totalmente vulnerables, y según los cálculos parecería que deberían ocurrir bit flips constantemente
      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

    • Debería bastar con usar un encendedor de barbacoa de propano a corta distancia. Esas cosas generan una cantidad absurda de interferencia electromagnética
      https://hackaday.com/2022/01/29/blast-chips-with-this-bbq-li...
      https://hackaday.com/tag/emfi/
    • Más realisticamente, se puede ajustar en parte y en tiempo real el overclock de memoria en un sistema en ejecución, sin necesidad de entrenamiento de enlace
      No se recomienda para uso real, pero puede servir para encontrar los límites de la memoria o provocar errores
    • ¿Se podría comprobar si un sistema tiene RAM ECC con una prueba Rowhammer?
      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
    • ¿No se podría simplemente acercar un celular al DIMM para provocar errores? Parece algo fácil de probar
    • Crear la posibilidad de tener que refundir y volver a soldar un BGA en una PCBA de E/S de alta velocidad que va a funcionar 10 años parece más arriesgado que hacer un corto entre un par de pines protegidos por diodos
      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

    • Detesto de verdad las opciones Auto del BIOS
      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

    • Viendo el hilo del foro de ASRock, suena a que es cierto
      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

    • Después de publicar esto me enteré de que existen placas madre AM5 que soportan ECC oficialmente
      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
    • Es una mala interpretación del contenido del autor
      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...)
    • Hasta antes de este año era bastante ambiguo y no se mencionaba con claridad
      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