16.3. ACPI

ACPI significa Advanced Configuration and Power Interface. La función de ACPI es permitir al sistema operativo configurar y controlar cada componente de hardware por separado. De este modo, ACPI sustituye tanto a “plug and play” como a APM. Asimismo, ACPI proporciona diversos datos sobre la batería, interfaz de red, temperatura y ventilador e informa de acontecimientos en el sistema como “Cerrar la cubierta” o “Baterías poco cargadas”.

La BIOS dispone de tablas donde se recoge información sobre cada componente y sobre los métodos para acceder al hardware. El sistema operativo utiliza esta información, por ejemplo, para asignar interrupts o para activar y desactivar componentes de hardware. No obstante, debido a que el sistema operativo sigue las instrucciones almacenadas en la BIOS, aquí también se está supeditado a la implementación de la BIOS. Los mensajes producidos durante el arranque se almacenan en /var/log/boot.msg. Allí, ACPI informa de qué tablas ha encontrado y evaluado con éxito. Para obtener más información sobre la resolución de problemas en ACPI consulte la Sección 16.3.4, “Posibles problemas y sus soluciones”.

16.3.1. ACPI en la práctica

Cuando el kernel reconoce una BIOS ACPI durante el arranque, ACPI es activado automáticamente y APM desactivado. El parámetro de arranque acpi=on podría ser necesario, como máximo, en máquinas antiguas. No obstante, el ordenador tiene que soportar ACPI 2.0 o superior. Para comprobar si ACPI está activado, consulte los mensajes de arranque del kernel en /var/log/boot.msg.

A continuación es necesario cargar una serie de módulos, de lo que se ocupa el script de inicio del daemon ACPI. 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 del módulo y puede observarse qué componentes han sido detectados.

En /proc/acpi aparecen ahora varios archivos que informan sobre el estado del sistema o permiten modificar algunos de estos estados. No todas las funciones se soportan completamente ya que algunas se encuentran todavía en desarrollo y el soporte de otras depende en gran medida de la implementación del fabricante.

cat muestra todos los archivos (excepto dsdt y fadt). En algunos se puede incluso modificar opciones pasando a X valores adecuados con echo, por ejemplo echo X > <archivo>. Para acceder a esta información y a las posibilidades de control se recomienda utilizar siempre el comando powersave. No obstante, para lograr una mejor comprensión de ACPI a continuación se describen los archivos más importantes:

/proc/acpi/info

Información general sobre ACPI

/proc/acpi/alarm

Aquí puede definirse cuándo el sistema despierta de un estado de sueño. El soporte actual de esta función es insuficiente.

/proc/acpi/sleep

Proporciona información sobre los posibles estados de sueño.

/proc/acpi/event

Aquí se registran los eventos del sistema. Estos son procesados por el daemon de Powersave (powersaved). Si no interviene ningún daemon, los eventos de pueden leer con cat /proc/acpi/event (salir con Ctrl + C). Un ejemplo de evento es pulsar el interruptor principal o cerrar el portátil.

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

Aquí se almacenan las tablas ACPI DSDT (Differentiated System Description Table) y FADT (Fixed ACPI Description Table). Estas 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 el adaptador de red está conectado.

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

Contienen abundante información sobre el nivel de la batería. Para comprobar el nivel de carga es necesario comparar last full capacity de info con remaining capacity de state. Aunque esto también puede hacerse más fácilmente con la ayuda de programas especiales como los descritos en la Sección 16.3.3, “Herramientas ACPI”. En alarm se puede introducir qué nivel de carga provocará un evento en la batería.

/proc/acpi/button

Este directorio contiene información sobre diversos interruptores.

/proc/acpi/fan/FAN/state

Muestra si el ventilador está funcionando en ese momento. También puede encenderse o apagarse manualmente escribiendo en el archivo 0 (=encender) ó 3 (=apagar). No obstante, hay que tener en cuenta que tanto el código ACPI del kernel como el hardware (o la BIOS) sobreescriben estos valores cuando la temperatura es demasiado elevada.

/proc/acpi/processor/CPU*/info

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

/proc/acpi/processor/CPU*/power

Información sobre el estado actual del procesador. Un asterisco en C2 significa inactividad y es el estado más frecuente, como puede apreciarse en el número usage.

/proc/acpi/processor/CPU*/throttling

Aquí se puede configurar la suspensión del reloj de la CPU. Normalmente es posible reducirlo en ocho fases. Esta opción es independiente del control de frecuencia de la CPU.

/proc/acpi/processor/CPU*/limit

Si un daemon se encarga de regular automáticamente el rendimiento (obsoleto) y el throttling, aquí se pueden definir los límites que no se deben sobrepasar en ningún caso. Existen algunos límites que fija el sistema y otros que fija el usuario.

/proc/acpi/thermal_zone/

Aquí se encuentra un subdirectorio para cada zona térmica. Una zona térmica es una sección con características térmicas semejantes, cuyo número y nombre de fabricante de hardware puede ser seleccionado. Muchas de las posibilidades ofrecidas por ACPI se implementan rara vez. En su lugar, la BIOS se ocupa normalmente de controlar la temperatura sin que el sistema operativo intervenga, ya que aquí se trata nada menos que de la duración del hardware. Por lo tanto, algunas de las descripciones ofrecidas a continuación tienen un valor puramente teórico.

/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 activa o pasiva. En los casos donde el control del ventilador no depende de ACPI, el estado es siempre ok.

/proc/acpi/thermal_zone/*/cooling_mode

Aquí se puede seleccionar el método de refrigeración controlado por ACPI: pasivo (menor rendimiento, económico) o activo (máximo rendimiento, ruidoso a causa del ventilador).

/proc/acpi/thermal_zone/*/trip_points

Aquí se puede definir la temperatura a partir de la cual se emprende alguna acción. Esta acción puede abarcar desde la refrigeración activa o pasiva hasta apagar el ordenador (critical), pasando por suspend (hot). Las acciones posibles se encuentran definidas en DSDT en función del dispositivo. Los trip points definidos en la especificación ACPI son: critical, hot, passive, active1 y active2. Aunque no siempre estén implementados todos, han de introducirse en este orden cuando se escriba en el archivo trip_points. Por ejemplo, la entrada echo 90:0:70:0:0 > trip_points asigna a la temperatura un valor critical de 90 y un valor passive de 70 grados centígrados.

/proc/acpi/thermal_zone/*/polling_frequency

Si el valor de temperature no se actualiza automáticamente cuando se modifica la temperatura, se puede cambiar aquí al modo polling. El comando echo X > /proc/acpi/thermal_zone/*/polling_frequency hace que cada X segundos se pregunte la temperatura. El modo polling se desconecta con X=0.

Los datos, opciones de configuración y eventos mencionados en las líneas superiores no tienen que editarse manualmente. Para ello cuenta con el daemon de Powersave (powersaved) y con diversos programas como powersave, kpowersave y wmpowersave (vea la Sección 16.3.3, “Herramientas ACPI”). Puesto que las prestaciones del antiguo acpid se han incluido en powersaved, acpid ha quedado obsoleto.

16.3.2. Control de la potencia del procesador

Existen tres métodos de ahorro de energía para el procesador que pueden combinarse en función del modo de operación del ordenador. El ahorro de energía también significa que el sistema se calienta menos y por tanto el ventilador debe activarse con menor frecuencia.

Ajuste de la frecuencia y el voltaje

PowerNow! y Speedstep son los nombres dados por las empresas AMD e Intel a esta técnica que también existe en procesadores de otros fabricantes. Este método consiste en reducir conjuntamente el reloj de la CPU y su voltaje central. La ventaja es un ahorro de energía superior al lineal. Esto significa que con la mitad de la frecuencia (es decir, la mitad de la potencia) se requiere mucho menos de la mitad de energía. Esta técnica funciona independientemente de APM o ACPI y requiere un daemon que ajuste la frecuencia a los requisitos de potencia actuales. La configuración puede realizarse en el directorio /sys/devices/system/cpu/cpu*/cpufreq/.

Suspensión del reloj de CPU

Este método se conoce como throttling (“estrangulamiento”) y consiste en omitir un porcentaje determinado del impulso de la señal de reloj para la CPU. Con una reducción del 25% se omite uno de cada cuatro impulsos mientras que con una reducción del 87,5%, solamente uno de cada ocho impulsos llega al procesador. No obstante, el ahorro de energía es algo menor que el lineal. La técnica de throttling se utiliza solamente cuando no existe el ajuste de la frecuencia o para lograr el máximo ahorro. Esta técnica también requiere un proceso propio que la controle. La interfaz del sistema es /proc/acpi/processor/*/throttling.

Inactividad del procesador

El sistema operativo pone al procesador en un estado de sueño o inactividad cuando no hay nada que hacer. En este caso, el sistema operativo envía al procesador la instrucción halt. Existen distintos niveles: C1, C2 y C3. En el estado de máximo ahorro de energía, C3, se detiene incluso la sincronización de la caché del procesador con la caché de 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 bus master. Por este motivo, algunos controladores no permiten el uso de C3. El estado actual se muestra en /proc/acpi/processor/*/power.

La reducción de frecuencia y la supresión de señales son relevantes cuando el procesador está activo, ya que si no está realizando acción ninguna se utilizan preferentemente los estados C.

Si la CPU está ocupada, la reducción de la frecuencia es el mejor método para ahorrar energía. Con mucha frecuencia el procesador no trabaja al máximo de su capacidad y basta con bajar su frecuencia. En la mayoría de los casos, el método más adecuado consiste en un ajuste dinámico de la frecuencia por medio de un daemon (por ejemplo powersaved). Cuando el ordenador funciona con baterías o debe mantener una baja temperatura y hacer poco ruido, se recomienda asignar de forma permanente una frecuencia baja.

El throttling debería utilizarse como último recurso. Por ejemplo, cuando queremos prolongar lo más posible el tiempo de vida de las baterías con el procesador trabajando al máximo de su capacidad. No obstante, algunos sistemas ya no funcionan correctamente si el nivel de throttling es demasiado elevado. La supresión de la señal de reloj de la CPU no sirve de nada cuando la carga de trabajo del procesador es baja.

En SUSE LINUX, estas técnicas se controlan a través del daemon de Powersave. La configuración necesaria se describe en la Sección 16.5, “El paquete powersave”.

16.3.3. Herramientas ACPI

Existe una serie de herramientas ACPI más o menos completas. Entre ellas se encuentran herramientas puramente informativas que muestran el nivel de la batería o la temperatura (acpi, klaptopdaemon, wmacpimon, etc.). Otras facilitan el acceso a las estructuras bajo /proc/acpi o ayudan a observar cambios (akpi, kacpi, gtkacpiw), y otras permiten editar las tablas ACPI en la BIOS (paquete pmtools).

16.3.4. Posibles problemas y sus soluciones

Se puede distinguir entre dos tipos de problemas. Por una parte, puede haber fallos en el código ACPI del kernel que no se han detectado a tiempo. En este caso se proporcionará una solución para descargar. Otros problemas más incómodos y, por desgracia, también más frecuentes, son los problemas en la BIOS del ordenador. Se da incluso el caso de que se integran en la BIOS desviaciones de las especificaciones ACPI para evitar fallos en la implementación ACPI en otros sistemas operativos de uso extendido. Existe también hardware en el que se conocen fallos graves en la implementación ACPI. Por este motivo, estos componentes de hardware se incluyen en una lista negra para que el kernel de Linux no utilice en ellos ACPI.

En caso de problemas, en primer lugar se debe actualizar la BIOS. Si el ordenador ni siquiera arranca correctamente, 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 recursos simples de configuración, en caso contrario no utilizar ACPI.

acpi=off

No utilizar ACPI en absoluto.

[Warning]Problemas al arrancar sin ACPI

Algunos ordenadores de última generación, especialmente los sistemas SMP y AMD64M, requieren ACPI para que el hardware se configure correctamente. Por lo tanto, el desactivar ACPI puede ocasionar problemas.

Examine los mensajes de arranque cuidadosamente. Utilice para ello el comando dmesg | grep -2i acpi después del arranque (o incluso examinar todos los mensajes, ya que el problema no debe radicar necesariamente en ACPI). Si ocurre un error durante el análisis sintáctico de una tabla ACPI, existe la posibilidad (al menos para la tabla más importante, DSDT) de pasar una versión mejorada al sistema. De esta forma la tabla DSDT incorrecta de la BIOS será ignorada. El proceso correspondiente se describe en la Sección 16.5.4, “Posibles problemas y sus soluciones”.

En la configuración del kernel existe un botón para activar los mensajes de depuración de ACPI. Si se ha compilado e instalado un kernel con depuración ACPI, puede ayudar con información detallada a los expertos que busquen un posible fallo.

En cualquier caso, siempre resulta una buena idea ponerse en contacto con el fabricante del aparato si ocurriesen problemas con el hardware o la BIOS. Precisamente porque los fabricantes no siempre ayudan cuando se trata de Linux, es importante que tomen conciencia de los posibles problemas. No tomarán a Linux en serio hasta que no se den cuenta de que un número importante de sus clientes lo utilizan. Aunque no tenga ningún problema, tampoco está de más que informe al fabricante de hardware de que lo usa con Linux.

16.3.4.1. Información adicional

Puede obtener información adicional y material de ayuda sobre ACPI (en inglés) en:


SUSE LINUX Manual de administración 9.3