Ir al contenido
  1. Posts/

Congelamientos aleatorios en Linux con Procesadores AMD

·858 palabras·5 mins· loading · loading ·
Linux kernel linux amd opensuse
Autor
Enmanuel Moreira
Ingeniero DevOps de día y aprendiz de Barman en mis tiempos libres, con experiencia en Kubernetes, Cloud, y DevOps. También disfruta de hacer stream de juegos, hablar de CI/CD, desplegar en producción un viernes con Terraform y automatizar tareas aburridas con Ansible.

Si tienes un procesador AMD y usas Linux, seguramente te ha pasado lo siguiente: Estás comodamente trabajando y de la nada tu pantalla se congela, el teclado no funciona ni siquiera para apagar el sistema de manera segura (los que han usado las teclas mágicas Alt + Impr pant + REISUB saben a que me refiero) Pues bien, como podrás haber experimentado, es bastante molesto que tengas que reiniciar el sistema de tanto en tanto, además de lo que supondría dañar el sistema de archivos en uno de esos reinicios “forzados”

PROMO DigitalOcean
#

Antes de comenzar, quería contarles que hay una promoción en DigitalOcean donde te dan un crédito de USD 200.00 durante 60 días para que puedas probar los servicios que este Proveedor Cloud ofrece. Lo único que tienes que hacer es suscribirte a DigitalOcean con el siguiente botón:

DigitalOcean Referral Badge

O a través del siguiente enlace: https://bit.ly/digitalocean-itsm

C-States o Modos C
#

Los C-State es la manera en que se gestiona la energía de la CPU. Se introdujeron por primera vez con el procesador 486DX4, pero según va pasando el tiempo cada vez se introducen nuevos modos que consumen menos energía.

  • Cada estado (C-State) de la CPU utiliza una cantidad diferente de energía.
  • Cada estado (C-State) de la CPU impacta en el rendimiento de manera diferente.
  • Cuando un núcleo de la CPU está inactivo, se pasa de un estado a otro superior apagando varios componentes del procesador para ahorrar energía.
  • Los estados actuales van del 0 al 10. El 0 o modo activo normal es el que tiene un mayor consumo de energía ya que la CPU está 100% encendida.
  • Al aumentar el número C, el modo de suspensión de la CPU es más profundo, es decir, se apagan más circuitos y señales y se requiere más tiempo para que la CPU vuelva al modo C0, es decir, para que se despierte. Por tanto, a mayor número C-State menor será el consumo.

Al día de hoy, han sido incorporadas más caracteristicas para que cada CPU ahorre energía en modos de bajo consumo. La idea es bajar la frecuencia del reloj de la CPU cuando se encuentre con poca carga de trabajo, reduciendo el voltaje o apagar un núcleo determinado. Por otra parte, se debe tener en cuenta que se requiere de más tiempo para que la CPU “despierte” y esté 100% operacional de nuevo.

Lista de C-States
#

C-StateNombreUtilidad
C0Estado operativoEl procesador está funcionando con todo su potencial
C1Estado operativoEl procesador está funcionando, pero con los relojes internos detenidos en espera de instrucciones. Las interfaces y APIC siguen funcionando.
C1EParada mejoradaDetiene todos los relojes internos del procesador por software.
C2Permiso de detenciónDetiene los relojes internos y externos de la CPU por hardware. Las interfaces y APIC siguen funcionando.
C2Detención del relojDetiene los relojes internos y externos de la CPU por hardware.
C2EPermiso de detención extendidoDetiene los relojes principales y además reduce el voltaje de la CPU para reducir el consumo. Interfaces y APIC siguen funcionando.
C3SuspensiónDetiene todos los relojes internos de la CPU.
C3Suspensión profundaDetiene todos los relojes internos y externos de la CPU.
C3AltVIDDetiene todos los relojes internos y reduce el voltaje.
C4Suspensión profundaReduce el voltaje de la CPU.
C4E/C5Suspensión profunda mejoradaReduce todavía más el voltaje y apaga la caché de la memoria.
C6Apagado profundoReduce el voltaje de la CPU a cero.
C7Ahorro de energía profundoLa CPU vacía la caché L3 y corta su energía. Se elimina también la energía del agente de sistema.
C7s-Sub estado en el que la caché L3 se vacía de golpe en lugar de escalonadamente. Se ponen en ahorro de energía los dispositivos I/O.
C8-La caché L3 se vacía y se corta la energía del PLL.
C9-El voltaje de entrada VCC se reduce al mínimo.
C10-La CPU se apaga completamente.

AMD y la Gestión de Energía en Linux
#

El meollo del asunto es que los procesadores AMD (especificamente Ryzen) no manejan del todo bien la gestión de energía en Linux, y este bug es bien conocido por el equipo de desarrollo del Kernel según podemos ver en este hilo

Para conocer más a fondo el problema, podemos verificar en el journal si hay algún error de hardware (si tuvieramos habilitado el log persistente):

journalctl | grep -i "hardware err"

La Solución
#

Todos los comandos a continuación, debemos ejecutarlos como usuario root

Modificamos el archivo que contiene la configuración del grub:

vim /etc/default/grub

En la línea GRUB_CMDLINE_LINUX_DEFAULT, agregamos al final (respetando las comillas):

processor.max_cstate=1

Ahora regeneramos el grub:

grub2-mkconfig -o /boot/grub/grub.cfg

Si tienes UEFI (cambias opensuse por la distro de Linux que estés utilizando):

grub2-mkconfig -o /boot/EFI/efi/opensuse/grub.cfg

Reiniciamos el sistema:

reboot

Espero les haya gustado este tutorial, ¡hasta la próxima!

Referencias
#