16.3. ACPI

ACPI (en anglais, Advanced Configuration and Power Interface) doit permettre au système d'exploitation d'organiser et de gérer les différents composants matériel individuellement. Ainsi ACPI remplace aussi bien le Plug and Play qu'APM. ACPI fournit aussi d'autres informations diverses sur la batterie, l'alimentation en énergie, la température et le ventilateur et renseigne sur les événements système, tels que par exemple « rabattre l'écran » ou « charge de la batterie faible ».

Le BIOS contient des tables dans lesquelles sont répertoriées des informations sur les différents composants et les méthodes d'accès au matériel. Ces informations sont par exemple utilisées par le système d'exploitation pour attribuer des interruptions ou mettre sous ou hors tension des composants, le cas échéant. Mais comme le système d'exploitation exécute des instructions qui se trouvent dans le BIOS, tout dépend là encore de l'implémentation du BIOS. Vous trouverez dans /var/log/boot.msg les messages d'amorçage. ACPI les utilise pour signaler les tables trouvées et qu'il a pu lire. Vous trouverez plus d'informations sur le dépannage des problèmes ACPI dans Section 16.3.4, « Problèmes possibles et solutions ».

16.3.1. ACPI en pratique

Lorsque le noyau reconnaît un BIOS ACPI lors de l'amorçage, ACPI est automatiquement activé et APM désactivé. Le paramètre d'amorçage acpi=on peut tout au plus être utile sur les vieilles machines. L'ordinateur doit prendre en charge ACPI 2.0 ou une version plus récente. Vous pouvez vérifier si ACPI a été activé dans les messages d'amorçage du noyau, dans /var/log/boot.msg.

Ensuite, un certain nombre de modules doit encore être chargé. Ceux-ci sont chargés par le script de démarrage du démon ACPI. Si l'un de ces modules rencontre un problème, vous pouvez l'exclure du chargement ou du déchargement dans /etc/sysconfig/powersave/common. Vous trouverez dans le journal du système (/var/log/messages) les messages du module et les composants qui ont été reconnus.

Vous pouvez trouver maintenant dans /proc/acpi un ensemble de fichiers qui vous informent au sujet de l'état du système ou que vous pouvez utiliser pour modifier de manière active certains états. Les fonctionnalités ne sont pas encore toutes totalement prises en charge dans la mesure où quelques unes sont encore en phase de développement et que la prise en charge de certaines dépend fortement de l'implémentation du fabricant.

Vous pouvez afficher tous les fichiers (à l'exception de dsdt et fadt) avec la commande cat. Pour certains d'entre eux, vous pouvez modifier quelques réglages en utilisant echo, par exemple, en indiquant avec echo X > fichier les valeurs appropriées pour X. Pour accéder à ces informations et possibilités de contrôle, utilisez toujours la commande powersave. Pour plus de détails, vous trouverez ci-après une description des fichiers les plus importants :

/proc/acpi/info

Informations générales à propos d'ACPI

/proc/acpi/alarm

Définissez ici quand le système doit reprendre après une période de sommeil. Cette fonctionnalité n'est actuellement pas encore totalement prise en charge.

/proc/acpi/sleep

Donne des informations sur les différents états de sommeil.

/proc/acpi/event

Tous les événements sont consignés ici. Ils sont traités par le démon Powersave (powersaved). Si aucun démon n'est en train d'y accéder, vous pouvez lire les événements avec cat /proc/acpi/event (pressez Ctrl-C pour terminer). Un effleurement sur l'interrupteur de mise sous tension ou l'écran rabattu sont de tels événements.

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

C'est ici que se trouvent les tables ACPI, DSDT (Differentiated System Description Table) et FADT (Fixed ACPI Description Table). Vous pouvez les lire avec les commandes acpidmp, acpidisasm et dmdecode. Vous trouverez ces programmes et la documentation correspondante dans le paquetage pmtools. Exemple : acpidmp DSDT | acpidisasm

/proc/acpi/ac_adapter/AC/state

Indique si l'ordinateur est raccordé à l'alimentation en énergie.

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

Informations détaillées sur l'état des batteries. Pour pouvoir consulter l'état de charge, vous devez comparer last full capacity dans info avec remaining capacity dans state. Vous pouvez effectuer la même opération plus confortablement avec des programmes spéciaux tels que présentés dans Section 16.3.3, « Outils ACPI ». Vous pouvez préciser dans alarm la capacité à partir de laquelle un événement de batterie doit être déclenché.

/proc/acpi/button

Ce répertoire contient des informations sur les différents interrupteurs.

/proc/acpi/fan/FAN/state

Indique si le ventilateur fonctionne correctement. Vous pouvez également le mettre sous ou hors tension en inscrivant 0 (activé) ou 3 (désactivé) dans ce fichier. Attention, car aussi bien le code ACPI dans le noyau que le matériel (ou le BIOS) écrasent ce réglage en cas de trop forte chauffe.

/proc/acpi/processor/CPU*/info

Informations concernant les possibilités d'économie d'énergie du processeur.

/proc/acpi/processor/CPU*/power

Informations relatives à l'état actuel du processeur. Un astérisque à côté de C2 signifie que le processeur est à vide ; c'est l'état le plus courant comme le laisse voir la valeur pour usage.

/proc/acpi/processor/CPU*/throttling

Vous pouvez ici configurer la réduction de la fréquence du processeur. Dans la plupart des cas, il est possible de procéder à huit niveaux de réduction. Ceci est indépendant de l'adaptation de la fréquence.

/proc/acpi/processor/CPU*/limit

Lorsque la performance (désuet) et l'étranglement (en anglais throttling) sont automatiquement réglés par un démon, indiquez ici les limites à ne pas dépasser. Il existe des limites définies par le système et certaines qui peuvent être réglées par l'utilisateur.

/proc/acpi/thermal_zone/

Un sous-répertoire est prévu ici pour chaque zone thermique. Une zone thermique est un domaine avec des propriétés thermiques semblables ; leur nombre et leur nom est choisi par le fabricant de matériel informatique. Les nombreuses possibilités proposées par ACPI sont cependant rarement implémentées. En revanche, la gestion de la température est effectuée de manière classique, directement par le BIOS, sans accorder le moindre droit à la parole au système d'exploitation car c'est tout simplement la durée de vie du matériel qui est ici en jeu. Les descriptions ci-après sont donc partiellement théoriques.

/proc/acpi/thermal_zone/*/temperature

La température actuelle de la zone thermique.

/proc/acpi/thermal_zone/*/state

L'état indique si tout est ok ou si ACPI assure un refroidissement actif ou passif. Pour les systèmes de ventilation indépendants d'ACPI, l'état est toujours ok.

/proc/acpi/thermal_zone/*/cooling_mode

Vous pouvez choisir ici la méthode de refroidissement contrôlée par ACPI ; passive (moins de performances mais économique) ou active (100 % de performance et 100 % du bruit du ventilateur).

/proc/acpi/thermal_zone/*/trip_points

Vous pouvez définir ici à partir de quelle température une mesure doit être entreprise. Les options possibles varient entre un refroidissement passif ou actif jusqu'à la mise en sommeil (hot) voire à la mise hors tension de l'ordinateur (critical). Les actions possibles sont définies, selon les appareils, dans la table DSDT. Les points de déclenchement définis dans les spécifications ACPI sont : critical, hot, passive, active1 et active2. Même s'ils ne sont pas tous implémentés, vous devez, lorsque vous écrivez dans le fichier trip_points, les saisir tous dans cet ordre. Ainsi une entrée comme echo 90:0:70:0:0 > trip_points correspond à une température de 90 pour critical et de 70 pour passive (toutes les températures sont mesurées en degrés Celsius).

/proc/acpi/thermal_zone/*/polling_frequency

Lorsque la valeur dans temperature n'est pas automatiquement mise à jour, dès que la température varie, il est possible ici de passer au mode d'interrogation (en anglais, polling mode). La commande echo X > /proc/acpi/thermal_zone/*/polling_frequency implique que la température est sondée toutes les X secondes. Utilisez X=0 pour désactiver l'interrogation.

Vous n'avez pas besoin de régler manuellement ces informations, configurations et événements. Pour cela, vous disposez du démon Powersave (powersaved) et de différentes applications telles que powersave, kpowersave et wmpowersave (voir Section 16.3.3, « Outils ACPI »). Étant donné que powersaved contient les fonctionnalités de l'ancien acpid, celui-ci n'est plus nécessaire.

16.3.2. Contrôle de la performance du processeur

Avec le processeur, il est possible d'économiser de l'énergie de trois façons différentes qui, selon le type d'utilisation de l'ordinateur peuvent être combinées suivant vos besoins. Économie d'énergie signifie également que le système chauffe moins et qu'il sollicite donc moins la ventilation.

Adaptation de la fréquence et de la tension

PowerNow! et Speedstep sont les noms donnés par les entreprises AMD et Intel pour cette technique qui existe aussi dans les processeurs d'autres fabricants. Ici, la fréquence du processeur et sa tension intrinsèque sont toutes deux diminuées. L'avantage réside dans une économie d'énergie plus que linéaire. C'est à dire que pour une fréquence (et donc une performance) diminuée de moitié, c'est nettement plus que la moitié de l'énergie qui est économisée. Cette technique fonctionne indépendamment de APM ou de ACPI et nécessite un démon qui régule la fréquence et les performances requises. Les paramètres peuvent être configurés dans le répertoire /sys/devices/system/cpu/cpu*/cpufreq/.

Réduction de la cadence d'horloge

Cette technique est connue sous le nom de throttling. Ici, un certain pourcentage des cycles d'horloge du processeur est supprimé. Un quart est supprimé pour un étranglement de 25%, et pour un étranglement de 87,5%, il n'y a plus qu'un huitième des cycles d'horloge. Cependant, l'économie d'énergie n'est pas tout à fait linéaire. On utilise le throttling uniquement lorsqu'il n'y a pas de régulation de la fréquence ou pour une économie maximale. Cette technique doit également être contrôlée par un processus propre. L'interface du système est /proc/acpi/processor/*/throttling.

Mise en sommeil du processeur

Le processeur est toujours mis en sommeil par le système d'exploitation lorsqu'il n'y a rien à faire. Dans ce cas, le système d'exploitation envoie au processeur l'instruction halt prévue à cet effet. Il existe différents niveaux : C1, C2 et C3. Dans l'état C3, le plus économique, même le processus de comparaison de la mémoire cache du processeur avec la mémoire principale est arrêté ; cet état ne peut donc être pris que lorsqu'aucun périphérique ne modifie le contenu de la mémoire principale par activité de bus maître. Certains pilotes empêchent ainsi l'utilisation de C3. L'état courant est affiché dans /proc/acpi/processor/*/power.

L'adaptation de la fréquence comme la réduction de la cadence d'horloge ne sont intéressants que lorsque le processeur a quelque chose à faire car dans le cas contraire, ce sont les états C, plus économiques qui sont favorisés. Cependant, lorsque le processeur est occupé, la régulation de la fréquence est la meilleur méthode d'économie d'énergie. Souvent, le processeur n'est que partiellement occupé. Une fréquence réduite lui suffit alors pour fonctionner. En général, l'adaptation dynamique de la fréquence à l'aide d'un démon, tel que powersaved, est la meilleure solution. Lorsque l'ordinateur fonctionne sur batterie ou lorsqu'il doit ne doit pas chauffer, c'est à dire être silencieux, la spécification d'une fréquence basse définie statiquement peut être préférable.

Le throttling ne devrait être utilisé qu'en dernière extrémité lorsque l'on souhaite, par exemple, augmenter la durée de vie des batteries malgré le fonctionnement du système. Cependant, certains systèmes ne fonctionnent plus correctement lorsque l'étranglement est trop important. La suppression de cycles d'horloge n'est d'aucun intérêt lorsque le processeur n'a que peu à faire.

Le démon powersave contrôle aussi ces technologies sous SUSE LINUX. La configuration nécessaire à cette fin est décrite dans Section 16.5, « Le paquetage powersave ».

16.3.3. Outils ACPI

Il existe un grand nombre d'outils ACPI plus ou moins volumineux, notamment des outils d'informations purs, qui indiquent l'état de la batterie, la température, etc. (acpi, klaptopdaemon, wmacpimon, etc.). D'autres facilitent l'accès aux structures sous /proc/acpi ou aident à observer les modifications (akpi, acpiw, gtkacpiw). De plus, il existe aussi des outils pour le traitement des tables ACPI dans le BIOS (paquetage pmtools).

16.3.4. Problèmes possibles et solutions

Il existe deux groupes de problèmes différents. D'une part, il peut naturellement y avoir des erreurs dans le code ACPI du noyau qui n'ont pas encore été relevées. D'autre part, il peut toutefois y avoir une solution à télécharger. Les problèmes au niveau du BIOS de l'ordinateur sont malheureusement moins agréables et aussi plus fréquents. Il arrive malheureusement que des écarts aient été insérés par rapport aux spécifications ACPI du BIOS pour contourner des erreurs de l'implémentation ACPI dans d'autres systèmes d'exploitation très développés. Il existe aussi du matériel connu pour ses erreurs graves dans l'implémentation ACPI et qui est donc répertorié dans une liste noire afin de ne pas utiliser dessus ACPI pour le noyau Linux.

En cas de problème, la première chose à faire est la mise à jour du BIOS. Si l'ordinateur n'amorce pas du tout, l'un des paramètres d'amorçage suivants peut se révéler utile :

pci=noacpi

Ne pas utiliser ACPI pour la configuration des appareils PCI.

acpi=oldboot

Ne procéder qu'aux configurations de ressources simples, sinon, ne pas utiliser ACPI.

acpi=off

Nésactiver ACPI.

[Warning]Problèmes lors de l'amorçage sans ACPI

Certains ordinateurs de la nouvelle génération, notamment les systèmes SMP et AMD64, ont besoin d'ACPI pour configurer correctement le matériel. Si l'on désactive ACPI, cela peut engendrer des problèmes.

Surveillez bien les messages du système lors de l'amorçage. Utilisez pour cela la commande dmesg | grep -2i acpi après l'amorçage (ou alors on affiche tous les messages, car ACPI n'est pas nécessairement responsable du problème). En cas d'erreur lors de l'analyse d'une table ACPI, vous avez la possibilité, du moins pour la table la plus importante, la table DSDT, de créer une table corrigée dans un noyau individuel. La DSDT erronée du BIOS est par la suite ignorée. La procédure à suivre est détaillé dans Section 16.5.4, « Problèmes possibles et solutions ».

Vous disposez, lors de la configuration du noyau, d'un interrupteur pour activer les messages de débogage d'ACPI. Lors de la compilation et de l'installation d'un noyau avec débogage ACPI, cela peut fournir des informations détaillées aux experts à la recherche d'erreurs.

En cas de problèmes relatifs au BIOS ou au matériel, il est toujours judicieux de s'adresser au fabricant de l'appareil. Même quand ces derniers ne sont pas toujours d'un grand secours lorsqu'il s'agit d'un système fonctionnant sous Linux, il est important de les informer d'éventuels problèmes. Ce n'est que lorsque les fabricants auront remarqué que suffisamment de leurs clients optent pour Linux qu'ils prendront le problème au sérieux.

16.3.4.1. Informations complémentaires

Vous trouverez plus de documentation et d'aide relatives à ACPI dans :


SUSE LINUX Guide de l'administrateur 9.2