Bueno, la idea es aprovechar el escalado de frecuencia de nuestro portátil para hacer que este trabaje a unas determinadas frecuencias cuando usamos batería y a otras cuando esta conectado a la corriente. La utilidad principal de esto es tener una mayor duración de la batería cuando la estemos usando, y un mayor rendimiento de la máquina cuando trabajamos conectados a la pared.
Primero comentar que uso ubuntu dapper 6.06 usando un computador con sólo un microprocesador, pero creo que esto servirá para otras distros igualmente, no lo sé porque yo lo he echo basandome en ubuntu. Empezamos:
Todos los pasos los hacemos como "root"
Comprobamos los diferentes governors de que disponemos, para saber con que podemos trabajar.
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
la salida mas probable será "userspace powersave ondemand conservative performance"
powersave: usa la minima frecuenca de procesador.
ondemand: usa la máxima frecuencia del procesador pero se rebaja esta dependiendo del uso que le demos
conservative: usa la mínima frecuencia del procesador aumentandose esta dependiendo del uso que le demos
performance: usa la máxima frecuenca del procesador
userspace: usa un archivo definido por el usuario para el metodo de escalado de frecuencia, por defecto será ondemand en ese archivo.
Nos vamos a
/etc/acpi/ donde vemos dos subdirectorios, uno es
battery.d y otro es
ac.d.empezamos con
battery.d:
Entramos en el directorio y creamos un fichero llamado
cpus_scaling.sh en
el que ponemos lo siguiente:
#!/bin/sh
echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
*Nota: podemos sustituir powersave por el governor que mejor nos venga para lo que queremos, arriba puse como actua cada uno (yo puse powersave)
hacemos el script ejecutable
chmod +x cpus_scaling.sh
y pasamos a
ac.d:
Entramos al directorio
ac.d y creamos un fichero llamado
cpus_scaling.sh en el que ponemos lo siguiente:
#!/bin/sh
echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
hacemos el script ejecutable
chmod +x cpus_scaling.sh
Hasta ahora todo esta echo, pero queremos que esto se ejecute automaticamente al iniciar el sistema, asi que... seguimos los siguientes pasos:
Creamos un archivo en
/etc/init.d/ llamado
getpower con el siguiente código:
#!/bin/bash
POWERSTATE=`grep -c off-line /proc/acpi/ac_adapter/ACAD/state`
if [ $POWERSTATE != 0 ]; then
/etc/acpi/battery.d/cpus_scaling.sh
else
/etc/acpi/ac.d/cpus_scaling.sh
fi
OJO: En algunos sistemas la ruta del POWERSTATE es
/proc/acpi/ac_adapter/AC/state si no poneis bien vuestra ruta el sistema no reconocerá el estado de la batería y no ajustará bien la frecuencia. No cambiará hasta que no lancemos un evento acpi.
cambiamos los permisos para hacerlo ejecutable
chmod +x getpower
Finalmente para todos las carpetas rc.d en
/etc (rc2.d, rc3.d, rc4.d, rc5.d) excepto para rc1.d y rc6.d creamos un enlace simbólico al script
getpower en
/etc/init.d:
ln -s /etc/init.d/getpower /etc/rc2.d/S99getpower
ln -s /etc/init.d/getpower /etc/rc3.d/S99getpower
ln -s /etc/init.d/getpower /etc/rc4.d/S99getpower
ln -s /etc/init.d/getpower /etc/rc5.d/S99getpower
Espero que os sirva.
Para cualquier duda ya sabeis, ando por el foro.