33.3. ACPI

ACPI se ha diseñado para hacer posible que el sistema operativo configure y controle los componentes de hardware individuales. ACPI sustituye a los sistemas anteriores PnP y APM. Proporciona información acerca de la batería, el adaptador de CA, la temperatura, el ventilador y los eventos del sistema como, por ejemplo, que se debe cerrar la cubierta o que la batería está baja.

El BIOS proporciona tablas que contienen información acerca de los métodos de acceso al hardware y a los componentes individuales. El sistema operativo se sirve de esta información para tareas como la asignación de interrupciones o la activación y desactivación de componentes. Como el sistema operativo ejecuta los comandos almacenados en el BIOS, el funcionamiento depende de la implementación del BIOS. Las tablas que ACPI puede detectar y cargar se indican en /var/log/boot.msg. Consulte la Sección 33.3.4, “Solución de problemas” para obtener más información acerca de la resolución de los problemas de ACPI.

33.3.1. Activación de ACPI

Si el núcleo detecta un BIOS ACPI al arrancar el sistema, ACPI se activa automáticamente y APM se desactiva. El parámetro de arranque acpi=force puede ser necesario para algunas máquinas antiguas. El equipo debe ser compatible con ACPI 2.0 o posterior. Consulte los mensajes de arranque del núcleo en /var/log/boot.msg para ver si ACPI está activada.

A continuación, es necesario cargar una serie de módulos, de lo que se ocupa el guión de inicio de acpid. Si alguno de estos módulos causa problemas, puede impedirse su carga o descarga en /etc/sysconfig/powersave/common. En el registro del sistema (/var/log/messages) se encuentran los mensajes de los módulos, lo que le permite ver qué componentes se han detectado.

En /proc/acpi aparecen ahora varios archivos que informan sobre el estado del sistema o que se pueden usar para modificar algunos de los estados. Algunas funciones no están totalmente operativas, ya que se encuentran todavía en desarrollo y el uso de otras depende en gran medida de la implementación del fabricante.

Todos los archivos (excepto dsdt y fadt) se pueden leer con cat. En algunos archivos, los ajustes se pueden modificar con echo; por ejemplo, echo X > archivo permite especificar los valores adecuados para X. Entre las posibilidades para acceder fácilmente a esos valores, se encuentra el comando powersave, que actúa como interfaz del daemon Powersave. A continuación, se describen los archivos más importantes:

/proc/acpi/info

Información general acerca de ACPI.

/proc/acpi/alarm

Aquí se especifica cuándo debe activarse el sistema después de haber estado en reposo. Por ahora, esta función no se admite totalmente.

/proc/acpi/sleep

Proporciona información acerca de los posibles estados de reposo.

/proc/acpi/event

Aquí se registran los eventos y el daemon Powersave los procesa (powersaved). Si ningún daemon accede a este archivo, los eventos (como, por ejemplo, presionar el botón de encendido o cerrar la cubierta) se podrán leer con cat /proc/acpi/event (se sale de ellos con Ctrl-C).

/proc/acpi/dsdt y /proc/acpi/fadt

Estos archivos contienen las tablas ACPI DSDT (tabla de descripción de sistemas diferenciados, del inglés Differentiated System Description Table) y FADT (tabla de descripción de ACPI fija, del inglés Fixed ACPI Description Table). Dichas tablas pueden leerse con acpidmp, acpidisasm y dmdecode. Puede encontrar estos programas junto con la correspondiente documentación en el paquete pmtools, por ejemplo, acpidmp DSDT | acpidisasm.

/proc/acpi/ac_adapter/AC/state

Muestra si está conectado el adaptador de CA.

/proc/acpi/battery/BAT*/{alarm,info,state}

Información detallada sobre el estado de la batería. Para conocer el nivel de carga, es necesario comparar el valor de last full capacity (última capacidad total) de info (información) con el de remaining capacity (capacidad restante) de state (estado). Una forma más fácil de hacerlo es usar alguno de los programas especiales que se describen en la Sección 33.3.3, “Herramientas de ACPI”. El nivel de carga que provocará que se desencadene un evento de batería (como indicaciones de advertencia, de batería baja o de estado crítico) se puede especificar en alarm (alarma).

/proc/acpi/button

Este directorio contiene información acerca de distintos commutadores, como los que corresponden a la cubierta y los botones del portátil.

/proc/acpi/fan/FAN/state

Muestra si el ventilador está funcionando en ese momento. Puede activar o desactivar el ventilador automáticamente escribiendo en este archivo 0 (encender) o 3 (apagar). No obstante, tanto el código ACPI del núcleo como el hardware (o el BIOS) hacen caso omiso de este ajuste cuando la temperatura del sistema es demasiado elevada.

/proc/acpi/processor/*

Se crea un subdirectorio independiente para cada CPU incluida en el sistema.

/proc/acpi/processor/*/info

Información sobre las posibilidades de ahorro de energía del procesador.

/proc/acpi/processor/*/power

Información sobre el estado actual del procesador. Un asterisco junto a C2 significa que el procesador está inactivo, que es el estado más frecuente, como puede apreciarse por el valor de usage (uso).

/proc/acpi/processor/*/throttling

Se puede utilizar para limitar el reloj del procesador. Normalmente, esto se puede hacer en 8 niveles. Esta opción es independiente del ajuste de la frecuencia de la CPU.

/proc/acpi/processor/*/limit

Si el rendimiento (obsoleto) y las limitaciones se controlan de forma automática mediante un daemon, se pueden especificar aquí los límites máximos. Existen algunos límites fijados por el sistema y otros establecidos por el usuario.

/proc/acpi/thermal_zone/

Hay un subdirectorio independiente para cada zona térmica. Una zona térmica es un área con propiedades térmicas semejantes, cuyo número y nombre están diseñados por el fabricante del hardware. No obstante, muchas de las posibilidades que ofrece ACPI no se llegan a implementar nunca. En su lugar, el BIOS se ocupa normalmente de controlar la temperatura sin que el sistema operativo intervenga, ya que lo que está en juego aquí es la duración del hardware. En consecuencia, algunos de los archivos siguientes sólo tienen valor en la teoría.

/proc/acpi/thermal_zone/*/temperature

La temperatura actual de la zona térmica.

/proc/acpi/thermal_zone/*/state

El estado indica si todo está en orden (ok) o si ACPI refrigera de forma active (activa) o passive (pasiva). En los casos en los que el control del ventilador no depende de ACPI, el estado es siempre ok.

/proc/acpi/thermal_zone/*/cooling_mode

Seleccione el método de refrigeración controlado por ACPI. Puede optar por el modo pasivo (menor rendimiento pero más económico) o por el activo (máximo rendimiento, pero el ventilador hace ruido).

/proc/acpi/thermal_zone/*/trip_points

Permite establecer la temperatura a partir de la cual se deben realizar acciones específicas en el equipo como, por ejemplo, la refrigeración activa o pasiva, la suspensión (cuando el estado es hot [caliente]) o el apagado (cuando el estado es critical [crítico]). Las acciones posibles se encuentran definidas en DSDT en función del dispositivo. Los puntos que se determinan en la especificación ACPI son: critical (crítico), hot (caliente), passive (pasivo), active1 (activo1) y active2 (activo2). Aunque no estén implementados todos ellos, es necesario especificarlos en este orden en el archivo. Por ejemplo, la entrada echo 90:0:70:0:0 > trip_points asigna a la temperatura un valor critical (crítico) de 90 grados y un valor passive (pasivo) de 70 grados (todas las temperaturas se miden en grados Celsius).

/proc/acpi/thermal_zone/*/polling_frequency

Si el valor de temperature (temperatura) no se actualiza automáticamente cuando cambia la temperatura, puede cambiar al modo de sondeo aquí. El comando echo X > /proc/acpi/thermal_zone/*/polling_frequency hace que se consulte la temperatura cada X segundos. Si X=0 se inhabilitará el sondeo.

Las opciones de configuración, la información y los eventos mencionados no requieren una edición manual. Para ello, se puede utilizar el daemon Powersave (powersaved) y sus distintas interfaces, como powersave, kpowersave y wmpowersave. Consulte la Sección 33.3.3, “Herramientas de ACPI”.

33.3.2. Control del rendimiento de la CPU

Existen tres métodos de ahorro de energía para la CPU. Dependiendo del modo de funcionamiento del equipo, estos métodos se pueden combinar también entre sí. El ahorro de energía también significa que el sistema se calienta menos y, por lo tanto, el ventilador debe activarse con menos frecuencia.

Ajuste de la frecuencia y el voltaje

PowerNow! y Speedstep son los nombres que han establecido las empresas AMD e Intel para esta tecnología que, por otra parte, incorporan también los procesadores de otros fabricantes. Este método consiste en reducir conjuntamente la frecuencia del reloj de la CPU y su voltaje central, con lo cual se consigue un ahorro de energía superior al lineal. Esto significa que con la mitad de la frecuencia (es decir, a medio rendimiento) se requiere mucho menos de la mitad de energía. Esta tecnología es independiente de APM y de ACPI. Existen dos métodos principales para ajustar la frecuencia de la CPU: a través del núcleo en sí o mediante una aplicación del espacio de usuario. Existen por tanto distintos gobernadores del núcleo que se pueden definir en /sys/devices/system/cpu/cpu*/cpufreq/.

gobernador userspace

Si se define el gobernador userspace, el núcleo otorga el control del ajuste de frecuencia de la CPU a una aplicación del espacio de usuario, por lo general un daemon. En las distribuciones de SUSE Linux, este daemon es el paquete powersaved. Cuando se emplea esta implementación, la frecuencia de la CPU se ajusta en relación con la carga del sistema de cada momento. Por defecto se emplea una de las implementaciones del núcleo. No obstante, en algunos tipos de hardware o según procesadores o controladores específicos, la implementación del espacio de usuario es la única solución que funciona por el momento.

gobernador ondemand

Se trata de la implantación en el núcleo de una directiva de frecuencia de la CPU dinámica que tendría que funcionar en la mayoría de sistemas. Cuado se detecta una carga alta en el sistema, la frecuencia de la CPU se aumenta inmediatamente, y se reduce con una carga baja del sistema.

gobernador conservative

Este gobernador es similar a la implementación ondemand, con la excepción de que se emplea una directiva más conservadora. La carga del sistema puede ser alta durante un periodo de tiempo concreto antes de que se aumente la frecuencia de la CPU.

gobernador powersave

La frecuencia de la CPU se define con el valor más bajo posible en términos estadísticos.

gobernador performance

La frecuencia de la CPU se define con el valor más alto posible en términos estadísticos.

Limitación de la frecuencia del reloj

Esta tecnología consiste en omitir un porcentaje determinado de los impulsos de la señal del reloj para la CPU. Con una limitación del 25%, se omite uno de cada cuatro impulsos; mientras que con una reducción del 87,5%, sólo uno de cada ocho impulsos llega al procesador. No obstante, el ahorro de energía es algo menor que el lineal. Normalmente, esta técnica se aplica solamente cuando no está disponible el ajuste de la frecuencia o para lograr el máximo ahorro de energía. Por otra parte, esta técnica requiere un proceso propio que la controle. La interfaz del sistema es /proc/acpi/processor/*/throttling.

Cómo poner el procesador en reposo

El sistema operativo pone el procesador en estado de reposo cuando no hay ningún tipo de actividad. En este caso, el sistema operativo envía a la CPU el comando halt. Existen tres niveles: C1, C2 y C3. En el estado de máximo ahorro de energía (C3), se detiene incluso la sincronización del caché del procesador con la memoria principal, por lo que este estado se adopta únicamente cuando no existe ningún dispositivo que modifique el contenido de la memoria principal a través de la actividad maestra del bus. Algunos controladores no permiten el uso de C3. El estado actual se muestra en /proc/acpi/processor/*/power.

El ajuste de la frecuencia y las limitaciones son sólo relevantes cuando el procesador está ocupado, ya que, si éste se encuentra inactivo, se utiliza de todas formas el estado C más económico. Si la CPU está ocupada, el ajuste de la frecuencia es el mejor método para ahorrar energía. A menudo, el procesador no trabaja al máximo de su capacidad y basta con bajar su frecuencia. Normalmente, el método más adecuado consiste en un ajuste dinámico de la frecuencia por medio del gobernador ondemand del núcleo o de un daemon, como powersaved. Cuando el equipo funciona con baterías o debe mantener una baja temperatura y hacer poco ruido, se recomienda establecer un ajuste estático a baja frecuencia.

La función de limitación debería utilizarse como último recurso, por ejemplo, para prolongar el tiempo de funcionamiento con baterías a pesar de que el sistema esté trabajando a pleno ritmo. No obstante, algunos sistemas no funcionan correctamente si la limitación aplicada es demasiado estricta. Por otra parte, la limitación de la CPU no sirve de nada cuando ésta tiene poca actividad.

En SUSE Linux, estas técnicas se controlan a través del daemon powersave. La configuración se describe en la Sección 33.5, “Paquete powersave”.

33.3.3. Herramientas de ACPI

ACPI cuenta con una serie de herramientas más o menos completas. Entre ellas se encuentran las herramientas puramente informativas que muestran el estado de la batería o la temperatura (acpi, klaptopdaemon, wmacpimon, etc.); las que facilitan el acceso a estructuras en /proc/acpi; las que ayudan a monitorizar cambios (akpi, acpiw o gtkacpiw) y, por último, las que permiten editar las tablas ACPI en el BIOS (paquete pmtools).

33.3.4. Solución de problemas

Se puede distinguir entre dos tipos de problemas. Por una parte, puede haber fallos en el código ACPI del núcleo que no se hayan detectado a tiempo. En este caso, se proporcionará una solución para que la descargue. Los otros problemas son los más frecuentes: los que están causados por el BIOS. En algunos casos, se integran a propósito en el BIOS desviaciones de las especificaciones de ACPI para evitar fallos en la implementación ACPI en otros sistemas operativos de uso extendido. Existen también componentes de hardware con fallos graves en la implementación ACPI, por lo que se han incluido en una "lista negra" para impedir que el núcleo de Linux utilice en ellos ACPI.

Si surgen problemas, en primer lugar se debe actualizar el BIOS. Si el equipo no arrancar en absoluto, pruebe a utilizar algunos de los siguientes parámetros de arranque:

pci=noacpi

No utilizar ACPI para configurar los dispositivos PCI.

acpi=oldboot

Ejecutar sólo una configuración de recursos simples. No utilizar ACPI para otros propósitos.

acpi=off

Inhabilita la ACPI.

[Warning]Problemas al arrancar sin ACPI

Algunos equipos nuevos, especialmente los sistemas SMP y AMD64, requieren ACPI para que el hardware se configure correctamente. Por lo tanto, el desactivar ACPI puede ocasionar problemas.

Monitorice los mensajes de arranque del sistema con el comando dmesg | grep -2i acpi después del arranque. También puede monitorizar todos los mensajes, ya que puede que el problema no esté causado por ACPI. Si ocurre un error durante el análisis de una tabla ACPI, la tabla más importante (que es DSDT) se puede sustituir por una versión mejorada. En estas circunstancias, se hace caso omiso de la tabla DSDT defectuosa del BIOS. El procedimiento se describe en la Sección 33.5.4, “Solución de problemas”.

En la configuración del núcleo existe un conmutador para activar los mensajes de depuración de ACPI. Si se ha compilado e instalado un núcleo con depuración ACPI, esta información detallada puede servir de ayuda a los técnicos que traten de identificar el error.

Si se producen problemas con el hardware o el BIOS, es aconsejable ponerse en contacto con los fabricantes. A menudo, los fabricantes no proporcionan asistencia si se trata de Linux, por lo que es importante que tomen conciencia de los distintos problemas. No se tomarán el asunto en serio hasta que se den cuenta de que un número importante de sus clientes utiliza Linux.

33.3.4.1. Información adicional

Puede obtener información adicional y material de ayuda sobre ACPI: