Gestión de energía en Linux

Os copio aquí la guía de configuraciones de gestión de energía de Gentoo Linux, aplicable a cualquier distribución. Es muy completa, y realmente efectiva. La he probado en mi equipo y funciona realmente bien.


Guía de Administración de Energía

Contenido:

1. Introducción

La capacidad y el tiempo de vida de las baterías de un portátil han mejorado mucho en los últimos años. No obstante, los procesadores modernos consumen mucha más energía que los antiguos y cada generación de portátiles trae consigo más dispositivos hambrientos de energía. Por eso es que la Administración de Energía es más importante que nunca. Incrementar el tiempo de duración de una batería no significa necesariamente comprar otra. Mucho se puede lograr con tan sólo aplicar políticas inteligentes de Administración de Energía.

Una rápida vista general

Por favor, observe que esta guía describe la Administración de Energía para portátiles. Aunque algunas secciones pueden ser válidas para servidores, otras no lo son e incluso pueden causar daño. Por favor, no aplique nada de esta guía a un servidor a menos que realmente sepa lo que está haciendo.

Como esta guía se ha convertido un poco larga, a continuación hay un corta vista general que le ayudará a encontrar su camino a lo largo de ésta.

El capítulo de Prerrequisitos habla acerca de algunos requerimientos que deberían cumplirse antes de que funcione cualquiera de las siguientes secciones individuales de dispositivos. Esto incluye los ajustes a la BIOS, configuración del kernel y algunas simplificaciones en el área del usuario. Los siguientes tres capítulos se enfocan en los dispositivos que típicamente consumen más energía - procesador, pantalla y disco duro. Cada uno puede ser configurado de forma separada. La Administración de Energía de la CPU muestra cómo ajustar la frecuencia del procesador para ahorrar un máximo de energía sin perder mucho rendimiento. Distintos trucos previenen a su disco duro de trabajar innecesariamente más de lo usual en la sección Administración de Energía del Disco (disminuyendo el nivel de ruido como agradable efecto secundario). Algunas notas sobre LAN inalámbricas y USB completan la sección de dispositivos en Administración de Energía para otros dispositivos mientras que otro capítulo está dedicado (más experimentalmente) a los estados de sueño. última pero no menos importante está la sección de Solución de problemas que lista los errores comunes.

Presupuesto de Energía para cada componente


Ilustración 1.1: Presupuesto de Energía para cada componente

Fig. 1: ¿Cuánta energía consume cada componente?

Casi toda componente puede operar en estados diferentes - apagada, durmiendo, inactiva, activa por nombrar unos pocos - consumiendo una cantidad distinta de energía. La mayor parte de la energía es consumida por la pantalla LCD, la CPU, el chipset y los discos duros. Frecuentemente se puede activar la Administración de Energía independiente del SO en la BIOS, pero una configuración inteligente en los sistemas operativos que se adapta a situaciones diferentes puede lograr mucho más.

2. Prerrequisitos

Antes de discutir los detalles acerca de cómo hacer que los dispositivos individuales sepan de sus propias capacidades de Administración de Energía, asegúrese que se cumplan ciertos requerimientos. Después de controlar los ajustes de la BIOS, algunas opciones del kernel deben estar activadas - éstas son en resumen: ACPI, estados de sueño y calibración de frecuencia de la CPU. Como el ahorro de energía viene la mayoría de la veces junto a pérdida de rendimiento o latencia incrementada, debería ser sólo activada cuando se están usando las baterías. Aquí es cuando viene a mano un nuevo nivel de ejecución llamado battery.

La parte de la BIOS

Primero demos una mirada a su configuración de Administración de Energía en la BIOS. La mejor forma es combinar políticas de la BIOS y del sistema operativo, pero por el momento es mejor desactivar la mayor parte referente a la BIOS. Esto le asegura que no va a interferir con sus políticas. No olvide revisar nuevamente su configuración de la BIOS luego de que haya configurado el resto de las cosas.

Ajustando los parámetros USE

Por favor, revise que el parámetro USE acpi esté presente en el fichero /etc/make.conf. Otros parámetros USE que pueden ser interesantes para su sistema son: apm, lm_sensors, nforce2, nvidia y pmu. Vea /usr/portage/profiles/use*.desc para más detalles. Si olvidó ajustar alguno estos parámetros, puede recompilar los paquetes afectados usando el parámetro --newuse al usar emerge, vea man emerge.

Configurando el núcleo

El soporte de ACPI (siglas en inglés de Configuración Avanzada e Interfaz de Energía) en el núcleo aún está en progreso. Al usar un núcleo reciente se asegurará de tener el soporte más actualizado.

Existen diferentes fuentes del núcleo en Portage. Le recomendamos usar gentoo-sources o suspend2-sources. La última contiene parches para Software Suspend 2, vea el capítulo sobre los estados de sueño para más detalles. Cuando configure el núcleo, active al menos estas opciones:

Listado de Código 2.1: Configuración mínima del núcleo para la Administración de Energía (Núcleo 2.6)

Power Management Options --->
[*] Power Management Support
[ ] Software Suspend

ACPI( Advanced Configuration and Power Interface ) Support --->
[*] ACPI Support
[ ] Sleep States
[ ] /proc/acpi/sleep (deprecated)
[*] AC Adapter
[*] Battery
<M> Button
<M> Video
[ ] Generic Hotkey
<M> Fan
<M> Processor
<M> Thermal Zone
< > ASUS/Medion Laptop Extras
< > IBM ThinkPad Laptop Extras
< > Toshiba Laptop Extras
(0) Disable ACPI for systems before Jan 1st this year
[ ] Debug Statements
[*] Power Management Timer Support
< > ACPI0004,PNP0A05 and PNP0A06 Container Driver (EXPERIMENTAL)

CPU Frequency Scaling --->
[*] CPU Frequency scaling
[ ] Enable CPUfreq debugging
< > CPU frequency translation statistics
[ ] CPU frequency translation statistics details
Default CPUFreq governor (userspace)
<*> 'performance' governor
<*> 'powersave' governor
<*> 'ondemand' cpufreq policy governor
<*> 'conservative' cpufreq governor
<*> CPU frequency table helpers
<M> ACPI Processor P-States driver
<*> CPUFreq driver for your processor

Decida si quiere activar "Software Suspend" (Suspensión del Software), "Suspend-to-Disk" (Suspender a Disco) y "Sleep States" (Estados de Sueño) (ver más abajo). Si posee un portátil ASUS, Medion o Toshiba, active la sección apropiada.

El núcleo debe saber cómo activar la calibración de la frecuencia de la CPU en su procesador. Debido a que cada tipo de CPU tiene una interfaz distinta, tiene que elegir el controlador apropiado para su procesador. Tenga cuidado aquí, por ejemplo, al activar la modulación del reloj de un Pentium 4 en un sistema Pentium M llevará a resultados extraños. Consulte la documentación del núcleo si no está seguro cuál elegir.

Compile su núcleo, asegúrese de que se carguen los módulos adecuados al inicio y arranque su nuevo núcleo con ACPI activada. A continuación ejecute emerge sys-power/acpid para obtener el demonio acpi. éste le informa sobre los eventos como el cambio de Corriente Alterna a la batería o al cerrar la tapa del portátil. Verifique que estén cargados los módulos si es que no los compiló en el núcleo e inicie acpid mediante /etc/init.d/acpid start. Ejecute rc-update add acpid default para cargarlo al inicio. Pronto verá cómo usarlo.

Listado de Código 2.2: Instalando acpid

# emerge sys-power/acpid
# /etc/init.d/acpid start
# rc-update add acpid default

Creando un nivel de ejecución "battery"

La política por defecto será activar la Administración de Energía sólo cuando se necesite, al usar baterías. Para que sea conveniente el cambio entre Corriente Alterna y batería, haga un nivel de ejecución battery que contenga todos los guiones que inician y detienen la Administración de Energía.

Nota: Puede saltarse con seguridad esta sección si no le agrada la idea de tener otro nivel de ejecución. No obstante, al saltarse este paso hará que el resto sea más complicado de configurar. Las siguientes secciones asumen que existe el nivel de ejecución battery.

Listado de Código 2.3: Creando el nivel de ejecución battery

# cd /etc/runlevels
# cp -a default battery

Listo. Su nuevo nivel de ejecución battery contiene todo tal como el default, pero todavía no existe un cambio automático entre ellos. Es hora de cambiar eso.

Reaccionando a los eventos de ACPI

Entre los típicos eventos de ACPI están el cerrar la tapa del portátil, cambiar la fuente de energía o presionar el botón para dormir. Un evento importante es el cambiar la fuente de energía, que debería gatillar un cambio del nivel de ejecución. Un pequeño guión se encargará de esto.

Primero necesita un guión que cambie el nivel de ejecución a default y respectivamente a battery dependiendo de la fuente de energía. El guión usa el comando on_ac_power de sys-power/powermgmt-base - asegúrese de que el paquete está instalado en su sistema.

Listado de Código 2.4: Instalando powermgt-base

# emerge powermgmt-base 

Ahora puede determinar la fuente de energía ejecutando on_ac_power && echo AC available || echo Running on batteries en una shell. El guión de abajo es el responsable de cambiar los niveles de ejecución. Guárdelo como /etc/acpi/actions/pmg_switch_runlevel.sh.

Listado de Código 2.5: /etc/acpi/actions/pmg_switch_runlevel.sh

#!/bin/bash

# INICIO configuración
RUNLEVEL_AC="default"
RUNLEVEL_BATTERY="battery"
# FIN configuración
if [ ! -d "/etc/runlevels/${RUNLEVEL_AC}" ]
then
logger "${0}: Runlevel ${RUNLEVEL_AC} does not exist. Aborting."
exit 1
fi

if [ ! -d "/etc/runlevels/${RUNLEVEL_BATTERY}" ]
then
logger "${0}: Runlevel ${RUNLEVEL_BATTERY} does not exist. Aborting."
exit 1
fi

if on_ac_power
then
if [[ "$(</var/lib/init.d/softlevel)" != "${RUNLEVEL_AC}" ]]
then
logger "Switching to ${RUNLEVEL_AC} runlevel"
/sbin/rc ${RUNLEVEL_AC}
fi
elif [[ "$(</var/lib/init.d/softlevel)" != "${RUNLEVEL_BATTERY}" ]]
then
logger "Switching to ${RUNLEVEL_BATTERY} runlevel"
/sbin/rc ${RUNLEVEL_BATTERY}
fi

No olvide correr chmod +x /etc/acpi/actions/pmg_switch_runlevel.sh para que el guión sea ejecutable. La última cosa que debe ser hecha es llamar al guión siempre y cuando la fuente de energía cambie. Esto se hace capturando los eventos ACPI con la ayuda de acpid. Primero necesita saber qué eventos son generados cuando cambia la fuente de energía. Los eventos se denominan ac_adapter y battery en la mayoría de los portátiles, pero puede ser diferente en el suyo.

Listado de Código 2.6: Determinando los eventos ACPI para cambiar la fuente de energía

# tail -f /var/log/acpid | grep "received event" 

Ejecute el comando de arriba y saque el cable de energía del portátil. Debería ver algo como esto:

Listado de Código 2.7: Salida de muestra para cambios de fuente de energía

[Tue Sep 20 17:39:06 2005] received event "ac_adapter AC 00000080 00000000"
[Tue Sep 20 17:39:06 2005] received event "battery BAT0 00000080 00000001"

La parte interesante es la cadena entre comillas después de received event. Esta será contrastada por la línea de evento en los archivos que va a crear más abajo. No se preocupe si su sistema genera múltiples eventos o siempre el mismo. Siempre que se genere algún evento, el cambio de nivel de ejecución funcionará.

Listado de Código 2.8: /etc/acpi/events/pmg_ac_adapter

# Reemplace "ac_adapter" que aparece abajo con el evento generado en su portátil
# Por ejemplo, ac_adapter.* empareja o tiene un calce con ac_adapter AC 00000080 00000000
event=ac_adapter.*
action=/etc/acpi/actions/pmg_switch_runlevel.sh %e

Listado de Código 2.9: /etc/acpi/events/pmg_battery

# Reemplace "battery" que aparece abajo con el evento generado en su portátil
# Por ejemplo, battery.* empareja o tiene un calce con battery BAT0 00000080 00000001
event=battery.*
action=/etc/acpi/actions/pmg_switch_runlevel.sh %e

Finalmente acpid tiene que ser reiniciado para reconocer los cambios.

Listado de Código 2.10: Finalizando el cambio de nivel de ejecución con acpid

# /etc/init.d/acpid restart 

Pruébelo: Conecte su portátil a la Corriente Alterna y observe en syslog los mensajes "Switching to AC mode" o "Switching to battery mode". Vea la sección de Solución de Problemas si el guión no es capaz de detectar la fuente de energía de forma apropiada.

Debido a la naturaleza del mecanismo de eventos, su portátil arrancará en el nivel de ejecución default sin importar el estado de la Corriente Alterna o la batería. Esto es adecuado cuando usa Corriente Alterna pero nos gustaría arrancar en el nivel de ejecución battery en otros casos. Una solución sería agregar un parámetro adicional al gestor de arranque con softlevel=battery, pero es fácil que dicha elección se olvide. Una mejor manera es falsear un evento ACPI al término del proceso de arranque y dejar que el guión /etc/acpi/default.sh decida si es necesario un cambio del nivel de ejecución. Abra /etc/conf.d/local.start en su editor favorito y agregue estas líneas:

Listado de Código 2.11: Ajuste del nivel de ejecución al momento del arranque mediante la edición de local.start

# Falsear un evento acpi para cambiarse el nivel de ejecución si se
están usando baterías

/etc/acpi/actions/pmg_switch_runlevel.sh "battery/battery"

Al estar preparado tal como se ha hecho antes, ya puede activar las políticas de Administración de Energía para los dispositivos individuales.

3. Administración de Energía de la CPU

Los procesadores de portátiles pueden operar en frecuencias diferentes. Algunos también permiten cambiar el voltaje. La mayoría del tiempo su CPU no necesita funcionar al máximo de rapidez y ajustarla para que disminuya hará que ahorre mucha energía - frecuentemente sin disminución de rendimiento.

Algunos términos técnicos

La calibración de frecuencia de la CPU trae algunos términos técnicos que pueden ser desconocidos. A continuación se presenta una rápida introducción.

Primero que todo, el núcleo debe ser capaz de cambiar la frecuencia del procesador. El controlador CPUfreq del procesador conoce los comandos para hacerlo en su CPU. Por lo tanto es importante elegir el controlador correcto en su núcleo. Ya debería haber hecho esto más arriba. Una vez que el kernel sabe cómo cambiar las frecuencias, debe conocer qué frecuencia debería configurar. ésto es realizado de acuerdo a la política que consiste de una política CPUfreq y un gobernador. Una política CPUfreq la constituyen dos números que definen el rango en que debe estar la frecuencia - la mínima y máxima frecuencia. Por ejemplo, el gobernador powersave siempre elige la mínima frecuencia disponible, el gobernador de performance elige la más alta. El gobernador userspace no hace decisión alguna pero elige aquello que el usuario (o el programa en el área del usuario) quiera - lo que significa que lee la frecuencia desde /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed.

éstos todavía no parecen ser los cambios dinámicos de frecuencia esperados y de hecho no lo son. Sin embargo, es posible llevar a cabo el ansiado dinamismo con varias aproximaciones. Por ejemplo, el gobernador ondemand realiza sus decisiones dependiendo de la carga actual de la CPU. Es lo mismo que realizan otra herramientas de usuario como cpudyn, cpufreq, powernowd y muchas más. Los eventos de ACPI pueden ser usados para activar o desactivar los cambios dinámicos dependiendo de la fuente de energía.

Ajustando manualmente la frecuencia

Disminuir la velocidad de la CPU y el voltaje tiene dos ventajas: Por un lado se consume menos energía y en el otro hay una mejora térmica ya que su sistema no se calienta como si estuviera corriendo a toda velocidad. La principal desventaja es que obviamente hay una pérdida de rendimiento. El disminuir la velocidad del procesador es un contrapeso entre la pérdida de rendimiento y el ahorro de energía.

Nota: No todo portátil ofrece la capacidad de calibración de la frecuencia. Si no está seguro, déle una mirada a la lista de procesadores soportados en la sección Solución de Problemas para verificar si el suyo lo está.

Es hora de probar si funciona el cambio de frecuencia de la CPU. Instalemos otra herramienta que es muy útil para propósitos de depuración: sys-power/cpufrequtils

Listado de Código 3.1: Chequeando la frecuencia de la CPU

# emerge cpufrequtils
# cpufreq-info

Aquí hay un ejemplo de la salida del comando:

Listado de Código 3.2: Salida de ejemplo de cpufreq-info

cpufrequtils 0.3: cpufreq-info (C) Dominik Brodowski 2004
Report errors and bugs to linux@brodo.de, please.
analyzing CPU 0:
driver: centrino
CPUs which need to switch frequency at the same time: 0
hardware limits: 600 MHz - 1.40 GHz
available frequency steps: 600 MHz, 800 MHz, 1000 MHz, 1.20 GHz, 1.40 GHz
available cpufreq governors: conservative, ondemand, powersave, userspace, performance
current policy: frequency should be within 924 MHz and 1.40 GHz.
The governor "performance" may decide which speed to use
within this range.
current CPU frequency is 1.40 GHz.

Pruebe cpufreq-set para estar seguro que funciona el cambio de frecuencia. Ejecute, por ejemplo, cpufreq-set -g ondemand para activar el gobernador ondemand y verifique el cambio con cpufreq-info. Si no funciona como es esperado, puede encontrar ayuda en la sección Solución de Problemas al final de esta guía.

Adaptación automatizada de la frecuencia

Lo de arriba es agradable, pero no para realizarlo a diario. Es mejor dejar que su sistema ajuste automáticamente la frecuencia apropiada. Hay muchos enfoques diferentes para hacer ésto. La siguiente tabla le da una visión general para ayudarle a decidirse en una de ellos. Está separada en tres categorías: núcleo para los enfoques que sólo necesitan apoyo en el núcleo, demonio para los programas que corren en segundo plano y gráfica para los programas que provean de una interfaz para realizar una fácil configuración y cambios.

Nombre Categoría Decisión de cambio Gobernadores del Núcleo Gobernadores adicionales Comentarios
Gobernador 'en demanda' Núcleo Carga de la CPU N/D N/D Elige la frecuencia máxima donde la CPU esté con carga y la disminuye cuando la CPU está con poca actividad. Se pueden hacer afinamientos adicionales a través de los archivos en /sys/devices/system/cpu/cpu0/cpufreq/ondemand/. Aún requiere de herramientas del área del usuario (programas y guiones) si se desea cambiar de gobernador (o similar).
Gobernador 'conservador' Núcleo Carga de la CPU N/D N/D A diferencia del gobernador 'en demanda', el 'conservador' no salta a la frecuencia máxima cuando la carga de la CPU es alta, sino que incrementa la frecuencia paso a paso. Se pueden hacer afinamientos adicionales a través de los archivos en /sys/devices/system/cpu/cpu0/cpufreq/conservative/. Aún requiere de herramientas del área del usuario (programas y guiones) si se desea cambiar de gobernador (o similar).
cpudyn Demonio Carga de la CPU Performance, powersave "Dynamic" También permite disk standby - No obstante, note que el laptop mode hará un mejor trabajo en la mayoría de los casos.
cpufreqd Demonio Estado de la batería, carga de la CPU, temperatura, programas en ejecución Todos disponibles Ninguno Configuración sofisticada (pero también complicada). Extensible mediante plugins como monitoreo de sensores (lm_sensors) o posible de coordinar con algunas tarjetas gráficas y core basados en nVidia. Cpufreqd es capaz de reconocer SMP y opcionalmente puede ser controlado de forma manual en tiempo de ejecución.
powernowd Demonio Carga de la CPU Ninguno "Passive", "sine", "aggressive" Acepta SMP.
ncpufreqd Demonio Temperatura Ninguno "Powersave", "Performance" Activa el gobernador a usar entre "performance" y "powersave" dependiendo de la temperatura del sistema. Muy útil en portátiles con notorios problemas de calentamiento.
speedfreq Demonio Carga de la CPU Ninguno "Dynamic", "powersave", "performance", "fixed speed" Fácil de configurar con una útil interfaz cliente/servidor. Requiere de un núcleo 2.6. No parece seguir siendo mantenido y fue borrado de Portage. Por favor, cámbiese a cpufreqd si todavía lo está usando.
gtk-cpuspeedy Gráfica Ninguno Ninguno Ninguno Herramienta gráfica de Gnome para ajustar manualmente la frecuencia de la CPU. No ofrece automatización alguna.
klaptopdaemon Gráfica Estado de la batería Todos disponibles Ninguno Sólo para KDE, se requiere del gobernador 'ondemand' para la calibración dinámica de frecuencia.

Aunque a primera vista parece simple ajustar la frecuencia al nivel actual de carga, no es una tarea trivial. Un mal algoritmo puede causar que se cambie entre dos frecuencias todo el tiempo o gastar energía cuando se ajusta la frecuencia a un nivel innecesariamente alto.

¿Cuál elegir? Si no tiene idea acerca de esto, primero intente cpufreqd:

Listado de Código 3.3: Instalando cpufreqd

# emerge cpufreqd 

cpufreqd puede ser configurado editando /etc/cpufreqd.conf. La configuración por defecto que viene con cpufreqd puede parecer algo confusa. Recomendamos reemplazarla con la hecha por el antiguo desarrollador de Gentoo Henrik Brix Andersen (ver más abajo). Por favor, observe que necesita la versión cpufreqd-2.0.0 o superior. Las versiones previas tienen una sintaxis diferente para el archivo de configuración.

Listado de Código 3.4: /etc/cpufreqd.conf (cpufreqd-2.0.0 y siguientes)

[General]
pidfile=/var/run/cpufreqd.pid
poll_interval=3
enable_plugins=acpi_ac, acpi_battery
enable_remote=1
remote_group=wheel
verbosity=5
[/General]

[Profile]
name=ondemand
minfreq=0%
maxfreq=100%
policy=ondemand
[/Profile]

[Profile]
name=conservative
minfreq=0%
maxfreq=100%
policy=conservative
[/Profile]

[Profile]
name=powersave
minfreq=0%
maxfreq=100%
policy=powersave
[/Profile]

[Profile]
name=performance
minfreq=0%
maxfreq=100%
policy=performance
[/Profile]

[Rule]
name=battery
ac=off
profile=conservative
[/Rule]

[Rule]
name=battery_low
ac=off
battery_interval=0-10
profile=powersave
[/Rule]

[Rule]
name=ac
ac=on
profile=ondemand
[/Rule]

Ahora puede iniciar el demonio cpufreqd. Agréguelo a los niveles de ejecución default y battery también.

Listado de Código 3.5: Iniciando cpufreqd

# rc-update add cpufreqd default battery
# rc

Algunas veces puede ser deseable seleccionar otra política distinta a la escogida por el demonio, por ejemplo, cuando la energía de la batería está baja pero sabe que tendrá pronto disponible corriente alterna (AC). En ese caso puede activar el modo manual de cpufreqd con cpufreqd-set manual y seleccionar una de sus políticas configuradas (listadas por cpufreqd-get). Puede dejar el modo manual ejecutando cpufreqd-set dynamic.

Aviso: No ejecute al mismo tiempo más de uno de los programas indicados arriba. Puede causar confusión como intercambios sucesivos entre dos frecuencias.

Verificando el resultado

La última cosa por chequear es que sus nuevas políticas hagan bien el trabajo. Una forma fácil de comprobarlo es monitorizando la velocidad de la CPU mientras esté trabajando con su portátil:

Listado de Código 3.6: Monitoreando la velocidad de la CPU

# watch grep "cpu MHz" /proc/cpuinfo 

Si no se actualiza /proc/cpuinfo (ver sección de Solución de Problemas), monitoree la frecuencia de la CPU con:

Listado de Código 3.7: Monitoreo alternativo de la velocidad de la CPU

# watch x86info -mhz 

Dependiendo de su configuración, la velocidad de la CPU debería aumentar en situaciones de alta carga, disminuir cuando no hay actividad o permanecer en el mismo nivel. Cuando se usa cpufreqd y el nivel de verbosidad está ajustado en 5 o más en cpufreqd.conf, obtendrá información adicional de lo que está pasando y será reportada a syslog.

4. Administración de Energía de la pantalla LCD

Como puede ver en la figura 1.1, la pantalla LCD consume la mayor parte de la energía (puede que no sea el caso para CPUs no móviles). Por tanto, es bien importante no sólo apagar la pantalla cuando ésta no se necesite, sino también reducir su contraluz si es posible. La mayoría de los portátiles ofrece la posibilidad para controlar la disminución de aquello.

Ajustes de Standby

La primera cosa a revisar son los tiempos de standby/suspensión/apagado de la pantalla. Como esto depende fuertemente de su gestor de ventanas, le dejaremos esa tarea. Hay dos lugares en común: Se puede blanquear el terminal con setterm -blank <número de minutos>, setterm -powersave on y setterm -powerdown <número de minutosM>. Para X.org, modifique /etc/X11/xorg.conf en forma similar a ésto:

Listado de Código 4.1: Ajustes para suspender el LCD en X.org y XFree86

Section "ServerLayout"
Identifier [...]
[...]
Option "BlankTime" "5" # Blanquea la pantalla luego de 5 minutos (Falso)
Option "StandbyTime" "10" # Apaga la pantalla luego de minutos (DPMS)
Option "SuspendTime" "20" # Suspensión total luego de 20 minutos
Option "OffTime" "30" # Apagado completo pasado una media hora
[...]
EndSection

[...]

Section "Monitor"
Identifier [...]
Option "DPMS" "true"
[...]
EndSection

Esto es lo mismo para XFree86 y /etc/X11/XF86Config.

Disminución de contraluz

Probablemente es más importante la disminución de contraluz. Si tiene acceso a los ajustes de disminución vía alguna herramienta, escriba un pequeño guión que disminuya el contraluz en el modo battery y ubíquelo en su nivel de ejecución battery. El siguiente guión debería funcionar en la mayoría de los portátiles IBM Thinkpad y Toshiba. Tiene que activar la opción apropiada en su núcleo (Sólo para pórtatiles IBM Thinkpad). Para pórtatiles Toshiba, instale el paquete app-laptop/acpitool y salte la configuración de ibm_acpi descrita más abajo.

Aviso: El soporte para el ajusto del brillo está marcado como experimental en ibm-acpi. Este accede directamente al hardware y puede causar daño severo a su sistema. Por favor, lea el sitio web ibm-acpi.

Para poder ajustar el nivel de brillo debe ser cargado el módulo ibm_acpi con el parámetro experimental.

Listado de Código 4.2: Cargar automáticamente el módulo ibm_acpi

(¡Por favor, lea las advertencias indicadas arriba antes de seguir!)
# echo "options ibm_acpi experimental=1" >> /etc/modules.d/ibm_acpi
# /sbin/update-modules
# echo ibm_acpi >> /etc/modules.autoload.d/kernel-2.6
# modprobe ibm_acpi

Esto debería funcionar sin mensajes de error y debería ser creado el archivo /proc/acpi/ibm/brightness luego de que sea cargado el módulo. Un guión de inicio se ocupará de elegir el brillo de acuerdo a la fuente de energía.

Listado de Código 4.3: /etc/conf.d/lcd-brightness

# Vea /proc/acpi/ibm/brightness para los valores disponibles
# Por favor lea /usr/src/linux/Documentation/ibm-acpi.txt

# Nivel de brillo en modo CA (Corriente Alterna). El valor por defecto es 7.
BRIGHTNESS_AC=7

# Nivel de brillo en modo batería. El valor por defecto es 4.
BRIGHTNESS_BATTERY=4

Listado de Código 4.4: /etc/init.d/lcd-brightness

#!/sbin/runscript

set_brightness() {
if on_ac_power
then
LEVEL=${BRIGHTNESS_AC:-7}
else
LEVEL=${BRIGHTNESS_BATTERY:-4}
fi

if [ -f /proc/acpi/ibm/brightness ]
then
ebegin "Setting LCD brightness"
echo "level ${LEVEL}" > /proc/acpi/ibm/brightness
eend $?
elif [[ -e /usr/bin/acpitool && -n $(acpitool -T | grep "LCD brightness") ]]
then
ebegin "Setting LCD brightness"
acpitool -l $LEVEL >/dev/null || ewarn "Unable to set lcd brightness"
eend $?
else
ewarn "Setting LCD brightness is not supported."
ewarn "For IBM Thinkpads, check that ibm_acpi is loaded into the kernel"
ewarn "For Toshiba laptops, you've got to install sys-power/acpitool"
fi
}

start() {
set_brightness
}

stop () {
set_brightness
}

Cuando esté listo, asegúrese de que el brillo sea ajustado de forma automática mediante la adición de este al nivel de ejecución battery.

Listado de Código 4.5: Activando el ajuste de brillo automático

# chmod +x /etc/init.d/lcd-brightness
# rc-update add lcd-brightness battery
# rc

5. Administración de energía del Disco

Los discos duros consumen menos energía en el modo "sleep". Por lo tanto, tiene sentido activar las características de ahorro de energía siempre y cuando el disco no esté siendo usado por una cierta cantidad de tiempo. Le mostraremos dos posibles alternativas para hacerlo. Primero, el "laptop-mode" ahorrará la mayor cantidad de energía debido a las muchas mediciones que impiden o al menos retrasan los accesos de escritura. La desventaja es que a causa de los accesos de escritura retrasados, en caso de corte de energía o caída abrupta del núcleo será más riesgoso a la pérdida de datos. Si no le agrada esto, tiene que asegurarse que no hay procesos que escriban con frecuencia al disco. Luego puede activar las características de ahorro de energía del disco duro con hdparm como segunda alternativa.

Aumentando el tiempo de inactividad - laptop-mode

Los núcleos 2.6 recientes incluyen el modo laptop-mode. Cuando está activado, los contenidos de las memorias de tránsito en estado sucio se escriben a disco cuando hay llamadas de lectura o después de 10 minutos (en vez de 30 segundos). Esto minimiza el tiempo de de rotación del disco duro.

Listado de Código 5.1: Inicio automátizado del laptop-mode

# emerge laptop-mode-tools 

laptop-mode-tools tiene su archivo de configuración en /etc/laptop-mode/laptop-mode.conf. Ajústelo como le plazca, está bien documentado. Ejecute rc-update add laptop_mode battery para iniciarlo automáticamente.

Las versiones recientes (1.11 y siguientes) de laptop-mode-tools incluyen una herramienta nueva: lm-profiler. Esta monitorizará el uso de disco de su sistema, los servicios de red en ejecución y sugiere desactivar aquellos innecesarios. Puede ya sea desactivarlo a través del soporte de niveles de ejecución incluido en laptop-mode-tools (lo que puede ser revertido por el /sbin/rc de Gentoo) o usar sus niveles de ejecución default/ battery (recomendado).

Listado de Código 5.2: Salida de muestra de lm-profiler en ejecución

# lm-profiler
Profiling session started.
Time remaining: 600 seconds
[4296896.602000] amarokapp
Time remaining: 599 seconds
[4296897.714000] sort
[4296897.970000] mv
Time remaining: 598 seconds
Time remaining: 597 seconds
[4296900.482000] reiserfs/0

Luego de realizar un perfil de su sistema por unos 10 minutos, lm-profiler presentará una lista de servicios que pueden haber causado accesos a disco durante este tiempo.

Listado de Código 5.3: lm-profiler sugiere desactivar algunos servicios

Program: "atd"
Reason: standard recommendation (program may not be running)
Init script: /etc/init.d/atd (GUESSED)

Do you want to disable this service in battery mode? [y/N]: n

Para desactivar atd como se sugiere en el ejemplo de arriba, tendría que ejecutar rc-update del atd battery. Sea cuidadoso en no desactivar servicios que son necesarios para que su sistema funcione adecuadamente - lm-profiler es probable que genere algunos falsos positivos. No desactive un servicio si está inseguro que este es necesario.

Limitar los accesos de escritura

Si no quiere usar el laptop-mode, debe prestar especial cuidado para desactivar los servicios que escriben frecuentemente a su disco - por ejemplo, syslogd es un buen candidato. Probablemente no querrá apagarlo por completo, pero es posible modificar el archivo de configuración de manera que las cosas innecesarias no se escriban a la bitácora y por tanto, no creen tráfico a disco. Cups escribe a disco periódicamente, así que considere desactivarlo y sólo actívelo de forma manual cuando sea necesario.

Listado de Código 5.4: Desactivar cups en el modo battery

# rc-update del cupsd battery 

También puede usar lm-profiler de laptop-mode-tools (ver más arriba) para encontrar los servicios a desactivar. Una vez que los haya eliminado todos, siga con la configuración de hdparm.

hdparm

La segunda posibilidad es usando hdparm. No lo haga si está usando laptop-mode. De otro modo modifique el archivo /etc/conf.d/hdparm y agregue los siguientes valores a la línea que corresponda al disco duro. Este ejemplo asume que el disco en cuestión es el hda:

Listado de Código 5.5: Usando hdparm para la suspensión temporal del disco

hda_args="-q -S12"

Esto activará el ahorro de energía en el disco duro. Si en alguna oportunidad desea desactivarlo, modifique el /etc/conf.d/hdparm y cambie los valores a -q -S0, o solo ejecute hdparm -q -S0 /dev/hda.

Vea man hdparm para las opciones. Aunque siempre se puede iniciar hdparm manualmente cuando se está en modo de batería ejecutando /etc/init.d/hdparm start, es más sencillo automatizar la activación y la desactivación. Para esto, agregue hdparm al nivel de ejecución battery para activar el ahorro automáticamente.

Listado de Código 5.6: Automatizando la activación del ahorro de energía

# rc-update add hdparm battery 

Importante: Sea cuidadoso con los ajustes de disminución de velocidad/rotación de su disco duro. Ajustándolos a valores pequeños puede que dañe su disco y pierda la garantía.

Otros trucos

Otra posibilidad es desactivar el archivo de intercambio ("swap") en el modo battery. Antes de escribir el guión para realizar el swapon/swapoff, asegúrese que haya suficiente memoria RAM y que el archivo de intercambio no se use intensivamente, de otro modo estará en problemas.

Si no quiere usar el laptop-mode, todavía es posible minimizar el acceso al disco montando ciertos directorios como tmpfs - los accesos de escritura no son almacenados en el disco sino que permanecen en memoria principal y se pierden al desmontar. A menudo es útil montar el directorio /tmp de esta forma - pues no se le presta mayor atención ya que se limpia en cada arranque sin importar si fue montado en disco o en RAM. Sólo asegúrese tener suficiente RAM y que no haya algún programa (tal como un cliente de descargas o herramienta de compresión) que necesite mucho espacio en /tmp. Para activar ésto, active la opción de tmpfs en su núcleo y agregue a una línea como la siguiente al /etc/fstab:

Listado de Código 5.7: Editando /etc/fstab para que el /tmp sea aún más volátil

none /tmp tmpfs size=32m 0 0

Aviso: Preste atención al parámetro "size" y modifíquelo para su sistema. Si no está seguro, no intente probar esto, puede convertirse fácilmente en un cuello de botella del rendimiento. En caso de que quiera montar el /var/log de esta manera, asegúrese de escribir los archivos de bitácora a disco antes de desmontar el directorio. Son archivos esenciales. No intente montar el directorio /var/tmp de esta forma. Portage lo usa para compilar ...

6. Administración de Energía para otros dispositivos

Tarjetas gráficas

En caso que posea una tarjeta gráfica ATI que soporte PowerPlay (escalado dinámico del reloj para la unidad gráfica de procesamiento GPU), puede activar esta característica en X.org. Abra el archivo /etc/X11/xorg.conf y agregue (o active) la opción DynamicClocks en la sección Device. Por favor note que esta característica puede resultar en caídas o cuelgues en algunos sistemas.

Listado de Código 6.1: Activando el soporte PowerPlay de ATI en X.org

Section "Device"
[...]
Option "DynamicClocks" "on"
EndSection

Administración de energía para tarjetas inalámbricas

Las tarjetas LAN inalámbricas consumen bastante energía. Colóquelas en el modo de Administración de Energía igual que el disco duro.

Nota: Este guión asume que su interfaz inalámbrica se llama wlan0; reemplácela con el nombre real de su interfaz.

Listado de Código 6.2: Administración de Energía automatizada para WLAN

iwconfig_wlan0="power on"

Vea man iwconfig para detalles y más opciones como el lapso entre activaciones o de expiración. Si el controlador y el punto de acceso soportan la modificación de tiempos de faro (beacon), este sería un buen punto de inicio para ahorrar aún más energía.

Administración de Energía USB

Existen dos problemas con los dispositivos USB respecto al consumo de energía: Primero, los dispositivos como el mouse USB, cámaras digitales o llaveros USB consumen energía mientras están enchufados. No puede evitar ésto (no obstante desenchúfelos es caso de que no se necesiten)


    Editado por Daniel el 30/11/2007 a las 11:21:41h.