Optimiser la gestion d'énergie des portables centrino (pentium M) sous Linux (Debian en particulier)
Intro
Comme beaucoup le comprendront, je ne suis pas un spécialiste ingénieur en économie d'énergie, ni en Linux, je ne suis qu'un Linuxien autodidacte. J'ai passé du temps à optimiser la gestion de l'énergie de mon portable sous debian, beaucoup de sites m'ont aidé (cf. liens utiles), mais j'ai pensé qu'un tuto qui regroupe tout, en français, pourrait en aider plus un. De plus, le monde du libre m'apporte énormément, il est bon que j'apporte mon gravier à l'édifice. Je vous invite donc à apporter vos conseils constructifs et vos méthodes personnelles pour optimiser la gestion de l'énergie.
Plan utilisé
I)Présentation du « Centrino »
II)Configuration et optimisation pour Linux
A) le processeur
B) le disque dur
C) l'affichage
III) Les modes de mises en veille
IV) Compléments
V) Liens utiles
I) Présentation de l'appellation centrino
Qu'est-ce qu'un portable centrino?
Pour avoir droit à cette appellation, un portable doit être équipé de trois éléments indissociables fabriqués par Intel : un processeur Pentium M, un chipset particulier nommé i855 et une mini carte réseau sans fil normée Wi-Fi.
Le processeur Pentium M .
<débuts des citations de Paul Philipon-Dollet , Micro Hebdo>
[...]Avec ses 77 millions de transistors, contre 42 millions pour le Pentium 4, un Pentium M peut [ par exemple] se contente[r] d'une fréquence de 1,6 GHz, là où le P4 culmine à 2,8 GHz. Cela ne l'empêche pas d'être plus efficace. [...]
Le principe de base reste le même. Pour être traitées, les instructions envoyées par les logiciels au processeur (via la carte mère) sont divisées en calculs très simples. Le processeur les absorbe par lots, au rythme d'un lot par cycle de son horloge interne (deux milliards de cycles par seconde pour un processeur à 2 GHz).
[...]L'astuce du Pentium M consiste à savoir trier les calculs à effectuer en fonction de leur ressemblance, et à les diriger vers le circuit le mieux adapté. Les additions seront traitées ensemble, les divisions également, etc. Cette méthode est plus efficace que celle adoptée pour le Pentium 4, qui consistait à doubler, mais sans trier, la quantité d'opérations que le processeur prenait en charge à chaque cycle. Au risque d'aller trop vite pour les logiciels devant exploiter les résultats. Avec ce tri préalable, le Pentium M peut travailler « utile » , c'est-à-dire n'utiliser que les circuits logiques qui sont nécessaires, et toujours à leur pleine capacité. [...]
Économiser l'énergie
[...] nombre d'opérations simples effectuées par le processeur occasionnent des pertes inutiles d'énergie, parce que l'intensité de l'impulsion électrique envoyée au processeur est supérieure à l'intensité de celle qu'il restituera en sortie. Ces « fuites » peuvent multiplier par cinq la quantité d'électricité nécessaire à un calcul. Au total, et en comptant la capacité du processeur à mettre en sommeil les circuits logiques ou les segments de mémoire cache qu'il n'utilise pas, la consommation électrique moyenne d'un Pentium M arrive à descendre à 1 watt/heure, contre 2 watts/heure pour le Pentium 4 Mobile et 3 watts/heure pour le Pentium III-M.[...]
Et si cela ne suffit pas, le chipset i855 peut aussi réduire de près de 2 watts/heure la consommation générale du portable.
<fin des citations de Paul Philipon-Dollet , Micro Hebdo>
II) Configuration et optimisation pour Linux
A) le processeur
Le but est de vous rendre capable d'économiser au maximum l'énergie de votre portable lorsque vous le souhaitez, tout en garantissant les performances de votre portable.
Préalables:
Vous disposez :
- d'une distribution de linux installée (Debian, Gentoo, Ubuntu, Mandrake, Fedora, Suse),
- des sources du noyau 2.6, téléchargeables ici ftp://ftp.kernel.org/pub/linux/kernel/v2.6/ (prenez la dernière version : à l'heure où j'écris, c'est le fichier linux-2.6.11.5.tar.gz)
- des outils de recompilation du noyau
1 ère étape, activer l'ACPI
déplacez le fichier des sources du noyau vers /usr/src
Code :
- # cp linux-2.6.version.tar.gz /usr/src
|
décompressez-le et placez le lien symbolique des sources:
Code :
- # cd /usr/src/
- # tar xvzf linux-2.6.version.tar.gz
- # ln -sfn linux-2.6.version linux
- # cd linux/
|
configuration du noyau
Le but de ce tuto n'est pas vous apprendre à configuer TOUT votre noyau, mais seulement ce qui concerne la gestion de votre centrino.
Voici des liens qui vous expliqueront mieux que moi la manière de configurer tout le reste, c'est à dire tout ou presque sauf les rubriques « Processor type and features » et « Power management options (ACPI, APM) » :
http://lea-linux.org/kernel/kernel.html (assez complet)
http://people.via.ecp.fr/~alexis/f [...] noyau.html (bien simplifié)
Une fois que vous avez fini de configurer votre noyau pour le reste, voici les options à passer:
Processor type and features --->
Processor family
(X)Pentium M
Power management options (ACPI, APM)
[*] Power Management support │ │
│ │ [*] Power Management Debug Support │ │
│ │ [*] Software Suspend (EXPERIMENTAL)
[*] ACPI Support │ │
│ │ [*] Sleep States (EXPERIMENTAL) │ │
│ │ <M> AC Adapter │ │
│ │ <M> Battery │ │
│ │ <M> Button │ │
│ │ <M> Video │ │
│ │ <M> Fan │ │
│ │ <M> Processor │ │
│ │ <M> Thermal Zone │ │
│ │ [*] Debug Statements │ │
│ │ [*] Power Management Timer Support
CPU Frequency scaling --->
[*] CPU Frequency scaling │ │
│ │ [*] Enable CPUfreq debugging │ │
│ │ <*> /proc/cpufreq interface (deprecated)
Default CPUFreq governor (userspace) ---> │ │
│ │ <*> 'performance' governor │ │
│ │ <*> 'powersave' governor │ │
│ │ --- 'userspace' governor for userspace frequency scaling │ │
│ │ <*> 'ondemand' cpufreq policy governor │ │
│ │ <*> CPU frequency table helpers │ │
│ │ --- CPUFreq processor drivers │ │
│ │ <M> ACPI Processor P-States driver │ │
│ │ <M> Intel Enhanced SpeedStep │ │
│ │ [*] Use ACPI tables to decode valid frequency/voltage pairs │ │
│ │ [*] Built-in tables for Banias CPUs │ │
--- shared options │ │
│ │ [*] /proc/acpi/processor/../performance interface (deprecated) │ │
Device Drivers --->
I2C support --->
I2C Hardware Bus support <M>Intel PIIX4 |
Et voilà, c'est fini, on sauvegarde le tout et on quitte.
On lance la compilation du noyau, et on installe le nouveau noyau. (cf.: http://lea-linux.org/kernel/kernel.html)
Je suppose que vous avez maintenant redémmarrer en utilisant votre nouveau noyau.
Assurez-vous que le module speedstep-centrino a bien été chargé.
Pour cela, vérifiez que le répertoire /sys/devices/system/cpu/cpu0/cpufreq/ existe.
Pour être sûr qu'il soit systématiquement chargé, ajoutez le à votre liste de modules:
pour debian
Code :
- # nano /etc/modules
|
rajoutez à la fin la ligne suivante:
speedstep-centrino
sauvegardez et quittez.
Maintenant, il nous faut un petit démon nommé ACPID pour gérer au mieux les états du Pentium M en fonction des besoins de puissance.
installez-le en fonction de votre distribution. Exemple pour Debian:
Code :
- # apt-get install acpid
|
Il nous faut aussi cpudyn pour optimiser la gestion de votre processeur.
Code :
- # apt-get install cpudyn
|
Faites en sorte que cpudyn soit chargé dès le démarrage:
Code :
- cd /etc/rc3.d
- # ln -s ../init.d/cpudyn S99cpudyn
|
la commande
Code :
- cat /sys/devices/system/cpu/cpu0/cpufreq/
|
doit vous indiquer les possibilités de votre processeur.
cpuinfo_max_freq :
la fréquence maximale de votre CPU en kilohertz (non configurable)
cpuinfo_min_freq
la fréquence minimum de votre CPU en kilohertz (non configurable)
scaling_available_governors
-les différents modes de gouvernances disponibles pour cadencer votre CPU: « powersave » « userspace » « performance » (non configurable)
scaling_driver
-le nom du module pour votre CPU soit « centrino »
scaling_governor
- la gouvernance utilisée (configurable)soit « powersave », soit « userspace », soit « performance ».
Si vous choisissez « userspace » c'est vous qui passerez les commandes pour changer les fréquences de votre processeur. Sinon Cpudyn passera lui-même les commandes « powersave » ou « performance », commandent qui se bases sur les fréquences maximum et minimum définies par « scaling_max_freq » et « scaling_min_freq ».
scaling_min_freq
-fréquence minimale configurable
scaling_max_freq
-fréquence maximale configurable
|
Vous pouvez alors jongler avec les modes de consommation:
Pour utiliser la vitesse maximum
Code :
- # echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
|
Pour consommer le minimum d'énergie
Code :
- # echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
|
En mode userspace, vous pouvez régler vous-même la fréquence du CPU. Par exemple, pour la placer à 900 Mhz, vous lancez:
Code :
- # echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
- # echo 900000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
|
Pour lire facilement les infos sur votre processeur, je vous propose torsmo
Code :
- # apt-get install torsmo
- # torsmo
|
Vous pourrez lire ensuite sur le bureau les différentes informations sur votre CPU.
Cette partie est l'oeuvre d'un internaute au pseudo de « Minimalist » sur le forum de PC Inpact, que j'ai légèrement adapté pour ce tuto.
<citations de Minimalist>
B) Le disque dur
On ne s'en rend pas forcement compte dans une machine de bureau, mais sur un portable, un disque dur consomme, chauffe et fait du bruit. Au repos, c'est même le seul élément à émettre un son. L'idée est donc de l'éteindre quand on en a pas besoin (par exemple lorsqu'on regarde un DVD. C'est là que hdparm peut nous être utile.
hdparm
Tout d'abord, si ce n'est pas déjà fait, il faut installer ce petit programme (téléchargeable à l'adresse suivante : http://www.ibiblio.org/pub/Linux/system/hardware ). Vérifiez bien que vous ne le possédez pas déjà, car c'est un programme standard sur bon nombre de distributions. C'est par exemple hdparm qui active le mode Ultra DMA des disques compatibles (par la commande hdparm -d1 /dev/hda). Attention cependant, ce programme travaille à bas niveau et est donc dangereux. Ne faites pas n'importe quoi avec!
Pour éteindre le disque au bout d'une minute d'inactivité, utilisez la commande
Code :
- hdparm -q -S12 /dev/hda
|
-q (quiet mode) demande à hdparm de ne pas afficher ce qu'il fait. Pratique dans une séquence de boot, pour ne pas polluer l'écran.
-S xx éteint le disque au bout de xx * 5 secondes. Par exemple -S10 éteint le disque au bout de... 50s.
ATTENTION un disque est avant tout une pièce mécanique, d'une durée de vie assez limitée. Regardez bien la documentation de votre disque, pour voir le nombre de démarrages qu'il supporte en moyenne. Ce serait bête de perdre un disque dur pour gagner 30min d'autonomie...
laptop_mode
Ok, le disque a maintenant le droit de s'éteindre quand il est inutile. Le problème est que Linux ne se retient pas pour écrire ce qu'il veut pour autant. Pour que les logs et autres "garbages" ne perturbent pas la mise en veille, il existe un petit script, compatible avec les derniers kernels (2.6), nommé laptop_mode.
Il se trouve au milieu du fichier /usr/src/linux/Documentation/laptop-mode.txt, qui explique entre autre le fonctionnement de ce script. Copiez/collez, rendez le script executable par root :
Code :
- #cp /usr/src/linux/Documentation/laptop-mode.txt /etc/init.d/
- # mv laptop-mode.txt laptop_mode
- # chmod 755 laptop_mode
|
Lancez-le par la commande laptop_mode start si vous avez appelé votre script comme ça (pour l'arrêter, laptop_mode stop).
ATTENTION ce script force le système à écrire ses "données sales" toutes les 10 minutes. Si 10 minutes de votre travail sont trop précieuses pour être perdues en cas de panne de batterie (par exemple), n'utilisez pas ce script !
hddtemp
Pour finir avec les disques dur, voici un petit programme qui permet de lire la température fournie par les informations SMART de votre disque. La première chose à faire, si ce n'est pas fait, est donc d'activer le support SMART dans le BIOS.
Les sources sont récupérables ici : http://coredump.free.fr/linux/hddtemp.php (ainsi qu'un plug-in pour gkrellm, inutile maintenant). Compilez, installez.
Maintenant, root peut lire la température. Pour que tout le monde le puisse, 2 solutions sont là :
1 - Activer le Super-user bit :
Code :
- chmod +s /usr/sbin/hddtemp
|
(si hddtemp est bien là. Pour le savoir,
)
2 - Lancer hddtemp en mode serveur :
Code :
- hddtemp -d /dev/hda
|
dans un script de démarrage. Il ouvre alors le port 7634.
Des logiciels comme gkrellm (dans Intégré->Capteurs->Température) peuvent se connecter à ce serveur pour y lire la température. Vous aussi, grâce entre autre à netcat.
C) L'affichage
Bien que ce soit lui qui consomme le plus d'énergie, à part l'éteindre complètement, il n'est pas possible de faire grand chose d'autre. Règlez bien le contraste au minimum acceptable pour vous, afin de ne pas consommer trop pour rien.
La seule chose qui reste à faire est de permettre à l'écran de s'éteindre quand vous ne l'utilisez pas. C'est plus un pense-bête qu'autre chose, mais c'est toujours utile.
Les terminaux
L'économie d'énergie est dépendante de l'environnement que vous utilisez. Sous un terminal, utilisez les commandes
Code :
- setterm -powersave on
|
pour activer l'économie d'énergie
affiche un écran noir au bout de X minutes (ça consomme moins que d'afficher du blanc, ou des mouvements)
Code :
- setterm -powerdown Y
|
éteind l'écran au bout de Y minutes.
Sous X
Voilà ce qu'il faut activer/ajouter dans votre fichier de config X (XF86config ou xorg.conf suivant votre serveur)
Code :
- Section "ServerLayout"
- Identifier [...]
- [...]
- Option "BlankTime" "5" # Affiche un écran noir au bout de 5 minutes
- Option "StandbyTime" "10" # Eteint l'écran au bout de 10 minutes (avec DPMS)
- Option "SuspendTime" "20" # ?
- Option "OffTime" "30" # ?
- [...]
- EndSection
|
(je n'ai pas bien compris la différence entre les 2 dernières lignes, et celle d'avant. Sûrement des modes d'économie différents, avec des temps de reprises différents)
Code :
- Section "Monitor"
- Identifier [...]
- Option "DPMS" "true" # Active le mode DPMS. Obligatoire pour éteindre l'écran automatiquement.
- [...]
- EndSection
|
Avec tout ça, votre écran consommera un minimum quand vous serez absent ou occupé.
< fin des citations de Minimalist>
III) Les modes de mises en veille
IV) Compléments
V) Liens utiles
patience 
Message édité par Nelyot Tchagui le 26-03-2005 à 04:26:17