Comment réduire sa consommation électrique avec GNU/Linux ? image/svg+xml Comment réduire sa consommation électrique avec GNU/Linux ?   Michael OpdenackerToulouse, 2023 Comment réduire sa consommationélectrique avec GNU/Linux ? Passionné de logiciels libresFondateur de la société BootlinIngénierie en systèmes embarquésUne forte présence à Toulouse ;-)Auteur de supports de formation libres(Linux embarqué, noyau Linux, réductiondu temps de démarrage...)Contributeur au Linux Ecology HOWTOdans les années 2000. Michael Opdenacker - Suite à la crise énergétique et à l'urgence écologique Besoin d'économiser l'énergie plutôt que d'en produire plus- GNU/Linux permet aussi d'utiliser son matériel plus longtemps Pourquoi cette présentation ? Avoir plus d'autonomie sur batterie,prolonger sa durée de vieSavoir faire hiberner son pingouinPartager nos meilleures pratiques Motivations plus techniques Matériel cible principal : ordinateurs portables sous GNU/LinuxAussi : ordinateurs de bureau, serveursAussi (un peu) : cartes électroniques embarquées Objet de cette présentation Mesurez votre consommationMise en veille, mise en hibernationGestion de l'écranGestion de la fréquenceIdentifier les programmes lesplus consommateurs Sujets abordés (1) Mesurez votre consommation Mettez votre pingouin au repos Suspend to Idle Signification de "mem" dans /sys/power/state Désactiver les périphériques non utilisésRécupérer la chaleur générée Sujets abordés (2) Licence Creative Commons - BY - SA - 4.0https://creativecommons.org/licenses/by-sa/4.0/       Raspberry Pi 3 Model B V1.2 Power HDMI Audio USB 2x USB 2x ETHERNET DSI (DISPLAY) CSI (CAMERA) GPIO © Raspberry Pi 2015 Des questions ?michael.opdenacker.org@bootlin.com Lien vers la présentation et ses sources :https://bootlin.com/pub/conferences/2023/cdl/ Présentation réalisée avec les logiciels libres Sozi et Inkscape Bootlin recrute stagiaires et ingénieurs https://bootlin.com/company/careers/ Procurez-vous un wattmètreNeuf : environ 20 EURPas génial pour la conso totale d'unPC (kW), mais bien pour la consoinstantannée (W)Vous servira pour les autres appareilsde votre domicile. Mettez votre système en veille Presque tout est éteint, sauf la RAMConsommation d'énergie négligeable pour le wattmètre. Sauf si vous êtes sur batterie.Facile à faire dès que vous laissez votre ordi.- Sur ligne de commande- Avec systemd Quand vous n'utilisez plus votre ordi.Linux peut prendre en charge 4 niveaux d'économie d'énergie :- "Suspend-To-Idle" (freeze) : mise veille des périphériques, le CPU arrête d'exécuter les processus ("idle").- "Standby / Power-On Suspend" (standby) : idem, avec certains processeurs éteints. Pas observé sur les systèmes que je possède- "Suspend-to-RAM" (mem) : mise en veille - tout éteint sauf la mémoire- "Suspend-to-disk" (disk) : hibernation sur disque - tout éteint et le contenu de la mémoire conservé sur disque.Voir ceux qui sont disponibles:$ cat /sys/power/statefreeze mem diskhttps://www.kernel.org/doc/Documentation/power/states.txt D'après la doc du noyau, le mode "Freeze" est toujours disponible et ne demande pasde prise en charge particulière du matériel, au moins au niveau du processeur.- Le processeur arrête d'exécuter les processus- Les périphériques sont mis en veille voire éteints (requiert des drivers qui savent les mettre en veille)- Le processeur n'a plus rien à faire et donc passe en mode inactif ("idle"), ce qui lui permet de couper l'alimentation de certains de ses circuits et économiser beaucoup d'énergie.- Suspend to Idle remplace le mode "veille" quand celui-ci n'est pas pris en charge sur votre matériel. Sinon, à part un temps de réveil un peu plus court (< 1s au lieu de 3-4s), ce mode n'a pas l'air d'avoir d'autre intérêt sur un PC mem dans /sys/power/state peut prendre des sens différents.Si le mode "veille" est disponible, deep apparaît dans /sys/power_memsleep:s2idle [deep]- Ici [deep] signifie que par défaut, mem correspond au mode "veille" (Suspend-to-RAM)- s2idle (Suspend-To-Idle, "freeze") est disponible mais n'est pas sélectionné.On peut changer temporairement le réglage par défaut:sudo sh -c "echo s2idle > /sys/power/power_memsleep"Ou de façon permanente en modifiant la ligne de commande du noyau, enrajoutant mem_sleep_default=s2idle à GRUB_CMDLINE_LINUX_DEFAULTdans /etc/default/grub. Exécuter ensuite sudo update-grub. Comment mettre votre système en veille ? Normalement facile sur toute distro graphiqueDepuis la ligne de commande (avec systemd):systemctl suspendou commande bas niveau (ne verrouille pas l'écran):sudo sh -c "echo mem > /sys/power/state" Comment réveiller votre système ? Toujours plus facile de s'endormir !Sur PC, réveiller en appuyant sur le bouton d'allumagedes fois, en bougeant une souris USBLes sources qui peuvent réveiller votre PC se trouvent dans/sys/class/wakeup/Plus de détails surhttps://wiki.archlinux.org/title/Power_management/Wakeup_triggersSur un serveur à distance, pas de solutionsimple pour sortir de veille. En résumé Mettez votre pingouin en veilleà chaque fois que vous le quittez.Passez en hibernation la nuit etpar une prise, coupez tous les périphériques,y compris la box Internet (si possible).En voyage, utilisez l'hibernation pour prolongerla durée de vie de votre batterie.Installez le service TLP pour désactiverles périphériques inutilisés et positionnerdes réglages économes en énergie.La fréquence du CPU s'adapte bien àl'activité de vos programmes. Attention à la consommation de vos écrans. Récupérez la chaleur produite Laissez travailler votre imagination !Mon levain adore ma Livebox(conso : 12 W) Ou bien... Mettre votre système en hibernation Veille ou hibernation ? L'état de votre système est sauvegardé sur disque,et puis votre machine est éteinte.Meilleur pour des extinctions plus longues, car aucune consoélectrique et pas d'usure de la batterie pour les portables.Hélas pas toujours disponible en standard sur les distributionsrécentes.Pas très compliqué à mettre en place cependant. Sur vieux portable Dell Latitude- Autonomie estimée de la batterie à 100% : 1h12- En veille: -6,9% (94 mAh) par heure- En hibernation: reste à 100% au bout d'une nuitSur portable récent Dell XPS- Autonomie estimée de la batterie à 100% : 8h30- En veille: -0,8% (58 mAh) par heure- En hibernation: reste à 100% au bout d'une nuitÉconomisez votre batterie en utilisant l'hibernation ! Principes de l'hibernation (1) L'hibernation se repose sur la mise en veillePour l'endormissement:1. On simule une mise en veille Sauvegarde en mémoire de l'état des périphériques2. On copie toute la RAM sur le disque Besoin d'une partition swap ou d'un fichier aussi gros que la RAM3. On éteint la machine. Principes de l'hibernation (2) Pour le réveil:1. On allume la machine, on démarre Linux2. On recopie en mémoire le contenu sauvegardé sur disque.3. On réveille la machine depuis la RAM comme si on sortait de veille. Comment mettre en place l'hibernation ? (1) Besoin de place sur disque pour stockerl'image de la mémoireLe plus simple : une partition swap au moinsaussi grande que la taille de la mémoireSinon, on peut stocker la mémoire dans unfichier, un peu plus compliqué :https://ubuntuhandbook.org/index.php/2021/08/enable-hibernate-ubuntu-21-10/ Comment mettre en place l'hibernation ? (2) 1. Trouver l'UUID de votre partition swap: cat /etc/fstab | grep UUID=2. Rajouter resume=UUID=xxxx à GRUB_CMDLINE_LINUX_DEFAULT dans /etc/default/grub3. Mettre à jour le fichier de configuration de Grub: sudo update-grubTesté sur Ubuntu 22.04 Comment déclencher l'hibernation ? Simplement avec Systemd(le plus complet : verrouillage de la session) :systemctl hibernateLa solution bas niveau (pas de verrouillage) :sudo sh -c "echo disk > /sys/power/state" Comment sortir d'hibernation ? Rallumer la machine, c'est tout !Sur un serveur à distance, possibilité d'utiliser le "Wake on LAN"1. Activer la fonctionnalité dans le BIOS2. Trouver l'adresse MAC de l'interface réseau de votre serveur ip a3. Passer cette adresse MAC à la commande wakeonlan :wakeonlan f8:ca:b8:17:44:02Sending magic packet to 255.255.255.255:9 with f8:ca:b8:17:44:02Facile pour une machine sur même réseau, mais pas à travers Internet. Rajouter une option "hiberner" (1) Testé sur Ubuntu 22.04Lancer le gestionnaire d'extensions de GNOME :extension-managerRechercher "Hibernate Status Button", installer et activercette extension. Rajouter une option "hiberner" (2) Testé sur Ubuntu 22.04Il faut aussi créer un fichier/etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla :[Re-enable hibernate by default in upower]Identity=unix-user:*Action=org.freedesktop.upower.hibernateResultActive=yes[Re-enable hibernate by default in logind]Identity=unix-user:*Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.handle-hibernate-key;org.freedesktop.login1;org.freedesktop.login1.hibernate-multiple-sessions;org.freedesktop.login1.hibernate-ignore-inhibitResultActive=yesSource :https://ubuntuhandbook.org/index.php/2021/08/enable-hibernate-ubuntu-21-10/ Attention à la consommation de vos écrans (1) ! Attention à la consommation de vos écrans (2) ! Utilisation de ddcutil Portable qui ne fait rien luminosité maximale:14,88WPortable qui ne fait rien luminosité minimale:10,04WPortable qui ne fait rien écran éteint:7,44WConclusion : un écran au max de luminositépeut représenter la moitié de votre consommationélectrique quand le PC ne fait rien ! Sur mon vieux moniteur LCD IIyama (2012)A luminosité maximale :45 W !A 50% de luminosité, suffisant, mais qui fait un petit bruit de vibration :-/30 WA luminosité minimale, suffisant la nuit, toujours ce petit bruit :15 W ddcutil is a Linux program for managing monitor settings,such as brightness, color levels, and input source. Generallyspeaking, any setting that can be changed by pressing buttonson the monitor can be modified by ddcutil.https://www.ddcutil.com/$ sudo ddcutil capabilities... Feature: D6 (Power mode) Values: 01: DPM: On, DPMS: Off 04: DPM: Off, DPMS: Off...Pour éteindre l'écran :$ sudo ddcutil setvcp D6 04Pour le rallumer :$ sudo ddcutil setvcp D6 01 Comment éteindre vos écrans ? Difficile de trouver des commandes universelles !Avec X, pour éteindre un écran en particulier :$ xrandr -q (identifier les écrans)$ xrandr --output DP-2-3 --off (éteindre)$ xrandr --output DP-2-3 --auto (rallumer)Ne marchait pas chez moi pour un seul écranAvec ddcutil, vous pouvez contrôler vos écrans externes,comme vous le feriez avec leurs boutons de contrôle.Sur mon portable, la touche F8 permet d'alterner entre les écrans allumés(tous ou un seul), sans avoir à passer par les menus de configuration. Jetrouve cependant plus simple de mettre la luminosité au minimum.Le plus simple pour éteindre ses écrans sans passer en veilleest sans doute de verrouiller son PC (Super - L)Mais mieux de passer en veille si votre PC ne fait rien ! Adaptez la performance de votre processeur Ubuntu offre en standard des optionspour contrôler la fréquencede votre processeur.Cela se base sur l'infrastructure"cpufreq" du noyau Linux. On peutmême mettre des réglages différentspour chaque coeur ! Extension GNOME CPU Power Manager (1) GNOME offre des optionsplus fines pour contrôler la consommationet la performance de votre processeur. Extension GNOME CPU Power Manager (2) Compilation du noyau Linux (configuration "defconfig" sur x86)- "Haute performance" : 14:37 min (mode actif: 35W, mode inactif : 10 W)- "Economie d'énergie" : 40:45 min (mode actif: 15,5 W (moyenne), mode inactif : 15 W)- "Multimedia" : 13:47 min (mode actif : 38W, mode inactif : 13W)- "Silencieux" : 36:20 min (mode actif : 17,8 W, mode inactif : 12W)=> Des résultats un peu surprenants, à refaire en les refaisant chacuncarte mère froide. Il semble que la gestion de l'énergie tienne compte de la température.Enseignements:- Le mode "Économie d'énergie" garantit une conso minimale. Bien sur batterie.- Le mode "Haute performance" ne fait pas toujours tourner votre processeur à fond. Il l'autorise juste. Tests (un peu bruts) de performance On peut utiliser l'outil manuellement et appliquer sesrecommandations :$ sudo powertop --auto-tuneMais c'est plus simple de les appliquer de façon permanente :$ sudo systemctl enable powertop$ sudo systemctl start powertop (ou redémarrer)Résultats sur vieux Dell Latitude branché,écran LCD au max de luminosité :consommation réduite de 15,12W à 12,55W PowerTop - Disponible sur Intel, AMD, ARMSe repose sur l'infrastructure "cpuidle" du noyau LinuxMesure ce qui consome le plus sur votre systèmeVous donne aussi des conseils pour améliorer les réglages.Besoin d'être root et de fonctionner sur batterie (plus d'infos):$ sudo powertopUne variante qui fait d'abord des tests sur votre machinepour des estimations plus fines de la consommation :$ sudo powertop --calibrate Qui consommera 30 fois moins ?Si c'est pour jouer un rôle de serveur ou decontrôleur d'affichage.Une exception à la règle de conservation du matériel PowerTop - Vue d'ensemble PowerTop - Réglages PowerTop - Intégration https://linrunner.de/tlp/Similaire à powertop --auto-tune, applique des réglages pourréduire la consommation- Activation automatique à l'installation (pas besoin de PowerTop) :$ sudo apt-install tlp (Ubuntu)- Deux profils: sur batterie et sur alimentation, activés automatiquement- Un profil sur batterie plus économique que sur alimentation- Possibilité de personnaliser les réglages si on le souhaite (contrairement à PowerTop), même si les réglages par défaut suffisent généralement.- Commande tlp-stat : plein d'infos très utiles sur la batterie, les disques... Résultats sur vieux Dell Latitude branché, écran LCD au max de luminosité :consommation réduite de 15,12W à 12,65W.Serait intéressant de faire un comparatif de durée de vie de la batterie. Encore mieux : TLP Remplacez votre vieux et gros PC par une carte embarquée Détecter les activités qui consomment de l'énergie Nouvelles options dans le menu "alimentation" Qu'est-ce que la veille hybride ?C'est à la fois une mise en veille et une mise en hibernation.- Si vous reprenez rapidement votre ordinateur, celui-ci se réveille instantanément- Si vous laissez plus longtemps votre ordinateur, la batterie finit par se vider, mais au rallumage, vous retrouvez son état d'origine grâce à l'hibernation.Une "super-veille" plus sécurisante, mais pas une alternative à l'hibernation,qui elle seule économise votre batterie. Pour des mesures plus précises Utilisation de la carte ACME de BaylibreCoût : environ 100 EUR (merci pour le don !)Matériel et logiciel libre pour une mesurefine des consommations électriquesParfait pour mesurer la consommationde cartes embarquées ou de petits circuits.J'ai ainsi pu mesurer la conso de maBeagleBone Black (ARM). Hélas,cette carte n'estpas facile à passer en veille.Il faudrait un micrologiciel spécial.https://baylibre.com/acme/https://bootlin.com/blog/power-measurement-with-acme/ D'après la doc du noyau, le mode "Freeze" est toujours disponible et ne demande pasde prise en charge particulière du matériel, au moins au niveau du processeur.- Le processeur arrête d'exécuter les processus- Les périphériques sont mis en veille voire éteints (requiert des drivers qui savent les mettre en veille)- Le processeur n'a plus rien à faire et donc passe en mode inactif ("idle"), ce qui lui permet de couper l'alimentation de certains de ses circuits et économiser beaucoup d'énergie.- Suspend to Idle remplace le mode "veille" quand celui-ci n'est pas pris en charge sur votre matériel. Sinon, à part un temps de réveil un peu plus court (< 1s au lieu de 3-4s), ce mode n'a pas l'air d'avoir d'autre intérêt sur un PC. Cela pourrait être intéressant pour un système embarqué qui essaierait de se mettre en économie d'énergie à chaque fois que possible. Pour forcer l'activation de ce mode:sudo sh -c "echo freeze > /sys/power/state"Pour réveiller votre système, même technique que pour la veille (prochaines diapos).
1
  1. Titre
  2. Michael Opdenacker
  3. Pourquoi ?
  4. Motivations techniques
  5. Objet de cette présentation