Comment optimiser la durée de vie de la batterie d’un ordinateur portable avec TLP sous Linux
Lors de l’utilisation de Linux sur des appareils mobiles tels que les ordinateurs portables, il est très important de régler les bons paramètres du noyau afin d’optimiser la durée de vie de la batterie. Tlp est un utilitaire de ligne de commande hautement personnalisable, gratuit et open source publié sous la licence GPLv2 (le code source est hébergé sur github) créé dans ce but précis. Dans ce tutoriel, nous voyons comment installer Tlp sur certaines des distributions Linux les plus utilisées, et comment le configurer.
Dans ce tutoriel, vous allez apprendre :
- Comment installer Tlp
- Comment configurer Tlp
- Comment vérifier l’état d’économie d’énergie à l’aide de tlp-stat
Configuration logicielle requise et conventions utilisées
Installation de Tlp
Tlp est disponible dans les dépôts des distributions Linux les plus utilisées, donc tout ce que nous avons à faire pour l’installer, c’est d’utiliser notre gestionnaire de paquets préféré. Le paquet de base que nous devons installer s’appelle tlp ; De plus, si nous avons l’intention d’utiliser l’Assistant Périphérique radio pour activer ou désactiver les interfaces radio lorsque certains événements se produisent, nous devons installer le package TLP-RDW.
Fedora est la distribution communautaire de la famille Red Hat et utilise le gestionnaire de paquets dnf pour installer ou supprimer des paquets logiciels. Pour installer Tlp, tout ce que nous avons à faire est de lancer la commande suivante :
sudo dnf install tlp tlp-rdwDebian est l’une des distributions Linux les plus répandues et les plus stables, et représente la base de nombreux dérivés tels que Ubuntu et Linux Mint. La façon « moderne » d’installer un logiciel sur cette distribution est d’utiliser l’enveloppe apt, qui fournit une interface utilisateur conviviale sur apt-get et d’autres commandes :
sudo apt install tlp tlp-rdwTlp est également disponible dans le dépôt « community » d’Archlinux. Pour installer le logiciel sur Arch, nous utilisons le gestionnaire de paquets pacman :
sudo pacman -Sy tlp tlp-rdwUne fois que Tlp est installé sur notre système, nous devons démarrer le service associé, et l’activer au démarrage (sur Fedora et Debian, le service doit être automatiquement démarré dans le cadre de l’installation). De nos jours, presque toutes les distributions utilisent Systemd comme gestionnaire d’initialisation, donc pour effectuer de telles tâches, nous pouvons utiliser la commande systemctl :
sudo systemctl enable --now tlp.serviceConfiguration de Tlp
Pour configurer Tlp et l’ajuster pour mieux répondre à nos besoins, nous avons essentiellement deux options :
- Modifiez le fichier
/etc/tlp.conf - Déposez les fichiers de configuration dans le répertoire
/etc/tlp.d
Quelle approche devrions-nous adopter ? Cela dépend. Si nous ouvrons le fichier de configuration principal de Tlp, /etc/tlp.conf, nous pouvons voir comment tout son contenu est commenté. Pour chaque option disponible, une brève description est fournie, y compris sa valeur par défaut et souvent la valeur suggérée. Pour modifier la valeur d’une option, nous devons supprimer le commentaire de la ligne appropriée et attribuer la valeur souhaitée à la variable correspondante. Cette approche est plus facile à adopter si nous modifions les paramètres manuellement.
Comme alternative, nous pouvons créer un ou plusieurs fichiers de paramètres contenant les options que nous voulons utiliser et leurs valeurs, et les déposer dans le répertoire /etc/tlp.d. Chacun de ces fichiers doit avoir l’extension « .conf » dans son nom. Cette approche peut être plus pratique, par exemple, si nous déployons tlp dans le cadre d’une installation automatisée effectuée avec Ansible ou Kickstart.
Comme nous l’avons déjà dit, les paramètres définis par Tlp sont très bien décrits dans le fichier de configuration principal, mais au cours de ce tutoriel, nous allons approfondir certains d’entre eux et voir sur quels sous-systèmes du noyau ils fonctionnent. Allons-y.
Mode ordinateur portable
L’une des premières options que nous rencontrons dans le fichier de configuration principal de Tlp sont DISK_IDLE_SECS et MAX_LOST_WORK_SECS. Une valeur peut leur être attribuée selon qu’ils fonctionnent sur un adaptateur secteur (ON_AC) ou sur batterie (ON_BAT). Ces options, sous le capot, utilisent une fonctionnalité du noyau Linux qui s’appelle le « mode ordinateur portable ». Lorsque le mode ordinateur portable est actif, ce qui change, c’est essentiellement la façon dont Linux gère les « données sales » : les données en mémoire qui doivent être écrites sur le disque.
La valeur que nous attribuons à DISK_IDLE_SECS_ON_AC ou DISK_IDLE_SECS_ON_BAT est écrite dans le fichier /sys/proc/vm/laptop_mode. Une valeur supérieure à 0 active le mode ordinateur portable et représente le nombre de secondes après l’inactivité du disque avant de tenter d’effectuer une synchronisation des données. La valeur par défaut utilisée par tlp, lorsque l’adaptateur d’alimentation est branché, est 0 ; Sur batterie, 2 est utilisé à la place.
L’autre option qui modifie le comportement du mode ordinateur portable est MAX_LOST_WORK_SECS. La valeur de cette option dans le fichier de paramètres Tlp est exprimée en secondes ; Sous le capot, la valeur est convertie en centisecondes (multipliée par 100) et écrite dans les fichiers système suivants :
- /proc/sys/vm/dirty_writeback_centisecs
- /proc/sys/vm/dirty_expire_centisecs
- /proc/sys/fs/xfs/age_buffer_centisecs
- /proc/sys/fs/xfs/xfssyncd_centisecs
Chacun de ces fichiers a un rôle différent. Le noyau utilise périodiquement des « threads de vidage » pour écrire les « anciennes » données sur le disque : la valeur écrite dans le fichier /proc/sys/vm/dirty_writeback_centisecs exprime l’intervalle entre ces vidages qui doivent s’exécuter. Quelles données doivent être considérées comme « anciennes » ? Ceci est établi par la valeur écrite dans le fichier /proc/sys/vm/dirty_expire_centisecs : les données qui ont été en mémoire pendant un intervalle de temps plus long que lui seront considérées comme « anciennes ».
Les fichiers /proc/sys/fs/xfs/age_buffer_centisecs et /proc/sys/fs/xfs/xfssyncd_centisecs, comme on peut le déduire de leurs noms, influencent le comportement du système de fichiers xfs. La valeur à l’intérieur de la première représente l’intervalle de temps après lequel la liste des tampons de métadonnées modifiées est analysée, et la valeur à l’intérieur de la seconde, établit l’intervalle de temps après lequel les métadonnées sont écrites sur le disque.
Définition du gouverneur de mise à l’échelle
Tlp peut être utilisé pour définir un gouverneur de mise à l’échelle du processeur en fonction de la source d’alimentation d’une machine. Un limiteur de mise à l’échelle définit et modifie la fréquence d’un processeur en fonction de certains facteurs. La façon dont la fréquence est modifiée dépend du régulateur utilisé. Les régulateurs de processeur disponibles peuvent être récupérés en interrogeant le fichier /sys/devices/system/cpu/<cpun>/cpufreq/scaling_available_governors, où <cpun> doit être remplacé par le numéro de processeur, par exemple :
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governorsLa commande ci-dessus devrait renvoyer quelque chose comme :
conservative ondemand userspace powersave performance schedutilPour définir le gouverneur de mise à l’échelle avec Tlp, nous devons utiliser le nom du gouverneur comme valeur des options CPU_SCALING_GOVERNOR_ON_AC et CPU_SCALING_GOVERNOR_ON_BAT. Sous le capot, Tlp écrira le choix souhaité dans les fichiers /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor.
Tlp permet également à l’utilisateur d’affiner facilement les fréquences maximales et minimales pour le gouverneur de mise à l’échelle sélectionné via les options CPU_SCALING_MAX_FREQ_ON_BAT CPU_SCALING_MIN_FREQ_ON_AC, CPU_SCALING_MAX_FREQ_ON_AC, CPU_SCALING_MIN_FREQ_ON_BAT et
>. Les valeurs fournies seront écrites dans les fichiers /sys/devices/system/cpu*/cpufreq/scaling_max_freq et /sys/devices/system/cpu*/cpufreq/scaling_min_freq.
Utilisation de l’économiseur d’énergie Intel HDA
Une autre stratégie utile pour réduire la consommation d’énergie lorsqu’il fonctionne sur batterie consiste à activer l’économie d’énergie pour les appareils Intel HDA (High Definition Audio). Tlp nous permet d’activer cette stratégie via les variables SOUND_POWER_SAVE_ON_AC et SOUND_POWER_SAVE_ON_BAT. La valeur 0 désactive la fonctionnalité, tandis qu’une valeur plus élevée l’active, et représente le nombre de secondes d’inactivité après lesquelles l’appareil doit être mis en mode d’économie d’énergie. Tlp écrit la valeur passée dans les fichiers /sys/module/snd_hda_intel/parameters/power_save et /sys/module/snd_ac97_codec/parameters/power_save. Cette fonctionnalité est activée par défaut sur la batterie et sur le climatiseur.
Le contrôleur audio est également désactivé en mode d’économie d’énergie. Ceci est contrôlé via l'option SOUND_POWER_SAVE_CONTROLLER, qui peut être réglée sur 'Y' ou 'N', pour activer et désactiver respectivement la fonctionnalité. Le fichier système qui contrôle ce paramètre est /sys/module/snd_hda_intel/parameters/power_save_controller.
Définition des seuils de batterie
Sur certaines machines, par exemple sur les Thinkpads, le firmware du système permet de définir les seuils de charge des batteries. Cette fonctionnalité est vraiment utile pour préserver l’autonomie de la batterie. Les batteries au lithium modernes peuvent perdre de leur capacité lorsqu’elles sont complètement déchargées ou maintenues en permanence à leur niveau de puissance maximum. En fixant des seuils de charge, nous pouvons ajuster le comportement de charge à nos besoins.
Si la machine est rarement utilisée sur batterie, par exemple, nous pouvons régler les seuils inférieur et supérieur à 40 et 50 respectivement, afin d’éviter les cycles complets de la batterie et la surchauffe. Si nous utilisons souvent la machine sur batterie, nous pouvons définir le seuil inférieur à 85 et le seuil maximum à 95, par exemple (les valeurs sont suggérées sur la page lenovo). Le système ne commencera à charger la batterie que si le pourcentage de charge est inférieur au seuil minimum, et s’arrêtera lorsque le seuil supérieur sera atteint. Tlp contrôle cette fonctionnalité via les variables START_CHARGE_THRESH_BAT0 et STOP_CHARGE_THRESH_BAT0. Si notre système a plus d’une batterie, nous pouvons ajouter un paramètre dédié en ajoutant les mêmes paramètres pour BAT1, etc. Les valeurs transmises sont écrites dans les fichiers /sys/class/power_supply/BAT0/charge_control_start_threshold et /sys/class/power_supply/BAT0/charge_control_end_threshold.
Désactivation des interfaces radio lors d’événements spécifiques
En utilisant Tlp, nous avons la possibilité d’activer ou de désactiver des interfaces radio spécifiques lorsque certains événements se produisent ; par exemple, nous pouvons déconnecter la ou les cartes wifi lorsque le système est connecté au LAN via Ethernet. Tlp contrôle cela via les options suivantes :
DEVICES_TO_DISABLE_ON_LAN_CONNECTDEVICES_TO_DISABLE_ON_WIFI_CONNECTDEVICES_TO_DISABLE_ON_WWAN_CONNECTDEVICES_TO_ENABLE_ON_LAN_DISCONNECTDEVICES_TO_ENABLE_ON_WIFI_DISCONNECTDEVICES_TO_ENABLE_ON_WWAN_DISCONNECTLes noms des variables sont assez explicites. Ils acceptent comme valeur une liste de types de périphériques séparés par des virgules, séparés par des espaces. Par exemple, pour désactiver tous les appareils wifi lorsque le système est connecté au LAN avec un câble, nous écririons :
DEVICES_TO_DISABLE_ON_LAN_CONNECT="wifi"Tlp nous permet également de désactiver les appareils lors d’autres événements, tels que la connexion ou la déconnexion de l’adaptateur secteur ou de la station d’accueil.
Vérification de l’état d’économie d’énergie à l’aide de tlp-stat
Pour vérifier l’état actuel d’économie d’énergie, nous pouvons utiliser un utilitaire fourni avec tlp : tlp-status. Cet utilitaire nous permet d’afficher diverses informations telles que la valeur des paramètres tlp, les configurations du noyau et les données de la batterie. Lorsqu’il est appelé sans aucune option, tlp-stat affiche toutes les informations disponibles :
sudo tlp-statVoici un extrait des données renvoyées (sortie tronquée) :
--- TLP 1.4.0 --------------------------------------------
+++ Configured Settings:
defaults.conf L0004: TLP_ENABLE="1"
defaults.conf L0005: TLP_WARN_LEVEL="3"
defaults.conf L0006: TLP_PERSISTENT_DEFAULT="0"
defaults.conf L0007: DISK_IDLE_SECS_ON_AC="0"
defaults.conf L0008: DISK_IDLE_SECS_ON_BAT="2"
defaults.conf L0009: MAX_LOST_WORK_SECS_ON_AC="15"
[...]
+++ System Info
System = ASUSTeK Computer Inc. 1.0 K52F
BIOS = K52F.218
OS Release = Fedora Linux 35 (Thirty Five)
Kernel = 5.15.18-200.fc35.x86_64 #1 SMP Sat Jan 29 13:54:17 UTC 2022 x86_64
[...]
+++ TLP Status
State = enabled
RDW state = not installed
Last run = 09:22:18 AM, 23834 sec(s) ago
Mode = AC
Power source = AC
[...]Les informations renvoyées peuvent être filtrées à l’aide des options appropriées. Pour afficher uniquement les données de la batterie, par exemple, nous exécuterions :
sudo tlp-stat --batteryDe la même manière, pour faire en sorte que seules les informations sur les périphériques USB soient affichées, nous pouvons utiliser l’option --usb. Pour l’ensemble des options qui peuvent être utilisées, veuillez jeter un coup d’œil à la page de manuel de l’utilitaire.
Conclusions
Dans ce tutoriel, nous avons vu comment installer et configurer Tlp sur certaines des distributions Linux les plus utilisées, et comment nous pouvons le configurer pour optimiser l’autonomie de la batterie sous Linux. Nous avons vu ce qu’est le fichier de configuration principal, certaines des directives qu’il contient, et comment les paramètres passés sont écrits dans les fichiers système, sous le capot. Tlp peut être utilisé pour effectuer une vaste gamme d’autres ajustements d’économie d’énergie : la meilleure façon de les connaître est de jeter un coup d’œil au fichier de configuration et de voir comment ils sont implémentés.
