cpudyn: controlar la velocidad de la CPU automáticamente
Página del proyecto
Página en Freshmeat
El cpudyn es un daemon que controla dinámicamente la frecuencia del procesador dependiendo de la carga. El objetivo al desarrollarlo fue tener un programa sencillo que pudiese ser usado siempre (con o sin baterías) en un portátil para bajar el consumo y la temepratura de la CPU, pero afectando lo mínimo posible al rendimiento, especialmente al interactivo.
La mayoría de los portátiles actuales ya tienen control de la velocidad de CPU.
La tecnología más conocida y usada es la Speedstep de Intel que tiene dos
frecuencias de trabajo. El kernel 2.5 ya tiene incluido el cpufreq, que permite
el control de frecuencias de los procesadores, y existe un parche para el 2.4,
la versión de Alan Cox 2.4.21-rc1-ac ya lo tiene incluido.
Pero para controlar la velocidad de la CPU hace falta user un programa o "daemon",
y existen varios, desde el cpufreq.cc comentado por Switch,
o el cpufreqd. Ambos tienen varias características
buenas (y algunos fallos también), y el cpufreqd
es completísimo, pero no hacía lo que yo pretendía, que sea simple, pequeño y que haga sólo una
cosa:
Subir la velocidad de la CPU cuando hace falta, y bajarla cuando ya no lo haga. Además que reaccione rápidamente al uso de programas interactivos.
Con ésto ahorraríamos energía, vida de procesador y temperatura, sin afectar al rendimiento interactivo, sobre todo interactivo, del ordenador. Además quería que se comportase igual estuviese o no funcionando con baterías. ¿Porqué hemos de sacrificar velocidad cuando estamos con baterías? ¿Porqué no ponerla al máximo sólo cuando la necesitamos y ahorrar batería cuando no lo necesitemops? (además que lo que más consume en un portatil actual es la pantalla TFT, no el procesador).
El cpudyn
El objetivo era poder tenerlo siempre funcionando en mi portátil, y que molestará lo menos posible, es decir, que me diese la sensación que siempre voy a máxima velocidad, con o sin baterías. Como estaba ya cansado de buscar y no encontraba nada adecuado (¡simple y que haga sólo eso, pero bien!) me puse a desarrollarlo, el resultado es el cpudyn. Está basado en el cpufreq.cc pero simplificado al eliminar las cosas que no hacían falta (entre otras cosas el uso de características no compatibles con C99), y también enormemente modificado en aquellas partes que afectan directamente al rendimiento del programa o su capacidad de detectar un consumo más elevado de CPU.
Requerimientos
El programa necesite que el cpufreq del kernel esté compilado y en marcha, es decir debe existir el fichero /proc/cpufreq. Lo he probado sobre procesadores Speedstep y PowerPC (iBook). En ambos funcionan perfectamente, aunque he notado que se producen pequeños bloqueos en el caso del iBook (yo tengo el modelo más antiguo), eso es un fallo del driver del kernel para ese procesador, o un problema de hardware. Ya lo investigaré, agradeceré que me digáis como funcionan en otro modelos de Apple.
Instalación
Simplemente hay que bajarse el cpudyn.tgz, extraer los ficheros y hacer un
make install
El make install instala el daemon en /usr/sbin y también un script de arranque en /etc/init.d/. Ahora basta con hacer:
/etc/init.d/cpudyn start
Si queréis que se arranque al inicio del sistema deberéis agregar los enlaces correspondientes. Para el caso de Debian ya lo podéis hacer automáticamente:
make install-debian
Por supuesto, si no os gusta como funciona, podeís hacer el make unistall o make unistall-debian :-)
Configuración
Los parámetros por defecto que tiene (que lo podéis ver en el script cpudyn o en el "usage" del programa) ya deberían funcionar correctamente, pero los podéis modificar. Hay tres parámetros básicos:
- -i N (N es un número entero) define el periodo de ejecución del daemon en décimas de segundo.
- -p UP DOWN (UP y DOWN son flotantes entre 0.0 y 1.0). UP define la relación "libre:ocupado" para subir la frecuencia del procesador (o pasar a modo "performance"), por ejemplo 0.5 indica que si en el último período de control la CPU estuve un 50% del tiempo libre, hay que subir la frecuencia. DOWN define la misma relación pero para bajar la frecuencia (o pasar a modo "powersave"), 0.95 indica que hay que bajar la frecuencia si la CPU estuvo libre el 95% del tiempo.
- -d Indica que el cpusysd debe ejecutarse en modo daemon.
Verificar el funcionamiento
Para verificar que esté funcionando podéis dejar el ordenador en reposo unos segundos y si hacéis un cat /proc/cpufreq deberéis ver como está en modo powersave.
gallir@minime:~$ cat /proc/cpufreq
minimum CPU frequency - maximum CPU frequency - policy
CPU 0 399000 kHz ( 42 %) - 931000 kHz (100 %) - powersave
Si hacéis que el procesador esté ocupado, por ejemplo compilando un programa (o ejecutando yes > /dev/null) , tendréis que ver como pasa a modo performance inmediatamente:
gallir@minime:~$ cat /proc/cpufreq
minimum CPU frequency - maximum CPU frequency - policy
CPU 0 399000 kHz ( 42 %) - 931000 kHz (100 %) - performance
Además, si hacéis un cat /proc/cpuinfo tendréis que ver como los MHz y bogomips también se actualizan con el estado actual de la CPU.
Debug
Si queréis ver como hace esas cosas en "tiempo real", modificad el cpudynd.h quitando el comentario de la definición de DEBUG, recompiladlo y luego ejecutado desde la consola sin el parámetro -d. El programa imprimirá un mensaje por la salida estándard de error cada vez que cambie de estado o que actúe el "decay" (ver a continuación). |