HOWTO Reducir la frecuencia del procesador

De Gentoo Linux Wiki

Este articulo es parte de las series de HOWTO.
Kernel & Hardware Red y Servicios Portage Relacionado con el Sistema Servidor X Juegos Misceláneos

Tabla de contenidos

[editar] Introducción

Aunque muchos habréis leido la guía oficial de Gentoo sobre el power save, creo que a más de un noob le vendrá bien, comencemos.

[editar] Configurando el kernel

Para empezar, necesitamos compilar el kernel con cpufreq:

Código: Kernel
Power management options (ACPI, APM)  --->
      CPU Frequency scaling  --->
             [*] CPU Frequency scaling                                               
             < >   /proc/cpufreq interface (deprecated)                             
              Default CPUFreq governor (userspace)  --->                       
             <*>   'performance' governor                                           
             <*>   'powersave' governor                                             
             ---   'userspace' governor for userspace frequency scaling         
             [ ]     /proc/sys/cpu/ interface (2.4. / OLD)                           
             <*>   CPU frequency table helpers                                       
             ---   CPUFreq processor drivers                                         
             <*> ACPI Processor P-States driver                                     
             [ ]   /proc/acpi/processor/../performance interface (deprecated)
             [En la lista que sigue elige el driver de tu CPU]
Explicación: Advertencia

Una advertencia, mi portátil es un Celeron Mobile a 2.50Ghz(no M, cuidado) y el driver que he de usar es el Intel Pentium 4 clock modulation, para los demás usa el Intel Speedstep on ICH-M chipsets (ioport interface) (para Pentium M) o el Intel SpeedStep on 440BX/ZX/MX chipsets (SMI interface).

Los governors son los encargados de manejar la velocidad de la CPU y son tres:

  • performance: Mantiene siempre la máxima velocidad de la CPU
  • powersave: Mantiene siempre al mínimo la velocidad de la CPU
  • userspace: Deja el trabajo a una aplicación en espacio de usuario

Bien, pasos habituales de recauchutado (recompilado) del kernel... y listo. Ya podemos comprobar que esto funciona (como root):

Código: Consola

$ cd /sys/devices/system/cpu/cpu0/cpufreq $ echo -n userspace > scaling_governor

Con esto indicamos que queremos controlar nosotros la frecuencia.

Código: Consola

$ echo -n 1000000 > scaling_setspeed

Y esto pone nuestra cpu a 1 Ghz (la velocidad va indicada en Khz). Para comprobar que todo va bien, hacemos:

Código: Consola

cat /proc/cpuinfo

Si la velocidad no cambia, puede ser que tu version del kernel no muestre bien la velocidad, para poder comprobarlo (NOTA: necesitas activar el soporte para cpuid en el kernel para que esta aplicación funcione correctamente):

Código: Consola

$ emerge x86info $ x86info

Explicación: Advertencia

Si el directorio cpufreq no existe en sys, es probable que o no habéis elegido el driver correcto o que vuestro procesador no está soportado.

En este directorio además debe de haber varios ficheros en el directorio:

  • cpuinfo_max_freq: Informa de la máxima frecuencia que puede alcanzar el procesador (no, con esto no vas a poder hacer overclocking... sorry)
  • cpuinfo_min_freq: Informa de la mínima frecuencia que puede alcanzar el procesador (el mio baja a un mínimo de 300 Mhz!)
  • scaling_available_frequencies: Aquí sale una lista de las frecuencias disponibles (no, el cambio no es continuo, debe ser por razones técnicas)
  • scaling_available_governors: Lista los posibles governors de que disponemos. (en algunas arquitecturas sólo es posible el userspace)
  • scaling_driver: Para saber cual es el driver que está usando actualmente
  • scaling_governor: Con este archivo podemos o saber qué governor estamos usando actualmente o activar un governor en particular.
  • scaling_max_freq: Este archivo nos informa y nos permite poner un límite al máximo de frecuencia al que queremos que llegue el procesador (Cpufreqd usa este archivo, como veremos más adelante)
  • scaling_min_freq: Este archivo nos informa y nos permite poner un límite al mínimo de frecuencia que puede bajar nuestro procesador (cpufreqd también lo usa).
  • scaling_setspeed: Este archivo sólo aparece tras activar el governor userspace, y con él podemos seleccionar la velocidad del procesador manualmente o que algún programa (como speedfreq en modo dinámico, ver más abajo) lo controle.

Lo siguiente es usar un daemon que se encargue del manejo de la velocidad, ya que a través de estos archivos es poco manejable.

[editar] Daemons

Tenemos actualmente 3 daemons:

[editar] Cpufreqd

Código: Consola

emerge cpufreqd && rc-update add cpufreqd default

Cpufreqd es un governor que nos permite definir los máximos y los mínimos de velocidad, además del governor, según la carga de CPU, la batería y los programas que esten funcionando en el archivo /etc/cpufreqd.conf y que tiene esta pinta (es legible y sencillo, creo que no necesita mucha explicación)


Archivo: /etc/cpufreqd.conf
[General]
  pidfile=/var/run/cpufreqd.pid
  poll_interval=2
  pm_type=acpi
# Uncomment the following line to enable ACPI workaround (see cpufreqd.conf(5))
# acpi_workaround=1 verbosity=4
#(if you want a minimal logging set to 5)
# Full performance
  [Profile]
  name=ac
  minfreq=600000
  maxfreq=1400000
  policy=performance
# Maximum power saving
  [Profile]
  name=battery
  minfreq=600000
  maxfreq=900000
  policy=powersave
# Constant frequency
  [Profile]
  name=dvd
  minfreq=900000
  maxfreq=1100000
  policy=powersave
# Full performance when running on AC
  [Rule]
  name=ac_on
  ac=on
  profile=ac
# Compiling should be fast if battery state is ok
  [Rule]
  name=compiling
  ac=off
  battery_interval=30-100
  programs=emerge,make,gcc,cpp
  cpu_interval=0-100
  profile=ac
# watching DVD's gets sluggish with slow CPU frequency
# Can also be used for games etc.
  [Rule]
  name=dvd_watching
  ac=off
  battery_interval=15-100
  programs=xine,mplayer,avidemux,kaffeine,kmplayer
  cpu_interval=0-100
  profile=dvd
# If above doesn't apply, maximise power saving
  [Rule]
  name=battery_on
  ac=off
  battery_interval=0-100
  cpu_interval=0-100
  profile=battery

[editar] Cpudyn

Código: Consola

emerge cpudyn && rc-update add cpudyn default

Este governor está programado por un español y su función consiste en cambiar entre powersave y performance según la carga y respondiendo rápidamente a los eventos interactivos (ratón, teclado) para que se note mínimamente su efecto. Además también se encarga de apagar tus discos duros. Su fichero de configuración lo encontraréis en: /etc/conf.d/cpudyn

[editar] Speedfreq

Código: Consola

emerge speedfreq; rc-update add speedfreq default

Este governor tiene varios modos de funcionamiento:

  • auto: se autoconfigura según el estado de la batería (ACPI)
  • fixed: pone la velocidad del procesador a un velocidad determinada
  • powersave: activa el governor powersave
  • performance: activa el governor performance
  • dynamic: va aumentando y disminuyendo dinámicamente la frecuencia según la carga y el uso.

Este governor se configura en /etc/conf.d/speedfreq y podemos poner el modo por defecto:

Archivo: /etc/conf.d/speedfreq
# Select here how you want your CPU to be controlled
# If you select auto you should use the battery.sh script
# provided with this ebuild to control speed depending on A/C status
# acceptable values:
#       powersave       maximise power savings
#       performance     maximise performance
#       dynamic         adjust speed according to CPU load (default)
#       NNN             set CPU to a fixed speed of NNN MHz
#       auto            let the init script detect current battery status
SPEEDFREQ_SPEED="dynamic"

# For more options refer to `speedfreqd -h`
SPEEDFREQ_OPTS=""

y además tiene un cliente de nombre speedfreq que nos permitirá controlar al daemon.

[editar] Créditos

Herramientas personales