Linux上でTLPを使用してノートパソコンのバッテリー寿命を最適化する方法
モバイルデバイス(ノートパソコンなど)でLinuxを使用する際、バッテリー寿命を最適化するために適切なカーネルパラメータを調整することが非常に重要です。Tlpは、GPLv2ライセンスの下でリリースされた、非常にカスタマイズ可能で無料のオープンソースコマンドラインユーティリティであり、まさにこの目的のために作成されました。このチュートリアルでは、最も使用されているLinuxディストリビューションにTlpをどのようにインストールし、どのように構成するかを見ていきます。
このチュートリアルでは、次のことを学びます。
- Tlpをインストールする方法
- Tlpを設定する方法
- tlp-statを使用して省電力状態を確認する方法
使用されるソフトウェア要件と規約
Tlpをインストールする
Tlpは、最も使用されているLinuxディストリビューションのリポジトリに用意されているため、インストールするために必要なことは、お気に入りのパッケージマネージャーを使用することだけです。インストールする必要がある基本パッケージはtlpと呼ばれています。さらに、特定のイベントが発生したときにラジオインターフェースを有効または無効にするためにラジオデバイスウィザードを使用する予定がある場合は、tlp-rdwパッケージをインストールする必要があります。
FedoraはRed Hatファミリーのコミュニティディストリビューションであり、dnfパッケージマネージャを使用してソフトウェアパッケージをインストールまたは削除します。Tlpをインストールするには、次のコマンドを実行するだけです:
sudo dnf install tlp tlp-rdw
Debianは最も広く普及している安定したLinuxディストリビューションの一つであり、UbuntuやLinux Mintなどの多くの派生版の基盤を代表しています。このディストリビューションでソフトウェアをインストールする「最新の」方法は、aptラッパーを使用することで、apt-getや他のコマンドの上にユーザーフレンドリーなインターフェースを提供します:
sudo apt install tlp tlp-rdwTlpはArchlinuxの「community」リポジトリにもあります。Archにソフトウェアをインストールするには、pacmanパッケージマネージャーを使用します:
sudo pacman -Sy tlp tlp-rdwTlpがシステムにインストールされたら、関連するサービスを起動し、ブート時に有効にする必要があります(FedoraやDebianでは、サービスはインストールの一部として自動的に開始されるべきです)。最近ではほとんどすべてのディストリビューションがSystemdをinitマネージャーとして使用しているため、そのような作業を行うにはsystemctlコマンドを使用できます:
sudo systemctl enable --now tlp.serviceTlpの設定
Tlpを設定し、私たちのニーズにより合うように調整するために、基本的に2つのオプションがあります:
/etc/tlp.confファイルを編集してください/etc/tlp.dディレクトリに設定ファイルをドロップしてください
どのアプローチを採用すべきでしょうか?それは依存します。主要な Tlp 設定ファイルである /etc/tlp.conf を開くと、その内容がすべてコメントアウトされているのがわかります。各オプションについては、デフォルト値や推奨値を含む簡単な説明が提供されています。オプションの値を変更するには、適切な行からコメントを削除し、対応する変数に希望する値を割り当てる必要があります。このアプローチは、手動で設定を変更する場合に採用しやすいです。
代替手段として、使用したいオプションとそれらの値を含む1つまたは複数の設定ファイルを作成し、それらを/etc/tlp.dディレクトリに配置することができます。これらのファイルのそれぞれは、名前に「.conf」拡張子が必要です。このアプローチは、たとえば、AnsibleやKickstartを使用して自動インストールの一部としてtlpを展開する場合には、より便利です。
先に述べたように、Tlpによって設定されたパラメータは、主要な設定ファイルに非常によく説明されています。しかし、このチュートリアルの進行中に、それらのいくつかをさらに調査し、それらがどのカーネルサブシステムで動作しているかを見ていきましょう。さあ、始めましょう。
ラップトップモード
メインTlp設定ファイル内で最初に出会うオプションの一つはDISK_IDLE_SECSとMAX_LOST_WORK_SECSです。これらには、電源アダプタ(ON_AC)で動作しているかバッテリー(ON_BAT)で動作しているかに応じて値が割り当てられます。これらのオプションは、Linuxカーネルの「ラップトップモード」と呼ばれる機能を利用しています。ラップトップモードがアクティブな時、Linuxが「ダーティデータ」を扱う方法が基本的に変わります。ダーティデータとは、メモリ内でディスクに書き込む必要があるデータのことです。
DISK_IDLE_SECS_ON_ACまたはDISK_IDLE_SECS_ON_BATに割り当てる値は、/sys/proc/vm/laptop_modeファイルに書き込まれます。0より大きい値はラップトップモードを有効にし、ディスクがアイドルになった後、データ同期を行う前の秒数を表します。電源アダプタが接続されているときのtlpによって使用されるデフォルト値は0であり、バッテリー電源の場合は代わりに2が使用されます。
ノートパソコンモードの動作を修正するもう一つのオプションはMAX_LOST_WORK_SECSです。このオプションのTlp設定ファイルにおける値は秒単位で表されており、内部ではこの値がセンチ秒に変換(100倍され)て、以下のシステムファイルに書き込まれます。
- /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
これらのファイルのそれぞれは異なる役割を持っています。カーネルは定期的に「フラッシャースレッド」を使用して、「古い」データをディスクに書き込みます:書き込まれた値は、/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ファイルは、その名前から推測できるように、xfsファイルシステムの動作に影響を与えます。前者の値は、不整合なメタデータバッファのリストがスキャンされるまでの時間の間隔を示し、後者の値は、メタデータがディスクに書き込まれるまでの時間の間隔を設定します。
スケーリングガバナーの設定
Tlpは、マシンの電源に応じてCPUスケーリングガバナーを設定するために使用できます。スケーリングガバナーは、特定の要因に応じてCPUの周波数を設定および変更します。周波数の変更方法は、使用されているガバナーによって異なります。利用可能なCPUガバナーは、/sys/devices/system/cpu/<cpun>/cpufreq/scaling_available_governorsファイルをクエリすることで取得できます。ここで<cpun>はCPU番号で置き換える必要があります。例:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors上記のコマンドは、次のような結果を返すべきです:
conservative ondemand userspace powersave performance schedutilTlpでスケーリングガバナーを設定するには、CPU_SCALING_GOVERNOR_ON_ACとCPU_SCALING_GOVERNOR_ON_BATオプションの値としてガバナーの名前を使用する必要があります。内部では、Tlpは希望する選択肢を/sys/devices/system/cpu/cpu*/cpufreq/scaling_governorファイルに書き込みます。
Tlpは、ユーザーが選択したスケーリングガバナーの最大および最小周波数を、CPU_SCALING_MIN_FREQ_ON_AC、CPU_SCALING_MAX_FREQ_ON_AC、CPU_SCALING_MIN_FREQ_ON_BAT、および
CPU_SCALING_MAX_FREQ_ON_BATオプションを通じて簡単に微調整できるようにします。提供された値は、/sys/devices/system/cpu*/cpufreq/scaling_max_freqおよび/sys/devices/system/cpu*/cpufreq/scaling_min_freqファイルに書き込まれます。
Intel HDAの省電力機能を使用して
バッテリーでの稼働時に消費電力を下げるためのもう一つの便利な戦略は、Intel HDA(ハイデフィニションオーディオ)デバイスの電力節約を有効にすることです。Tlpは、SOUND_POWER_SAVE_ON_ACおよびSOUND_POWER_SAVE_ON_BAT変数を介してこの戦略を有効にすることを許可します。0の値はこの機能を無効にし、それより大きな値はこの機能を有効にし、デバイスが省電力モードに入るべき非アクティブの秒数を表します。Tlpは渡された値を/sys/module/snd_hda_intel/parameters/power_saveおよび/sys/module/snd_ac97_codec/parameters/power_saveファイルに書き込みます。この機能はバッテリーとACの両方でデフォルトで有効です。
オーディオコントローラーは、省電力モードのときにも無効になります。これは、SOUND_POWER_SAVE_CONTROLLERオプションを介して制御されており、'Y(有効)またはN(無効)に設定できます。このパラメータを制御するシステムファイルは、/sys/module/snd_hda_intel/parameters/power_save_controllerです。
バッテリーのしきい値を設定する
特定のマシン、例えばThinkpadなどでは、システムファームウェアがバッテリー充電の閾値を設定できるようになっています。この機能はバッテリー寿命を保つために本当に役立ちます。現代のリチウムバッテリーは、完全に放電されたり、常に最大出力レベルで維持されたりすることで能力を失う可能性があります。充電の閾値を設定することで、私たちのニーズに合った充電動作を調整することができます。
例えば、機械をバッテリーであまり使用しない場合、完全なバッテリーサイクルや過熱を避けるために、下限および上限の閾値をそれぞれ40および50に設定できます。逆に、頻繁にバッテリーで機械を使用する場合は、下限を85、上限を95に設定することができます(値はLenovoのページで提案されています)。システムは、充電割合が最小閾値未満の場合にのみバッテリーを充電し、上限閾値に達した場合は充電を停止します。 Tlpはこの機能をSTART_CHARGE_THRESH_BAT0とSTOP_CHARGE_THRESH_BAT0の変数を介して制御します。システムにバッテリーが複数ある場合は、BAT1などの同じ設定を追加することで、専用の設定を追加できます。渡された値は/sys/class/power_supply/BAT0/charge_control_start_thresholdおよび/sys/class/power_supply/BAT0/charge_control_end_thresholdファイルに書き込まれます。
特定のイベントで無線インターフェースを無効にする
Tlpを使用することで、特定のイベントが発生したときに特定のラジオインターフェースを有効または無効にする機会があります。たとえば、システムがイーサネットを介してLANに接続されているときに、Wi-Fiカードを切断することができます。Tlpは次のオプションを通じてこれを制御します。
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_DISCONNECT変数の名前はかなり自己説明的です。それらは、デバイスタイプの値としてカンマ区切り、スペース区切りのリストを受け入れます。例えば、システムがケーブルでLANに接続されているときにすべてのWi-Fiデバイスを無効にするには、次のように書きます:
DEVICES_TO_DISABLE_ON_LAN_CONNECT="wifi"Tlpは、電源アダプタやドックの接続または切断など、他のイベントでデバイスを無効にすることもできます。
tlp-statを使用して省電力状態を確認しています
現在の省エネルギー状態を確認するには、tlpに付属しているユーティリティを使用できます:tlp-status。このユーティリティを使用すると、tlp設定の値、カーネル設定、バッテリーデータなど、さまざまな情報を表示できます。オプションなしで呼び出すと、tlp-statは利用可能なすべての情報を印刷します。
sudo tlp-statここに返されたデータの抜粋があります(出力は切り捨てられています):
--- 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
[...]返された情報は、適切なオプションを使用してフィルタリングできます。例えば、バッテリーのデータのみを表示するには、次のように実行します:
sudo tlp-stat --battery同様に、USBデバイスに関する情報のみを表示するようにするには、--usbオプションを使用できます。使用できるオプションの完全なセットについては、ユーティリティのマニュアルページを参照してください。
結論
このチュートリアルでは、最も一般的に使用されるLinuxディストリビューションのいくつかにTlpをインストールおよび構成する方法と、Linuxのバッテリー寿命を最適化するためにどのように設定できるかを見ました。主な設定ファイルが何であるか、その中に含まれるいくつかのディレクティブ、そして渡された設定がどのようにシステムファイルに書き込まれるかを見ました。Tlpは、幅広い他の省電力の調整を実行するために使用できます。これらを知る最良の方法は、設定ファイルを見て、それらがどのように実装されているかを確認することです。
