CPU scaling en Debian
1. Introducción
2. Instalación del sistema de escalado.
2.1. Requisitos previos.
2.2. Elegir y cargar el modulo para el procesador.
2.3. Seleccionar un gobernador y cargar los módulos.
2.4. Comprobar el funcionamiento.
2.5. Iniciar en el arranque el escalado de frecuencias.
3. Configuración.
3.1. Cpufrequtils
3.2. Cpufreqd
3.3. Herramientas de los entornos de escritorios.
1. Introducción
El escalado de frecuencia es una técnica que regula la frecuencia de nuestros procesadores adecuándola a nuestras necesidades en cada momento según nuestras preferencias. Este hecho es especialmente importante en los dispositivos portátiles para optimizar la duración de la batería o disminuir la temperatura del procesador.
2. Instalación del sistema de escalado.
2.1 Requisitos previos.
Antes de empezar hemos de asegurarnos de que en la BIOS las opciones Cool'n'Quiet (AMD) o SpeedStep (Intel) estén activadas. En algunos casos el BIOS no trae las opciones por lo cual se puede suponer que están activadas por defecto e incluso pueden aparecer con otros nombres distintos a los mostrados arriba.
También es conveniente desinstalar el software de escalado de espacio de usuario tales como powernowd o cpudyn usando nuestro gestor de paquetes preferido, este es un ejemplo usando aptitde:
apt-get remove powernowd cpudyn
Una vez realizado estos pasos debemos identificar cual es nuestra CPU una forma fácil de conocerla es con el siguiente comando:
cat /proc/cpuinfo
2.2 Elegir y cargar el modulo para el procesador.
A continuación se muestran los posibles módulos para algunos de los procesadores más populares:
- AMD Sempron/Athlon/MP ( K7 ). El módulo a cargar se llama powernow-k7
- AMD Duron/Sempron/Athlon/Opteron 64/Turion ( K8 ). El módulo a cargar se llama powernow-k8
- Intel Dual core/Pentium M/Core 2 Duo/Quad core/Centrino. Para estos procesadores tenemos dos módulos diferentes: speedstep-centrino (deprecated) y el más actual acpi-cpufreq
- Intel Pentium 4. El módulo adecuado para esta familia de procesadores es el p4_clockmod
- Otros (Desconocido). Si tu procesador no funciona con ninguno de los módulos mostrados arriba, puedes intentar, aunque no se puede asegurar que funcione, el módulo acpi-cpufreq
Con los datos que hemos obtenido en los pasos previos y cargamos el modulo adecuado con el comando modprobe, este es un ejemplo par aun AMD turion:
modprobe powernow-k8
2.3 Seleccionar un gobernador y cargar los módulos.
Los diferentes gobernadores controlan cómo las velocidades del procesador son escaladas. Las opciones son:
- Ondemand. Frecuencia de procesamiento basada en la carga. El módulo a cargar se llama cpufreq_ondemand
- Conservative. Este modo es parecido al gobernador ondemand, el procesador se configura de alguna manera dependiendo del uso. Difiere en que el comportamiento del conservative hace el escalado de manera mucho más gradual que ondemand que realiza saltos a la máxima velocidad en el momento en que un proceso lo requiera.El módulo a cargar se llama cpufreq_conservative.
- Performance. La CPU funciona solamente en la frecuencia máxima sin importar carga. Este gobernador se encuentra implícito al cargar un módulo de control del procesador.
- Powersave La CPU funciona solamente en la frecuencia mínima sin importar carga. El módulo a cargar es cpufreq_powersave
- Userspace Permite seleccionar al usuario a que frecuencia funcionara el procesador sin importar la carga. El nombre del módulo es cpufreq_userspace.
Aparte de estos módulos también existe otro que se encarga de tomar y presentar estadísticas de nuestro procesador: cpufreq_stats.
Ahora solo tenemos que cargar aquellos que nos interesen, aquí tenemos un ejemplo cargando todos los posibles:
modprobe cpufreq_conservative
modprobe cpufreq_ondemand
modprobe cpufreq_powersave
modprobe cpufreq_stats
modprobe cpufreq_userspace
2.4 Comprobar el funcionamiento.
Existe un espacio dentro de nuestro directorio sys donde podemos consultar varios aspectos de nuestro escalado y utilizando esta información saber si esta funcionando correctamente.
Primero vamos a comprobar que se ha cargado nuestro driver para el procesador, para ello solo tenemos que hacer un cat al archivo correcto:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver
La salida que deberías observar es algo así como...
powernow-k8Ahora si la prueba anterior ha tenido éxito podemos comprobar cuales son las frecuencias disponibles para nuestro procesador de nuevo con el comando cat:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
La salida que deberías observar es algo así como...
1600000 800000También podemos mostrar los gobernadores disponibles:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
La salida que deberías observar es algo así como...
powersave userspace conservative ondemand performanceY cual es el gobernador usado en este momento:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
Dándonos como resultado algo así.
performance2.5. Iniciar en el arranque el escalado de frecuencias.
En los sistemas modernos ya no es necesario nada de esto, ya que hal se encarga de detectar cual es el driver adecuado para nuestro procesador y cargar los módulos de los gobernadores posibles. De todas formas si esto no funciona siempre podemos agregar los módulos necesarios en nuestro fichero /etc/modules:
echo cpufreg_acpi >> /etc/modules
echo cpufreq_conservative >> /etc/modules
echo cpufreq_ondemand >> /etc/modules
echo cpufreq_powersave >> /etc/modules
echo cpufreq_stats >> /etc/modules
echo cpufreq_userspace >> /etc/modules
3 Configuración.
Para configurar nuestro gobernador predeterminado, que este cambie de forma dinámica o manual hay varias herramientas que ahora pasamos a describir.
3.1 Cpufrequtils
Esta es una simple herramienta de consola que permite configurar de forma precisa la política de escalado de frecuencia para nuestro sistema.
Para instalarlo solo tenemos que instalar el paquete cpufrequtils con nuestro gestor de paquetes preferido, p.e:
apt-get install cpufrequtils
Este paquete consta de dos herramientas:
- cpufreq-info Este comando se encarga de mostrar información de nuestro sistema respecto al escalado de frecuencia.
- cpufreq-set Con este comando podemos modificar el gobernador utilizado, la frecuencia de trabajo, etc...
Si ejecutamos cpufreq-info tendremos una salida que nos muestra todos los datos necesarios para saber que esta haciendo nuestro sistema:
cpufrequtils 005: cpufreq-info (C) Dominik Brodowski 2004-2006
Report errors and bugs to cpufreq@vger.kernel.org, please.
analyzing CPU 0:
driver: powernow-k8
CPUs which need to switch frequency at the same time: 0
hardware limits: 800 MHz - 1.60 GHz
available frequency steps: 1.60 GHz, 800 MHz
available cpufreq governors: powersave, userspace, conservative, ondemand, performance
current policy: frequency should be within 1.60 GHz and 1.60 GHz.
The governor "performance" may decide which speed to use
within this range.
current CPU frequency is 1.60 GHz.
cpufreq stats: 1.60 GHz:99,97%, 800 MHz:0,03% (2)Ahora podemos configurar con cpufreq-set nuestro gobernador a usar, la frequencia mínima y máxima y otras variables interesantes de nuestro sístema.
Por ejemplo podemos cambiar el gobernador:
cpufreq-set -g ondemand
Podemos configurar cpufrequtils para que automáticamente configure el gobernador escogido en el inicio, para ello solo tenemos que editar el archivo /etc/default/cpufrequtils.
Tenemos que cambiar la variable ENABLE de false a true, después podemos configurar la variable GOVERNORZ según el gobernador elegido.
Nota:En sistemas con más de un procesador, necesitas repetir la configuración para cada procesador.
Para ver cuántos procesadores tienes, ejecutamos ls /sys/devices/system/cpu/