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”.
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/infoInformación general sobre ACPI
/proc/acpi/alarmAquí puede definirse cuándo el sistema despierta de un estado de sueño. El soporte actual de esta función es insuficiente.
/proc/acpi/sleepProporciona 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/stateMuestra 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/buttonEste 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*/infoInformació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*/throttlingAquí 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*/limitSi 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/*/temperatureLa 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_modeAquí 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.
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.
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/.
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.
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”.
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).
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:
No utilizar ACPI para configurar los dispositivos PCI.
Ejecutar sólo recursos simples de configuración, en caso contrario no utilizar ACPI.
No utilizar ACPI en absoluto.
![]() | 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.
Puede obtener información adicional y material de ayuda sobre ACPI (en inglés) en:
http://www.cpqlinux.com/acpi-howto.html (HOWTO para ACPI, incluye parches para la tabla DSDT)
http://www.intel.com/technology/iapc/acpi/faq.htm (preguntas de uso frecuente sobre ACPI de @Intel)
http://acpi.sourceforge.net/ (el proyecto ACPI4Linux en Sourceforge)
http://www.poupinou.org/acpi/ (parches DSDT de Bruno Ducrot)