Mantener la temperatura a raya

Algunas veces las computadoras portátiles tienden a sobrecalentarse y apagarse. Esto es un comportamiento «normal», ya que los CPU vienen con un sensor de temperatura integrado, que aproximadamente a los 80 grados manda la señal y se apaga. Sin embargo, si esto ocurre muy seguido es un problema, ya que no solo nos hace perder tiempo y nuestro trabajo, sino que si se repite muchas veces, el procesador termina por dañarse y nuestro equipo queda inservible.

¿Por que ocurre? Bueno, esto no es muy fácil de decir, pero pueden ser varias causas:

  • DIscipador de temperatura lleno de polvo
  • Ventilador de extracción de calor que fallando
  • Diseño incorrecto del equipo
  • Sistema operativo tarado que no sabe regular el consumo de energía

Para el primer caso, una buena sopleteada ayuda mucho, consiguete una de esas latas de aire comprimido y con sumo cuidado (y teniendo tu equipo completamente frio, ya que el aire de estas latas sale muy frio y puede causar un cambio brusco de temperatura, con sus sabidas consecuencias) sopletea el ventilador, el discipador, y si te es posible y te sientes valiente (y ya no tienes grantaía), abre tu equipo y sopletea todo lo que puedas hasta que ya no le salga polvo.

Para el segundo caso, asegurate que el ventilador esta girando y que puedas sentir el aire caliente salir de tu equipo. Estos ventiladores deben dar por lo menos 50 vueltas por segundo, así que si logras ver con claridad las aspas girando, entonces no esta en buenas condiciones.

Para el caso del diseño incorrecto no hay mucho que puedas hacer, sino comprar una base refrigerante, que tienen precios desde unos 100 pesos mexicanos en adelante. Si se calienta realmente mucho tu equipo, busca una base que de mucha ventilacion y con un ventilador muy poderoso aunque no sea muy bonita, esto te va a dar horas de funcionamiento «en frío».

Y para el último punto, pues dejame decirte que existen unas «soluciones» para el sistema *todavía* mas popular, como SpeedFan y SpeedSwitchXP, pero ninguna de estas es automática. Sin embargo, para los sistemas Linux existe por lo menos una opción: LimitTemp. Si nunca haz oído sobre eso, es por que yo lo hice para mi DV1325 y no lo había publicado, pero aqui lo tienes. No es compatible directamente con todas las laptops, ya que muchas veces el dispositivo donde se mide la temperatura y el otro donde se marca el escalamiento estan ubicados en diferentes lugares, sin embargo con pequeñas modificaciones puede muy bien servir para tu equipo.

Este software ha mantenido a raya la temperatura de mi laptop aun cuando en ocasiones se me ha olvidado apagarla y la meto a su maletín de piel completamente cerrado durante mas de media hora, cuando oigo el sonido del ventilador la abro y está a menos de 65 grados. Dado que su temperatura maxima es de 80 grados y la temperatura de fusión es como de 85 grados, 65 es muy razonable.

Este script debe iniciarse al inicio de la maquina, yo lo pongo en el archivo rc.local, en Kubuntu ubicado en /etc/rc.local, de esta forma:

/usr/local/bin/limittemp.sh > /dev/null 2>&1 < /dev/null &

Y eso lo mantiene corriendo todo el tiempo. Esta aplicación revisa continuamente la temperatura indicada por ACPI en /proc/acpi/thermal, y cuando rebasa los 75 grados entonces revisa las frecuencias de escalamiento (scaling frequencies) disponibles, revisa también cual es la actual, y entonces indica que la nueva frecuencia de escalamiento es la siguiente inferior. Se espera unos segundos, y si la temperatura no cede, vuelve a hacer este procedimiento, hasta que la temperatura cede. Nunca me ha tocado que no ceda, asi que no consideré necesario hacer algo en caso de que no ceda, pero si fuera necesario lo ideal seria que pusiera en modo sleep al equipo, que es una forma rápida de apagar el cpu lo suficiente para que no se sobrecaliente, sin perder información.

Cuando la temperatura cede, y se reduce a menos de 59 grados, entonces empieza a aumentar la frecuencia máxima de escalamiento; si estas con el gobernador del CPU «Dynamic», entonces este se encarga de variar la frecuencia entre la minima del CPU y la maxima indicada por este script según sea necesario por la carga de trabajo, así que el aumentar la máxima frecuencia de escalamiento no implica que se va a aumentar inmediatamente la frecuencia del CPU, sino que se amplía el límite.

Este proceso se mantiene todo el tiempo revisando continuamente, y regulando la temperatura de tu equipo para evitar el sobrecalentamiento y su consiguiente daño. Esto también ha alargado la vida útil de mi batería de tal forma que actualmente, despues de 4 años de haber comprado mi equipo, la batería me sigue durando mas de dos horas, mientras que a gente que solo usa windows la batería le dura menos de una hora. Así que tiene muchas ventajas por donde lo veas, y si revisas mi artículo donde indico que varios gobiernos estan cambiando ya el sistema operativo y las aplicaciones de las oficinas gubernamentales por Linux, te darás cuenta de que muy pronto el crecimiento en el escritorio de este sistema operativo va a ser enorme.

Bueno, mucha charla, pero aquí viene el script.

#!/bin/bash
LASTMYFREQ=`cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq`
while [ 1 ]; do
TEMP=`cat /proc/acpi/thermal_zone/THRM/temperature | cut -b 26-28`
GOV=`cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor`
echo $TEMP
if [ $TEMP -gt 74 ]; then
BREAKNEXT=0
echo «OH! muy caliente, tengo que evitar que siga»
FREQS=`cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies`
FREQ=`cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq`
for i in $FREQS
do
if [ «$BREAKNEXT» = «1» ]; then
echo «Fijando la frecuencia a $i»
NEWFREQ=$i
BREAKNEXT=0
fi
echo «Comparando $i $FREQ»
if [ $i = $FREQ ]; then
echo «La encontre»
BREAKNEXT=1
NEWFREQ=$i
fi
done
echo «Bajando de $FREQ a $NEWFREQ por TEMP>=$TEMP»
echo $NEWFREQ > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
LASTMYFREQ=$NEWFREQ
else if [ $TEMP -lt 58 -a «$GOV» != «powersave» ]; then
BREAKNEXT=0
echo «Bien! ya no estoy tan caliente»
FREQS=`cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies`
FREQ=`cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq`
for i in $FREQS
do
echo «Comparando $i $FREQ»
if [ $i = $FREQ ]; then
echo «La encontre»
BREAKNEXT=2
fi
if [ «$BREAKNEXT» != «2» ]; then
echo «Fijando la frecuencia a $i»
NEWFREQ=$i
fi
done
if [ $LASTMYFREQ = $FREQ ]; then
echo «Subiendo de $FREQ a $NEWFREQ por TEMP<=$TEMP»
echo $NEWFREQ > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
LASTMYFREQ=$NEWFREQ
fi
fi
fi
sleep 10
done

About: medisoft


Comments are closed.