33.3. ACPI

La gestion ACPI (advanced configuration and power interface, interface d'alimentation et de configuration avancée) donne au système d'exploitation la possibilité de configurer et de contrôler les composants matériels. Elle remplace PnP et APM. Elle fournit des informations sur la batterie, l'adaptateur secteur, la température, le ventilateur et les événements systèmes tels que « la fermeture du couvercle » ou « le niveau de la batterie ».

Le BIOS fournit, dans des tables, des informations sur les différents composants et les modes d'accès au matériel. Le système d'exploitation utilise ces informations, entre autres, pour affecter les interruptions ou activer et désactiver les composants. Le système d'exploitation exécutant des commandes stockées dans le BIOS, les fonctions disponibles dépendent du BIOS. Le système ACPI peut détecter et charger les tables répertoriées dans /var/log/boot.msg. Reportez-vous à la Section 33.3.4, « Dépannage » pour plus d'informations sur le dépannage des problèmes ACPI.

33.3.1. ACPI en action

Si le kernel détecte un BIOS ACPI au démarrage du système, ACPI est automatiquement activé et APM désactivé. Sur les machines plus anciennes, le paramètre de démarrage acpi=force peut être nécessaire. L'ordinateur doit prendre en charge ACPI 2.0 ou une version ultérieure. Pour savoir si ACPI a été activé, reportez-vous aux messages de démarrage du kernel dans var/log/boot.msg.

Un certain nombre de modules doit ensuite être chargé par le script de démarrage acpid. Si l'un de ces modules provoque des problèmes, il est possible d'exclure son chargement/déchargement dans /etc/sysconfig/powersave/common. Le journal système (/var/log/messages) stocke les messages des modules. Il permet donc d'identifier les modules détectés.

Le répertoire /proc/acpi contient plusieurs fichiers qui fournissent des informations sur l'état du système ou qui permettent de modifier certains états. Certaines fonctions dont le développement n'est pas achevé sont toujours indisponibles ou inefficaces ; en outre, la prise en charge des différentes fonctions dépend fortement du BIOS mis en oeuvre par le fabricant.

Tous les fichiers, excepté dsdt et fadt, sont lisibles dans cat. Dans certains fichiers, les réglages peuvent être modifiés avec la commande echo. Par exemple, la commande echo X > file permet de spécifier des valeurs appropriées pour X. Il est possible d'accéder facilement à ces valeurs par la commande powersave qui sert de frontal pour le démon Powersave. Les fichiers les plus importants sont décrits ci-dessous.

/proc/acpi/info

Informations générales sur la gestion ACPI.

/proc/acpi/alarm

Spécifie les circonstances dans lesquelles le système doit quitter un état de veille (cette fonctionnalité n'est actuellement pas prise en charge).

/proc/acpi/sleep

Informations sur les états de veille possibles.

/proc/acpi/event

Répertorie tous les événements. Ces événements sont traités par le démon Powersave (powersaved). Si aucun démon n'accède à ce fichier, les événements tels qu'un appui bref sur le bouton d'alimentation ou la fermeture du couvercle peuvent être lus via cat /proc/acpi/event (arrêté via Ctrl-C).

/proc/acpi/dsdt et /proc/acpi/fadt

Ces fichiers contiennent les tables ACPI DSDT (differentiated system description table) et FADT (fixed ACPI description table). Ils peuvent être lus à l'aide des programmes acpidmp, acpidisasm et dmdecode, disponibles, avec leur documentation, dans le paquetage pmtools. Par exemple, acpidmp DSDT | acpidisasm.

/proc/acpi/ac_adapter/AC/state

Indique si l'adaptateur secteur est connecté.

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

Informations détaillées sur l'état de la batterie. Pour connaître le niveau de charge, comparez la dernière capacité complète indiquée dans info à la capacité restante figurant dans state. Il est plus facile de connaître le niveau de charge en utilisant les programmes spéciaux présentés à la Section 33.3.3, « Outils ACPI ». Le niveau de charge qui déclenche un événement de batterie (comme avertissement, bas et critique) peut être spécifié dans alarm.

/proc/acpi/button

Ce répertoire contient des informations sur divers commutateurs, tels que le capot et les boutons du portable.

/proc/acpi/fan/FAN/state

Indique si le ventilateur est actif. Vous pouvez activer ou désactiver manuellement le ventilateur en écrivant 0 (on) ou 3 (off) dans ce fichier. Toutefois, le code ACPI du kernel et le matériel (ou le BIOS) ignorent ce paramètre si la température du système dépasse un certain niveau.

/proc/acpi/processor/*

Un sous-répertoire séparé est utilisé pour chaque unité centrale de votre système.

/proc/acpi/processor/*/info

Informations sur les options d'économie d'énergie du processeur.

/proc/acpi/processor/*/power

Informations sur l'état actuel du processeur. Un astérisque en regard de C2 indique que le processeur est inactif. Il s'agit de l'état le plus fréquent, comme l'indique la valeur usage.

/proc/acpi/processor/*/throttling

Permet de définir la limitation de l'horloge du processeur. D'ordinaire, huit niveaux de limitation sont proposés. La limitation est indépendante du contrôle de la fréquence.

/proc/acpi/processor/*/limit

Si les performances (obsolète) et la limitation de l'utilisation du processeur sont contrôlées automatiquement par un démon, ce fichier permet de définir les limites maximum. Certaines de ces limites sont déterminées par le système, d'autres peuvent être ajustées par l'utilisateur.

/proc/acpi/thermal_zone/

Ce dossier comporte un sous-répertoire pour chaque zone thermique. Une zone thermique est une zone qui présente des propriétés thermiques uniformes ; les noms et les numéros des zones thermiques sont fixés par le fabricant du matériel. La gestion ACPI offre de nombreuses possibilités de gestion de la température, dont beaucoup sont rarement mises en oeuvre. La température est contrôlée de manière conventionnelle par le BIOS. Le système d'exploitation intervient peu, la durée de vie du matériel étant en jeu. Certains fichiers n'ont donc qu'une valeur théorique.

/proc/acpi/thermal_zone/*/temperature

Température actuelle de la zone thermique.

/proc/acpi/thermal_zone/*/state

Indique si tout est ok ou si ACPI applique un refroidissement actif ou passif. Lorsque le contrôle des ventilateurs est assuré par des fonctions indépendantes de la gestion ACPI, l'état est toujours ok.

/proc/acpi/thermal_zone/*/cooling_mode

Sélectionnez le refroidissement contrôlé par ACPI : refroidissement passif (moins performant, mais plus économique) ou actif (plus performant, mais générant un bruit de ventilateur plus important).

/proc/acpi/thermal_zone/*/trip_points

Permet la détermination des limites de température qui déclenchent des actions spécifiques, comme le refroidissement passif ou actif, l'interruption (hot) ou l'arrêt (critical). Les actions possibles sont définies dans la table DSDT (dépendant du périphérique). La norme ACPI définit les points de déclenchement critical, hot, passive, active1 et active2 ; même si ces points ne sont pas tous mis en oeuvre, ils doivent tous être entrés dans ce fichier dans cet ordre. Ainsi, l'entrée echo 90:0:70:0:0 > trip_points règle le point de déclenchement critical à 90 et le point de déclenchement passive à 70 (toutes les températures étant mesurées en degrés Celsius).

/proc/acpi/thermal_zone/*/polling_frequency

Permet de modifier le mode d'interrogation si la valeur temperature n'est pas automatiquement mise à jour lorsque la température change. La commande echo X > /proc/acpi/thermal_zone/*/polling_frequency impose une lecture de la température toutes les X secondes. Pour désactiver l'interrogation, définissez X=0.

En principe, il est inutile d'éditer manuellement aucun de ces paramètres, informations et événements. Le démon Powersave (powersaved) et d'autres interfaces, comme powersave, kpowersave et wmpowersave, peuvent effectuer les modifications nécessaires. Reportez-vous à la Section 33.3.3, « Outils ACPI ».

33.3.2. Contrôle des performances de l'unité centrale

Trois méthodes différentes permettent d'économiser l'énergie au niveau de l'unité centrale. Selon le mode d'exploitation de l'ordinateur, ces méthodes peuvent être combinées. Le fait d'économiser l'énergie signifie que le système chauffe moins et que les ventilateurs sont moins souvent activés.

Contrôle de la fréquence et de la tension

Les technologies AMD et Intel de contrôle de la fréquence et de la tension sont appelées, respectivement, PowerNow! et Speedstep, mais elles ne sont pas les seules du marché : des technologies équivalentes sont appliquées par les processeurs d'autres fabricants. La fréquence d'horloge de l'unité centrale et sa tension principale sont réduites simultanément, ce qui permet des économies d'énergie plus que li­néaires. Ainsi, lorsque la fréquence et les performances sont réduites de moitié, la consommation d'énergie est réduite de plus de 50 %. Cette technologie est indépendante de la gestion APM ou ACPI. Il existe deux approches principales pour effectuer le contrôle de la fréquence de l'unité centrale : par le kernel lui-même ou par une application de l'espace utilisateur. Différents régulateurs de kernel peuvent donc être définis ci-dessous /sys/devices/system/cpu/cpu*/cpufreq/

régulateur de l'espace utilisateur

Si le régulateur de l'espace utilisateur est réglé, le kernel attribue le contrôle de la fréquence de l'unité centrale à une application de l'espace utilisateur, généralement un démon. Dans les distributions SUSE Linux, ce démon est le paquetage powersaved. Lorsque cette implémentation est utilisée, la fréquence de l'unité centrale est réglée en fonction de la charge courante du système. Par défaut, l'une des implémentations du kernel est utilisée. Cependant, sur certains matériels ou en fonction des processeurs ou pilotes, l'implémentation de l'espace utilisateur reste la seule solution de travail.

régulateur à la demande

Il s'agit de l'implémentation de kernel d'une stratégie de fréquence de l'unité centrale dynamique qui doit fonctionner sur la plupart des systèmes. En cas de charge élevée du système, la fréquence de l'unité centrale augmente immédiatement. En cas de charge basse du système, cette fréquence baisse.

régulateur prudent

Ce régulateur est similaire à l'implémentation à la demande, sauf qu'une stratégie plus prudente est utilisée. Il est nécessaire que la charge du système reste élevée pendant un certain temps avant que la fréquence de l'unité centrale n'augmente.

régulateur powersave

La fréquence de l'unité centrale est statistiquement réglée sur la plus petite unité.

régulateur de performance

La fréquence de l'unité centrale est statistiquement réglée sur la plus grande unité.

Limitation de la fréquence d'horloge

Cette technologie supprime un certain pourcentage des signaux d'horloge pour l'unité centrale. Avec une limitation est de 25 %, une impulsion sur quatre est omise. À 87,5 %, seule une impulsion sur huit atteint le processeur. Les économies d'énergie ne sont toutefois pas tout à fait linéaires. La limitation de la fréquence d'horloge n'est normalement utilisée que si le contrôle de la fréquence est indisponible ou si l'on veut optimiser les économies d'énergie. Elle doit être contrôlée par un processus spécial. L'interface système est /proc/acpi/processor/*/throttling.

Mise en veille du processeur

Lorsqu'il n'y a rien à faire, le système d'exploitation envoie au processeur une commande halt, qui le met en veille. Trois états sont possibles : C1, C2 et C3. Dans l'état le plus économe, C3, même la synchronisation du cache du processeur avec la mémoire principale est arrêtée. Cet état ne peut donc être appliqué que si aucun autre périphérique ne modifie le contenu de la mémoire principale via le bus principal. Certains pilotes empêchent l'utilisation de C3. L'état en cours est affiché dans /proc/acpi/processor/*/power.

La limitation de l'utilisation du processeur et le contrôle de la fréquence ne sont utiles que si le processeur est occupé. En effet, le mode C le plus économique est toujours appliqué lorsque le processeur est inactif. Si l'unité centrale est occupée, il est recommandé de recourir au contrôle de la fréquence pour économiser l'énergie : le processeur ne fonctionnant souvent qu'avec une charge partielle, il peut être utilisé avec une fréquence plus basse. La meilleure approche reste souvent le contrôle dynamique de la fréquence par le régulateur à la demande du kernel ou un démon comme powersaved. Un réglage statique sur une fréquence basse est utile lorsque l'ordinateur fonctionne sur la batterie, ou si vous voulez qu'il refroidisse ou qu'il ne fasse pas de bruit.

Ne limitez l'utilisation du processeur qu'en dernier ressort (par exemple, pour allonger la durée de fonctionnement de la batterie en cas de charge élevée du système). Certains systèmes ne fonctionnent pas de manière optimale lorsqu'ils sont trop limités. En outre, la limitation de l'unité centrale ne sert à rien si celle-ci est peu sollicitée.

Sous SUSE Linux, ces technologies sont contrôlées par le démon powersave, dont la configuration est décrite à la Section 33.5, « Paquetage powersave ».

33.3.3. Outils ACPI

Il existe un grand nombre d'outils ACPI plus ou moins complets : certains permettent seulement d'afficher des informations, comme le niveau de charge de la batterie ou la température (acpi, klaptopdaemon, wmacpimon, etc.) ; d'autres facilitent l'accès aux structures dans /proc/acpi ou facilitent la surveillance des modifications (akpi, acpiw, gtkacpiw) ; d'autres, enfin, permettent de modifier les tables ACPI dans le BIOS (paquetage pmtools).

33.3.4. Dépannage

Il existe deux types de problèmes. Le code ACPI du kernel peut comporter des bogues qui n'ont pas été détectés à temps. Un correctif pourra alors être téléchargé. Toutefois, la plupart des problèmes viennent du BIOS. Des écarts par rapport à la norme ACPI sont parfois volontairement intégrés au BIOS pour éviter des erreurs lors de la mise en oeuvre d'ACPI sur d'autres systèmes d'exploitation communément utilisés. Les composants matériels qui comportent des erreurs sérieuses de mise en oeuvre ACPI sont répertoriés dans une liste noire qui empêche le kernel Linux d'utiliser ACPI pour ces composants.

Lorsqu'un problème survient, commencez par mettre le BIOS à jour. Si l'ordinateur ne démarre toujours pas, utilisez l'un des paramètres de démarrage suivants :

pci=noacpi

Ne pas utiliser ACPI pour configurer les périphériques PCI.

acpi=oldboot

Effectuer uniquement une configuration simple des ressources. N'utiliser ACPI pour aucune autre tâche.

acpi=off

Désactiver ACPI.

[Warning]problèmes de démarrage sans ACPI

Certaines machines récentes (en particulier les systèmes SMP ou AMD64) ont besoin de la gestion ACPI pour configurer le matériel. Sur ces machines, la désactivation du système ACPI peut entraîner des problèmes.

Après le démarrage du système, lisez les messages de démarrage avec la commande dmesg | grep -2i acpi (ou tous les messages, ACPI n'étant pas forcément la cause du problème). Si une erreur survient pendant l'analyse d'une table ACPI, vous pouvez remplacer la table la plus importante (DSDT) par une version améliorée. La table DSDT à l'origine de l'erreur sera alors ignorée. La procédure à suivre est décrite à la Section 33.5.4, « Dépannage ».

La configuration du kernel comprend un paramètre qui permet d'activer les messages de débogage ACPI. Si un kernel avec débogage ACPI est compilé et installé, les experts qui recherchent des erreurs recevront des informations détaillées.

En cas de problèmes de matériel ou de BIOS, il est conseillé de contacter les fabricants. Même s'ils ne proposent pas d'assistance Linux, ils doivent être informés des problèmes. En effet, ils ne prendront ces problèmes au sérieux que s'ils réalisent qu'un certain nombre de leurs clients utilisent Linux.

33.3.4.1. Pour plus d'informations

Documentation complémentaire et aide sur ACPI :