web stats
Back
Featured image of post Temperatura y Ventiladores Con lm-sensors en AMD Ryzen

Temperatura y Ventiladores Con lm-sensors en AMD Ryzen

Uno de los mayores problemas de Linux frente a Windows, en arquitecturas AMD Ryzen, es el control de temperaturas y velocidad de ventiladores. Aquí vamos a ponerle solución

Uno de los mayores problemas de Linux frente a Windows, en arquitecturas AMD Ryzen, es el control de temperaturas y velocidad de ventiladores. Por poner un par de ejemplos claros:

  • En Windows puedo ver la temperatura de todos los sensores de mi motherboard, así como la gestión de ventiladores de la misma, sin ningún problema. En Linux solo me muestra la temperatura de CPU y GPU.
  • En Windows, mi GPU (una Radeon RX590) detiene automáticamente los ventiladores de la misma cuando trabaja a temperaturas inferiores a 50º. En linux los ventiladores se encuentran permanentemente al 50%. Aunque es una gráfica muy silenciosa, el sonido se llega a notar.

No obstante, en Linux hay poco que no se pueda hacer, así que en este post vamos a ver como tratar estos dos puntos

Ver todos los sensores en lm-sensors

Instalación de paquetes

Una herramienta básica en Linux para poder ver temperaturas, voltajes, rpm, etc, es lm-sensors, y su interfaz gráfica psensor. Vamos a instalarlo poniendo un ubuntu como ejemplo, aunque el paquete puede ser instalado en cualquier distribución

sudo apt install lm-sensors psensor

En Arch, sería

sudo pacman -Sy lm-sensors psensor

Una vez instalado, podemos lanzar la autodetección de los sensores, aunque el número de ellos que detecte será muy bajo:

sudo sensors-detect

Podemos ver la información de nuestros sensores con

sensors

Detección del hardware.

Ahora nos toca buscar un poco de información. Es necesario conocer el chipset que utiliza nuestra placa base. En mi caso, (una MSI X470 Pro Carbon), monta un chip nuvoTon NCT 6795D.

Ejemplo chip Nuvoton
Ejemplo chip Nuvoton

Con esta información en la mano, es necesario buscar de nuevo el kernel driver que da soporte a este chip. En este caso concreto, sería el NCT6775

una vez que tenemos el kernel driver que nos aplica, vamos a probarlo:

modprobe nct6775

Si ahora lanzamos sensors, nos debería mostrar mucha más información que antes:

ryzen-zos@ryzen-zos:~$ sensors
nct6795-isa-0a20
Adapter: ISA adapter
in0:                    +0.66 V  (min =  +0.00 V, max =  +1.74 V)
in1:                    +1.02 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in2:                    +3.34 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in3:                    +3.41 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in4:                    +1.01 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in5:                    +0.15 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in6:                    +0.72 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in7:                    +3.33 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in8:                    +3.25 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in9:                    +1.82 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in10:                   +0.00 V  (min =  +0.00 V, max =  +0.00 V)
in11:                   +0.67 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in12:                   +1.15 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in13:                   +0.68 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in14:                   +1.54 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
fan1:                     0 RPM  (min =    0 RPM)
fan2:                   590 RPM  (min =    0 RPM)
fan3:                  1048 RPM  (min =    0 RPM)
fan4:                     0 RPM  (min =    0 RPM)
fan5:                   675 RPM  (min =    0 RPM)
fan6:                   552 RPM  (min =    0 RPM)
SYSTIN:                 +37.0°C  (high =  +0.0°C, hyst =  +0.0°C)  ALARM  sensor = CPU diode
CPUTIN:                 +35.0°C  (high = +115.0°C, hyst = +90.0°C)  sensor = thermistor
AUXTIN0:                +42.0°C  (high = +115.0°C, hyst = +90.0°C)  sensor = thermistor
AUXTIN1:               -128.0°C    sensor = thermistor
AUXTIN2:                +45.0°C    sensor = thermistor
AUXTIN3:                 -2.0°C    sensor = thermistor
SMBUSMASTER 0:          +35.5°C  
PCH_CHIP_CPU_MAX_TEMP:   +0.0°C  
PCH_CHIP_TEMP:           +0.0°C  
PCH_CPU_TEMP:            +0.0°C  
intrusion0:            ALARM
intrusion1:            ALARM
beep_enable:           disabled

amdgpu-pci-2600
Adapter: PCI adapter
vddgfx:       +0.90 V  
fan1:         156 RPM  (min =    0 RPM, max = 3200 RPM)
edge:         +46.0°C  (crit = +91.0°C, hyst = -273.1°C)
power1:       42.23 W  (cap = 185.00 W)

k10temp-pci-00c3
Adapter: PCI adapter
Tdie:         +35.1°C  (high = +70.0°C)
Tctl:         +35.1°C

Configuración

Como funciona correctamente, vamos a aplicar los cambios para que se lance automáticamente en cada inicio. Para ello modificamos el fichero /etc/rc.local

sudo nano /etc/rc.local

Y lo modificamos para que quede algo parecido a esto:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
modprobe nct6775
exit 0

Modificamos los permisos:

sudo chmod +x /etc/rc.local

Y con esto ya tenemos todo listo para obtener informacion de todos los sensores de nuestra placa base.

Controlar ventiladores

Utilizando el propio lm-sensors, y fancontrol, podemos controlar la velocidad y umbrales de todos los ventiladores de nuestro PC. En mi caso los tengo controlados desde la propia BIOS, pero me interesa que el comportamiento de los ventiladores de la GPU sea similar al de Windows: Que por debajo de 45-50 grados los ventiladores se detengan por completo.

En distribuciones basadas en arch, lo más rápido y cómodo es instalar la utilidad Corectrl desde los repositorios AUR, pero para otro tipo de distros es necesario compilar el código manualmente. Para ahorrarnos tiempo, vamos a utilizar fancontrol

sudo apt install fancontrol

Configuración

Ahora vamos a lanzar el asistente de configuración:

sudo pwmconfig

Esto nos lanzará un asistente muy claro en el que nos irá preguntado qué ventiladores queremos modular, los umbrales en que se activarán, la velocidad de cada uno de ellos, etc etc. Al finalizar nos generará el fichero de configuración en /etc/fancontrol

Un ejemplo de mi configuración:

ryzen-zos@ryzen-zos:~$ cat /etc/fancontrol 
# Configuration file generated by pwmconfig, changes will be lost
INTERVAL=5
DEVPATH=hwmon0=devices/pci0000:00/0000:00:03.1/0000:26:00.0
DEVNAME=hwmon0=amdgpu
FCTEMPS= hwmon0/pwm1=hwmon0/temp1_input
FCFANS= hwmon0/pwm1=
MINTEMP= hwmon0/pwm1=45
MAXTEMP= hwmon0/pwm1=75
MINSTART= hwmon0/pwm1=100
MINSTOP= hwmon0/pwm1=0
MAXPWM= hwmon0/pwm1=255

Para iniciar el programa, lo lanzamos con

sudo fancontrol

Con todo esto, ya tenemos un comportamiento más o menos similar al encontrado en Windows. Además, modificando los ficheros de configuración, podemos cambiar las alertas, etiquetas de los sensores, etc. También podemos utilizar esta información para utilizar en extensiones de gnome o KDE…. Pero todo esto lo veremos en otros post.

comments powered by Disqus
Creado con Hugo