Control de la temperatura del procesador con ACPI


En este artículo os cuento una técnica sencilla para evitar que en temperaturas extremas vuestro procesador alcance temperaturas demasiado altas.


1 Introducción

El objetivo de este artículo es explicar una forma de controlar la
temperatura del procesador de una máquina empleando los recursos que
nos ofrece el soporte ACPI para administración de energía. La idea
fundamental de este método es que en el momento en que la temperatura
del procesador alcanza valores no deseados, se fuerza un undercloking
por software, de manera que se baja la frecuencia del procesador,
y esto provoca un descenso de la temperatura.


2 Necesidades de software

Para poder emplear este método es necesario tener compilados en el
kernel el soporte ACPI, concretamente las áreas que hacen referencia
al procesador y la ”zona termal”. Es necesario seleccionar las
opciones mostradas a continuación:

General setup –>

ACPI Support –>

[*] ACPI Support

<*> Processor

<*> Thermal Zone

Todas las pruebas que he realizado han sido con el kenel 2.4.21 y
el parche ACPI de Con Kolivas. Este parche lo podéis
encontrar en:

http://members.optusnet.com.au/ckolivas/kernel/patch-1070_ACPI_0306300010_2.4.21-ck3.bz2

(Versión para kernel 2.4.21)


3 Necesidades de hardware


3.1 Sensores de temperatura

Un punto esencial para que podáis controlar la temperatura a la que
funciona vuestro procesador es disponer de sensores que puedan medirla.
Evidentemente si vuestra máquina no dispone de estos sensores no es
necesario que sigáis leyendo pues para vuestro caso no os servirá
de nada lo que explicaré a continuación.

Para verificar la temperatura de funcionamiento de vuestro procesador
(o procesadores), lo podéis hacer de las siguientes maneras:

  • cat /proc/acpi/thermal_zone/THRM/temperature (lee directamente
    la información suministrada por el soporte ACPI)
  • acpi -t (utiliza la utilidad acpi para leer la información
    de la temperatura)

  • 3.2 Posibilidad de variar la velocidad del procesador

    Es necesario poder variar la velocidad del procesador, de manera que
    cuando éste alcance temperaturas muy elevadas se pueda crear un undercloking
    para obligar a la maquina a bajar la temperatura.

    En caso de que vuestro procesador pueda variar su velocidad por software,
    cuando ejecutéis el comando cat /proc/acpi/processor/CPU0/performance

    debe mostrar una información similar a la siguiente:

    state count: 2

    active state: P0

    states:

    *P0: 1900 MHz, 22000 mW, 250 uS

    P1: 1200 MHz, 9800 mW, 250 uS

    El número de estados del procesador puede variar dependiendo del modelo
    y arquitectura del mismo, por tanto, aunque el procesador tomado para
    este ejemplo únicamente disponga de dos estados, es posible que encontréis
    procesador con más.

    En caso de que dispongáis de máquinas multiprocesador se puede acceder
    a la información de los otros procesadores con el comando cat
    /proc/acpi/processor/CPU1/performance, cat /proc/acpi/processor/CPU2/performance,
    etc…

    Para variar el estado de trabajo del procesador es suficiente con
    ejecutar el comando echo ”numero_estado” /proc/acpi/processor/CPUn/performance,
    siendo n el número de procesador sobre el que se desea actuar.
    Si se cambia el procesador a un estado de undercloking se le
    obliga a trabajar a una frecuencia más baja, por tanto, el rendimiento
    de la máquina disminuye pero se consigue las siguientes ventajas:

  • Se reduce su consumo, cosa importante para ordenadores portátiles
    que funcionan con la batería
  • Se disminuye la temperatura de funcionamiento del procesador

  • 4 Método para control de temperatura


    4.1 Estudio de las temperaturas de funcionamiento

    Lo primero que se debe hacer es un estudio de las temperaturas a las
    que funciona nuestro procesador en diferentes situaciones. Para esto
    es extremadamente importante tener en cuenta que ésta puede variar
    dependiendo de los siguientes factores:

    • Temperatura ambiente
    • Porcentaje de uso de la CPU y tiempo que esta sometida a grandes cargas
    • Uso intensivo de discos duros y lectores de CD (lo cuales suelen producir mucho calor)
    • Condiciones de la habitación (humedad, ventilación, etc…)

    Para escribir este artículo he realizado un pequeño cuadro con las
    temperas de trabajo de mi máquina; debéis tener en cuenta que estas
    pueden variar según la época del año (este verano está siendo muy
    caluroso en mallorca) y el tipo de procesador que utilicéis.

    Trabajando en modo de máximo rendimiento (P0):

    Uso
    Tipo de operación
    Temperatura

    Uso moderado
    Trabajo habitual con escritorio, editores, …
    50ºC a 55ºC

    Uso alto
    Por ejemplo recompilar el kernel
    50ºC a 60ºC

    Uso muy alto
    Por ejemplo comprimir Divx de un DVD
    55ºC a 68ºC

    Trabajando en modo de bajo rendimiento (P1):

    Uso
    Tipo de operación
    Temperatura

    Uso moderado
    Trabajo habitual con escritorio, editores, …
    50ºC a 55ºC

    Uso alto
    Por ejemplo recompilar el kernel
    50ºC a 55ºC

    Uso muy alto
    Por ejemplo comprimir Divx de un DVD
    55ºC

    Como se puede observar en estos cuadros, cuando se hace trabajar a
    la máquina a máxima carga durante un tiempo muy largo, y en el caso
    de estas mediciones en circunstancias desfavorables, la temperatura
    tiende a subir mucho. Esto puede provocar que la máquina alcance temperaturas
    no deseadas, y en mi caso, que el procesador se ponga a 68ºC no me
    hace demasiada gracia, aunque según sus especificaciones técnicas
    esta no se considere una temperatura excesiva para su funcionamiento.


    4.2 Fijar temperaturas deseadas

    Una vez realizado un estudio de las temperaturas a las que funciona
    nuestro procesador es necesario decidir que rango de temperaturas
    consideramos adecuado para él. En este punto es muy importante ser
    lo más realista posible y adecuarnos al estudio realizado en el punto
    anterior, es decir, por mucho que quiera, mi procesador no va a funcionar
    a 45ºC a no ser que cambie el sistema de refrigeración de la máquina
    por uno más potente o me limite a trabajar en salas con el aire acondicionado
    a tope.

    En el caso concreto de mi procesador el rango de temperaturas a las
    que deseo que funcione, en casos de máxima carga, es entre 55ºC y
    60ºC.


    4.3 Programa para el control de temperatura

    Con todo lo visto hasta aquí es bastante sencillo crear un pequeño
    programita que ”vigile” la temperatura de nuestro procesador de
    forma automática, de manera que baje su frecuencia de funcionamiento
    (underclocking) cuando esta sea muy alta y la suba cuando la
    temperatura se normalice. La cosa es tan sencilla que incluso se puede
    crear un pequeño programa bash para hacer estas operaciones.
    Los pasos a seguir deben ser los siguientes:

  • Leer al temperatura del procesador (temp) del archivo /proc/acpi/thermal_zone/THRM/temperature
  • Si temp > temperatura máxima deseada entonces underclocking
    (P1) echo ”1” > /proc/acpi/processor/CPU0/performance
  • Si temp <= temperatura mínima permitida entonces estado
    de máximo rendimiento (P0) echo ”0” > /proc/acpi/processor/CPU0/performance
  • Volver a paso 1
  • Para aquellos que no sepáis (o no os apetezca) hacer un pequeño programita
    para el control de la temperatura os dejo un par de direcciones con
    un programa que he desarrollado en C++ que implementa todo lo explicado
    en este artículo.

    http://scero.homelinux.org:8080/Documentos/Proyectos/thermal.tgz
    (código fuente)

    http://scero.homelinux.org:8080/Documentos/Proyectos/thermal_1-1_i386.deb
    (paquete debian)


    Aviso:

    El programa que os facilito únicamente controla la temperatura de
    un procesador, en caso de que necesitéis controlar la temperatura
    de varios procesadores deberéis implementarlo vosotros mismos.

    Este post ha sido traido de forma automatica desde https://web.archive.org/web/20140625063149/http:/bulma.net/body.phtml?nIdNoticia=1825 por un robot nigromante, si crees que puede mejorarse, por favor, contactanos.


    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.