En este artículo os cuento una técnica sencilla para evitar que en temperaturas extremas vuestro procesador alcance temperaturas demasiado altas.
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.
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)
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:
la información suministrada por el soporte ACPI)
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:
que funcionan con la batería
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:
(P1) echo ”1” > /proc/acpi/processor/CPU0/performance
de máximo rendimiento (P0) echo ”0” > /proc/acpi/processor/CPU0/performance
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)
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.