Website-Suche

So optimieren Sie die Akkulaufzeit von Laptops mit TLP unter Linux


Bei der Verwendung von Linux auf mobilen Geräten wie Laptops ist es sehr wichtig, die richtigen Kernel-Parameter abzustimmen, um die Akkulaufzeit zu optimieren. Tlp ist ein hochgradig anpassbares, kostenloses und Open-Source-Befehlszeilenprogramm, das unter der GPLv2-Lizenz veröffentlicht wurde (der Quellcode wird auf github gehostet), das genau zu diesem Zweck erstellt wurde. In diesem Tutorial sehen wir, wie man Tlp auf einigen der am häufigsten verwendeten Linux-Distributionen installiert und wie man es konfiguriert.

In diesem Tutorial lernen Sie:

  • So installieren Sie Tlp
  • So konfigurieren Sie Tlp
  • So überprüfen Sie den Energiesparstatus mit tlp-stat

Verwendete Softwareanforderungen und Konventionen

Installieren von Tlp

Tlp ist in den Repositories der am häufigsten verwendeten Linux-Distributionen verfügbar, daher müssen wir nur unseren bevorzugten Paketmanager verwenden, um es zu installieren. Das Basispaket, das wir installieren müssen, heißt tlp; Wenn wir beabsichtigen, den Funkgeräte-Assistenten zu verwenden, um Funkschnittstellen zu aktivieren oder zu deaktivieren, wenn bestimmte Ereignisse eintreten, müssen wir außerdem das tlp-rdw-Paket installieren.

Fedora ist die Community-Distribution der Red Hat-Familie und verwendet den dnf-Paketmanager, um Softwarepakete zu installieren oder zu entfernen. Um TLP zu installieren, müssen wir lediglich den folgenden Befehl starten:

sudo dnf install tlp tlp-rdw

Debian ist eine der am weitesten verbreiteten und stabilsten Linux-Distributionen und stellt die Basis für viele Derivate wie Ubuntu und Linux Mint dar. Die "moderne" Art, Software auf dieser Distribution zu installieren, ist die Verwendung des apt-Wrappers, der eine benutzerfreundliche Oberfläche über apt-get und andere Befehle bietet:

sudo apt install tlp tlp-rdw

Tlp ist auch im Archlinux "Community"-Repository verfügbar. Um die Software auf Arch zu installieren, verwenden wir den Paketmanager pacman:

sudo pacman -Sy tlp tlp-rdw

Sobald Tlp auf unserem System installiert ist, müssen wir den entsprechenden Dienst starten und ihn beim Booten aktivieren (unter Fedora und Debian sollte der Dienst automatisch als Teil der Installation gestartet werden). Heutzutage verwenden fast alle Distributionen Systemd als Init-Manager, daher können wir zur Ausführung solcher Aufgaben den Befehl systemctl verwenden:

sudo systemctl enable --now tlp.service

Konfigurieren von Tlp

Um Tlp zu konfigurieren und an unsere Bedürfnisse anzupassen, haben wir grundsätzlich zwei Möglichkeiten:

  1. Bearbeiten Sie die Datei /etc/tlp.conf
  2. Legen Sie die Konfigurationsdateien im Verzeichnis /etc/tlp.d ab.

Welchen Ansatz sollten wir wählen? Das kommt darauf an. Wenn wir die Hauptkonfigurationsdatei von Tlp, /etc/tlp.conf, öffnen, können wir sehen, wie der gesamte Inhalt kommentiert wird. Für jede verfügbare Option wird eine kurze Beschreibung bereitgestellt, einschließlich des Standardwerts und oft des vorgeschlagenen. Um den Wert einer Option zu ändern, müssen wir den Kommentar aus der entsprechenden Zeile entfernen und der entsprechenden Variablen den gewünschten Wert zuweisen. Dieser Ansatz ist einfacher zu übernehmen, wenn wir die Einstellungen manuell ändern.

Alternativ können wir eine oder mehrere Einstellungsdateien erstellen, die die Optionen, die wir verwenden möchten, und ihre Werte enthalten und sie im Verzeichnis /etc/tlp.d ablegen. Jede dieser Dateien sollte die Erweiterung ".conf" im Namen haben. Dieser Ansatz kann beispielsweise bequemer sein, wenn wir tlp als Teil einer automatisierten Installation bereitstellen, die mit Ansible oder Kickstart durchgeführt wird.

Wie wir bereits sagten, sind die von Tlp gesetzten Parameter in der Hauptkonfigurationsdatei sehr gut beschrieben. Im Laufe dieses Tutorials werden wir jedoch einige von ihnen weiter untersuchen und sehen, auf welchen Kernel-Subsystemen sie arbeiten. Auf geht es.

Laptop-Modus

Eine der ersten Optionen, die wir in der Tlp-Hauptkonfigurationsdatei treffen, sind DISK_IDLE_SECS und MAX_LOST_WORK_SECS. Ihnen kann ein Wert zugewiesen werden, je nachdem, ob sie mit einem Netzteil (ON_AC) oder mit Akku (ON_BAT) betrieben werden. Diese Optionen nutzen unter der Haube eine Funktion des Linux-Kernels, die als "Laptop-Modus" bezeichnet wird. Wenn der Laptop-Modus aktiv ist, ändert sich im Grunde die Art und Weise, wie Linux mit "schmutzigen Daten" umgeht: die Daten im Speicher, die auf die Festplatte geschrieben werden müssen.

Der Wert, den wir DISK_IDLE_SECS_ON_AC oder DISK_IDLE_SECS_ON_BAT zuweisen, wird in die Datei /sys/proc/vm/laptop_mode geschrieben. Ein Wert größer als 0 aktiviert den Laptop-Modus und stellt die Anzahl der Sekunden dar, nachdem der Datenträger in den Leerlauf versetzt wurde, bevor versucht wird, eine Datensynchronisierung durchzuführen. Der Standardwert, der von tlp verwendet wird, wenn das Netzteil angeschlossen ist, ist 0. Im Akkubetrieb wird stattdessen 2 verwendet.

Die andere Option, die das Verhalten des Laptop-Modus ändert, ist MAX_LOST_WORK_SECS. Der Wert für diese Option in der Tlp-Einstellungsdatei wird in Sekunden angegeben. Unter der Haube wird der Wert in Zentisekunden (multipliziert mit 100) umgerechnet und in die folgenden Systemdateien geschrieben:

  • /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

Jede dieser Dateien hat eine andere Rolle. Der Kernel verwendet periodisch "Flusher-Threads", um "alte" Daten auf die Festplatte zu schreiben: Der Wert, der in die Datei /proc/sys/vm/dirty_writeback_centisecs geschrieben wird, drückt das Intervall zwischen diesen Flushes aus, das ausgeführt werden soll.  Welche Daten müssen als "alt" gelten? Dies wird durch den Wert festgelegt, der in die Datei /proc/sys/vm/dirty_expire_centisecs geschrieben wird: Daten, die sich für ein längeres Intervall im Speicher befinden, werden als "alt" betrachtet.

Die Dateien /proc/sys/fs/xfs/age_buffer_centisecs und /proc/sys/fs/xfs/xfssyncd_centisecs beeinflussen, wie sie anhand ihrer Namen abgeleitet werden können, das Verhalten des xfs-Dateisystems. Der Wert in ersterem stellt das Zeitintervall dar, nach dem die Liste der modifizierten Metadatenpuffer gescannt wird, und der Wert innerhalb des letzteren legt das Zeitintervall fest, nach dem Metadaten auf die Festplatte geschrieben werden.

Festlegen des Skalierungsreglers

Tlp kann verwendet werden, um einen CPU-Skalierungsregler abhängig von der Stromquelle eines Computers festzulegen. Ein Skalierungsregler legt die Frequenz einer CPU fest und ändert sie in Abhängigkeit von bestimmten Faktoren. Wie die Frequenz geändert wird, hängt vom verwendeten Regler ab. Die verfügbaren CPU-Governors können durch Abfragen der Datei /sys/devices/system/cpu/<cpun>/cpufreq/scaling_available_governors abgerufen werden, wobei <cpun> durch die CPU-Nummer ersetzt werden muss, z. B.:

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors

Der obige Befehl sollte etwas wie folgt zurückgeben:

conservative ondemand userspace powersave performance schedutil

Um den Skalierungsregler mit Tlp festzulegen, müssen wir den Namen des Reglers als Wert für die Optionen CPU_SCALING_GOVERNOR_ON_AC und CPU_SCALING_GOVERNOR_ON_BAT verwenden. Unter der Haube schreibt Tlp die gewünschte Auswahl in die Dateien /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor.

Tlp ermöglicht es dem Benutzer auch, die maximalen und minimalen Frequenzen für den ausgewählten Skalierungsregler über die CPU_SCALING_MAX_FREQ_ON_BAT Optionen CPU_SCALING_MIN_FREQ_ON_AC, CPU_SCALING_MAX_FREQ_ON_AC, CPU_SCALING_MIN_FREQ_ON_BAT und
einfach fein abzustimmen. Die angegebenen Werte werden in die Dateien /sys/devices/system/cpu*/cpufreq/scaling_max_freq und /sys/devices/system/cpu*/cpufreq/scaling_min_freq geschrieben.

Verwenden des Intel HDA Powersave

Eine weitere nützliche Strategie zur Senkung des Stromverbrauchs im Akkubetrieb besteht darin, das Energiesparen für Intel HDA-Geräte (High Definition Audio) zu aktivieren. Tlp ermöglicht es uns, diese Strategie über die Variablen SOUND_POWER_SAVE_ON_AC und SOUND_POWER_SAVE_ON_BATzu aktivieren. Ein Wert von 0 deaktiviert die Funktion, während ein größerer Wert sie aktiviert und die Anzahl der Sekunden der Inaktivität darstellt, nach der das Gerät in den Energiesparmodus versetzt werden soll. Tlp schreibt den übergebenen Wert in die Dateien /sys/module/snd_hda_intel/parameters/power_save und /sys/module/snd_ac97_codec/parameters/power_save. Diese Funktion ist standardmäßig sowohl im Akku- als auch im Netzbetrieb aktiviert.

Der Audio-Controller ist auch im Energiesparmodus deaktiviert. Dies wird über die Option SOUND_POWER_SAVE_CONTROLLER gesteuert, die auf 'Y' oder 'N' gesetzt werden kann, um die Funktion zu aktivieren bzw. zu deaktivieren. Die Systemdatei, die diesen Parameter steuert, ist /sys/module/snd_hda_intel/parameters/power_save_controller.

Festlegen von Akku-Schwellenwerten

Auf bestimmten Geräten, z. B. auf Thinkpads, erlaubt die System-Firmware das Festlegen von Ladeschwellen für den Akku. Diese Funktion ist sehr nützlich, um die Akkulaufzeit zu verlängern. Moderne Lithiumbatterien verlieren möglicherweise an Kapazität, wenn sie vollständig entladen oder kontinuierlich auf ihrem maximalen Leistungsniveau gehalten werden. Durch das Festlegen von Ladeschwellen können wir das Ladeverhalten an unsere Bedürfnisse anpassen.

Wenn die Maschine beispielsweise nur selten im Batteriebetrieb betrieben wird, können wir die unteren und oberen Schwellenwerte auf 40 bzw. 50 einstellen, um vollständige Batteriezyklen und Überhitzung zu vermeiden. Wenn wir das Gerät häufig im Akkubetrieb verwenden, können wir stattdessen den unteren Schwellenwert auf 85 und den maximalen auf 95 einstellen (die Werte werden auf der Lenovo-Seite vorgeschlagen). Das System beginnt nur mit dem Laden des Akkus, wenn der Ladeprozentsatz unter dem Mindestschwellenwert liegt, und stoppt, wenn der obere Schwellenwert erreicht ist. Tlp steuert diese Funktion über die Variablen START_CHARGE_THRESH_BAT0 und STOP_CHARGE_THRESH_BAT0. Wenn unser System über mehr als eine Batterie verfügt, können wir eine dedizierte Einstellung hinzufügen, indem wir die gleichen Einstellungen für BAT1 usw. hinzufügen. Die übergebenen Werte werden in die Dateien /sys/class/power_supply/BAT0/charge_control_start_threshold und /sys/class/power_supply/BAT0/charge_control_end_threshold geschrieben.

Deaktivieren von Funkschnittstellen bei bestimmten Ereignissen

Durch die Verwendung von TLP haben wir die Möglichkeit, bestimmte Funkschnittstellen zu aktivieren oder zu deaktivieren, wenn bestimmte Ereignisse eintreten. Zum Beispiel können wir die WLAN-Karte(n) trennen, wenn das System über Ethernet mit dem LAN verbunden ist. Tlp steuert dies über die folgenden Optionen:

    DEVICES_TO_DISABLE_ON_LAN_CONNECT
    DEVICES_TO_DISABLE_ON_WIFI_CONNECT
    DEVICES_TO_DISABLE_ON_WWAN_CONNECT
    DEVICES_TO_ENABLE_ON_LAN_DISCONNECT
    DEVICES_TO_ENABLE_ON_WIFI_DISCONNECT
    DEVICES_TO_ENABLE_ON_WWAN_DISCONNECT

Die Namen der Variablen sind ziemlich selbsterklärend. Sie akzeptieren eine durch Kommas getrennte, durch Leerzeichen getrennte Liste von Gerätetypen als Wert. Um beispielsweise alle WLAN-Geräte zu deaktivieren, wenn das System über ein Kabel mit dem LAN verbunden ist, würden wir schreiben:

DEVICES_TO_DISABLE_ON_LAN_CONNECT="wifi"

Tlp ermöglicht es uns, Geräte auch bei anderen Ereignissen zu deaktivieren, z. B. beim Verbinden oder Trennen des Netzteils oder der Dockingstation.

Überprüfen des Energiesparstatus mit tlp-stat

Um den aktuellen Energiesparstatus zu überprüfen, können wir ein Dienstprogramm verwenden, das mit tlp geliefert wird: tlp-status. Mit diesem Dienstprogramm können wir verschiedene Informationen anzeigen, wie z. B. den Wert von TLP-Einstellungen, Kernel-Konfigurationen und Batteriedaten. Wenn tlp-stat ohne Option aufgerufen wird, gibt es alle verfügbaren Informationen aus:

sudo tlp-stat

Hier ist ein Auszug der zurückgegebenen Daten (Ausgabe gekürzt):

--- 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
[...]

Zurückgegebene Informationen können mit den entsprechenden Optionen gefiltert werden. Um beispielsweise nur Batteriedaten anzuzeigen, würden wir Folgendes ausführen:

sudo tlp-stat --battery

Auf die gleiche Weise können wir die Option --usb verwenden, um sicherzustellen, dass nur Informationen über USB-Geräte angezeigt werden. Für den vollständigen Satz der Optionen, die verwendet werden können, werfen Sie bitte einen Blick auf die Manpage des Dienstprogramms.

Schlüsse

In diesem Tutorial haben wir gesehen, wie Sie Tlp auf einigen der am häufigsten verwendeten Linux-Distributionen installieren und konfigurieren und wie wir es konfigurieren können, um die Akkulaufzeit unter Linux zu optimieren. Wir haben gesehen, was die Hauptkonfigurationsdatei ist, einige der darin enthaltenen Direktiven und wie die übergebenen Einstellungen in Systemdateien geschrieben werden, unter der Haube. Tlp kann verwendet werden, um eine Vielzahl anderer Energiesparoptimierungen durchzuführen: Der beste Weg, sie zu kennen, besteht darin, einen Blick in die Konfigurationsdatei zu werfen und zu sehen, wie sie implementiert sind.

Verwandte Artikel: