Gestion de l'ACPI sous GNU/Linux

Projet de veille technologique : la norme ACPI

Architecture de /proc/acpi

Lorsque le système d'exploitation démarre et que le noyau détecte un BIOS compatible ACPI, ACPI est alors activé (et APM [1] est désactivé). Les vieilles machines nécessitent parfois le paramètre acpi=on (voire acpi=force ou acpi=off) pour forcer l'activation (ou la désactivation d'ACPI). On peut vérifier la bonne activation de l'ACPI via les logs de démarrages (voir /var/log/dmesg ). Dans ce cas, il y a un répertoire /proc/acpi qui est créé. Nous allons nous intéresser de plus près à ce répertoire.

[1] Advanced Power Management, un système d'économie d'énergie sur les ordinateurs portables, gérant la mise en veille

Tous les fichiers de ce répertoire peuvent être lus (avec cat par exemple), à l'exception des tables dsdt et fadt (voir article de blog précédent). Certains fichiers peuvent être modifiés directement : par exemple echo X /proc/acpi/<fichier>. En effet, les fichiers placés dans /proc ne sont pas des vrais fichiers au sens où ce sont directement des interfaces de communication avec le noyau. Voici une brève description de ces fichiers.

/proc/acpi/info

Informations générales sur l'ACPI.

/proc/acpi/sleep

Fournit des informations sur les états de sommeil du système.

/proc/acpi/button

Ce répertoire contient toutes les informations sur les différents interrupteurs de l'ordinateur (démarrage, wifi, son, ...).

/proc/acpi/processor/CPU*/info

Informations sur les possibilités d'économies d'énergie du processeur.

/proc/acpi/processor/CPU*/power

Informations sur l'état courant du processeur. Une astérisque à côté de l'état C2 signifie que le processeur est occupé. C'est l'état le plus fréquent.

/proc/acpi/processor/CPU*/throttling

Permet d'activer le bridage du processeur. Cette interface n'est plus utilisée.

/proc/acpi/processor/CPU*/limit

Si les performances et le bridage sont automatiquement contrôlés par un démon, les limites maximum sont spécifiées dans ce fichier. Certaines limites sont définies par le système, d'autres peuvent être modifiées par l'utilisateur. Est aujourd'hui souvent remplacé par /etc/sysconfig/powersave.

/proc/acpi/thermal_zone/

Un sous-répertoire existe pour chaque zone thermique. La plupart des possibilités ne sont pas exploitées par l'ACPI et c'est souvent le BIOS qui fournit ces informations. Le système d'exploitation n'a pas souvent l'occasion d'intervenir sur ces fichiers.

/proc/acpi/thermal_zone/*/temperature

Température actuelle de la zone de température.

/proc/acpi/thermal_zone/*/state

Cet état indique si tout est "ok" ou si ACPI effectue un refroidissement "active" ou "passive". Dans le cas où l'ACPI est indépendant de l'état du ventilateur (lorsque celui-ci est contrôlé par le BIOS), cet état sera forcément à OK.

/proc/acpi/thermal_zone/*/cooling_mode

Active le refroidissement passif (moins bonnes performances, plus économique) ou le refroidissement actif (performances au maximum, ventilateur au maximum et en continu).

/proc/acpi/thermal_zone/*/trip_points

Mise en place des limites pour les températures dont dépendront l'activation de certains modes de refroidissement (actif ou passif). Sont aussi précisées les états de supsension si la température est trop importante ("hot") et un état pour l'arrêt immédiat ("critical").

/proc/acpi/thermal_zone/*/polling_frequency

Si la température n'est pas mise à jour automatiquement lorsqu'elle change, la fréquence de vérification est alors définie ici.

Vers une nouvelle architecture

La publication du dernier noyau Linux (le 09 décembre 2010) [2] change toute l'arborescence du répertoire /proc/acpi et le considère comme obsolète. La plupart des entrées deviennent obsolètes et sont remplacées par leur équivalent Sysfs.

Voici une liste non exhaustive de ces changements :

  • /proc/acpi/sleep devient /sys/power/state
  • /proc/acpi/info devient /sys/module/acpi/parameters/acpica_version
  • /proc/acpi/dsdt devient /sys/firmware/acpi/tables/DSDT
  • /proc/acpi/fadt devient /sys/firmware/acpi/tables/FACP
[2] http://www.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.36.2

Exploiter les informations contenues dans /proc/acpi

Les informations fournies par ACPI étant fournies dans des fichiers texte, il est facile d'y accéder dans des scripts. C'est utile par exemple pour générer des alertes quand une température est trop élevée. Quand on n'utilise pas un environnement de bureau « clés en main » (openbox, awesome, fluxbox, …), il est aussi nécessaire de mettre soi-même en place certains mécanismes comme la mise en veille à la fermeture de l'écran d'un ordinateur portable, ou applet affichant la charge de la batterie.

Par exemple pour avoir l'état de la batterie, on peut consulter

/proc/acpi/BAT0/state

pour avoir accès au mode de fonctionnement (chargée / en charge / endécharge), à la vitesse de charge / décharge) et à l'énergie restante (enmAh). Pour passer à un pourcentage de charge, il faut consulter

/proc/acpi/BAT0/info

qui contient la capacité totale de la batterie, ses caractérisquesmatérielles, etc.

grep "remaining capacity" /proc/acpi/battery/BAT0/state |\
cut -d":" -f2|\
sed -e "s/[^0-9.]//g" # Remove spaces and units
grep "last full capacity" /proc/acpi/battery/BAT0/info|\
cut -d":" -f2 |\
sed -e "s/[^0-9.]//g" # Remove spaces and units

De même, pour la température du processeur

grep "temperature" /proc/acpi/thermal_zone/THRM/temperaturecut -d":" -f2 |\
sed -e "s/[^0-9.]//g" # Remove spaces and units

Les identifiants BAT0, THRM, et tous les autres sont évidemment à adaptersuivant le système.

La deuxième partie est la gestion des événements ACPI. Sous GNU/Linux, on peututiliser acpid pour appeler des scripts lorsqu'un événement précis se produit.

Par exemple, dans

/etc/acpi/events/lidbtn

les lignes

event=button[ /]
lidaction=/etc/acpi/lid.sh

permettent de passer les événements liés à l'état du couvercle d'un ordinateurportable au script lid.sh qui effectuera les opérations nécessaires.

Ainsi, il est possible de configurer la gestion énergétique de son ordinateurassez simplement et UNIX-ement (outils simples, flux de texte, etc).

Sources :

Clément Delafargue / Benjamin Vialle

Comments