domingo, junio 14, 2009

Frequency Scaling

Hola amigos, hace poco que tengo mi portatil y hasta ahora no me había preocupado excesivamente la temperatura que alcanzaba el microprocesador pero con la llegada del verano empieza a alcanzar temperaturas de hasta 80 y pocos grados, no soy un experto en la materia pero me parece excesivo, se trata de un Core 2 Duo P8400 a 2600 GHz.

Finalmente he optado por habilitar en el kernel las opciones de escalado de frecuencia:
Power Managament and ACPI options --> CPU Frequency Scaling
CPU Frequency Scaling
Default CPUFreq Governor --> Está será la opción por defecto que usará si no le indicamos lo contrario

Compilamos las siguientes opciones como módulos:
powersave governor
userspace governor for userspace frequency scaling
ondemand cpufreq policy governor

ACPI Processor P-State Driver--> Esta opción es para los Core 2 Duo, si disponemos de otro microprocesador habrá que "Googlear" para saber cual es la opción correcta.

Una vez habilitadas las opciones necesarias compilamos y reiniciamos:
make && make modules_install && cp arch/x86_64/boot/bzImage /boot/kernel-"version" && reboot

Ahora hay que cargar los módulos:
modprobe acpi_cpufreq
modprobe cpufreq_powersave

En mi caso he cargado el de ahorro de energía para que el microprocesador trabaje a la mínima frecuencia de reloj posible.

Finalmente habilitamos el módulo que hemos cargado:
echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo powersave > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor

Esto es todo, así de sencillo, si queremos probar más modos tenemos los siguientes modulos:
  • cpufreq_powersave --> Ahorro de energía
  • cpufreq_ondemand --> Si las aplicaciones exigen potencia de calculo la frecuecnia es elevada a su máximo, y si la demanda cesa va bajando paulatinamente.
  • cpufreq_userspace --> La frecuencia max y minima es habilitada por programas.
  • cpufreq_conservative --> Es igual que el modo ondemand pero cuando sube la frecuencia lo hace progresivamente.
Para ver los modos disponibles de cada modulo podemos emplear el comando siguiente:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors

Si queremos ver las frecuencias a las que puede trabajar nuestro microprocesador podemos emplear el siguiente comando:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies

Si queremos comprobar que realmente ha cambiado la frecuencia podemos ejecutar el siguiente comando:
less /proc/cpuinfo | grep MHz

Finalmente hacemos que este proceso se realice de forma automática en el arranque:
vi /etc/modules
acpi_cpufreq
cpufreq_powersave

vi /etc/rc.local
echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo powersave > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor