Linuxの電源管理:TLPとPowertopでバッテリー駆動時間を2倍に延ばす方法

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

LinuxノートPCの「隠れたコスト」

ほとんどのLinuxディストリビューションは、サーバーグレードのデフォルト設定で出荷されています。これは安定性を確保するためですが、ノートPCにおいては本体が熱くなり、バッテリーがすぐに切れてしまうことを意味します。アイドル時にファンが高速回転したり、短い会議の間にバッテリーが30%も減ったりすることに気づくかもしれません。これは、ハードウェアの互換性問題を避けるために、Linuxカーネルが強力な省電力機能をデフォルトで無効にしていることが多いためです。

私は長年、高稼働率のVPSインスタンスを管理してきましたが、その最適化の原則を自分のThinkPadにも適用しました。カーネルパラメータを一つ間違えるだけでシステムがフリーズするという苦い経験もしましたが、体系的なアプローチをとれば、3時間しか持たなかったマシンを、6〜7時間は余裕で持つように変えることができます。これは単なる推測ではなく、データに基づいて放電率を下げていく作業です。

最適化戦略の選択

Linuxで電源を管理するには、主に3つの方法があります。適切な方法を選ぶことで、CPU周波数をめぐるスクリプト同士の競合を防ぐことができます。

1. 手動によるカーネルパラメータの設定

この方法は、GRUB設定を編集して pcie_aspm=force のようなフラグを渡すものです。完全な制御が可能ですが、非常に壊れやすいのが難点です。カーネルのアップデート一つでフラグの解釈が変わり、システムが起動しなくなったり、Wi-Fiカードがスリープから復帰しなくなったりする可能性があります。

2. デスクトップ環境(DE)のプロファイル

GNOMEやKDE Plasmaには、現在「省電力」や「パフォーマンス」といったシンプルな切り替えスイッチが備わっています。初心者には最適ですが、細かな調整はできません。PCIeバスの電力状態や、アグレッシブなSATAリンク電力管理といった深い設定にまでは、ほとんど手が届きません。

3. 専用デーモン(プロの選択)

TLPのようなツールが業界標準であるのには理由があります。これらはバックグラウンドで動作する自動エンジンとして機能し、充電器を抜いた瞬間に何百ものカーネル設定を切り替えます。TLPは堅牢で、例外的なケースも処理してくれるため、一度設定してしまえば手間がかかりません。

必須ツールキット

TLP:自動化エンジン

  • 用途: 「設定したらあとはお任せ」の自動化。手動操作なしでCPUスケーリング、ディスクのスピンダウン、Wi-Fiの電力モードなどを管理します。
  • 注意点: GNOMEの power-profiles-daemon と競合することが多いため、先にそちらを無効にする必要があります。

Powertop:診断のスペシャリスト

  • 用途: リアルタイムの診断。画面、GPU、または個別のプロセスが具体的に何ワット(W)消費しているかを表示します。
  • 注意点: 「Auto-tune」設定は、カスタムのsystemdサービスを作成しない限り、再起動後に保持されません。

ACPI:レポーター

  • 用途: 生のハードウェアの状態確認。バッテリーの摩耗具合や温度ゾーンのデータを提供します。
  • 注意点: 読み取り専用ツールであり、これ自体が電力を節約するわけではありません。

導入ガイド

ステップ1:競合の排除

FedoraやUbuntuのような最新のディストリビューションには、標準の電源デーモンが搭載されています。TLPを並行して実行すると、設定を常に上書きし合ってしまいます。TLPに完全な制御を任せるために、デフォルトのサービスを無効化します:

sudo systemctl mask power-profiles-daemon

ステップ2:TLPのインストール

DebianやUbuntuシステムでは、インストールは簡単です。このパッケージには、ベースとなるデーモン and Wi-Fi管理用の無線デバイスウィザードが含まれています。

sudo apt update
sudo apt install tlp tlp-rdw
sudo systemctl enable tlp
sudo tlp start

ThinkPadを使用している場合は、バッテリーの充電しきい値を設定するために以下の追加パッケージをインストールしてください。充電を80%に制限することで、バッテリーセルの物理的な寿命を2倍に延ばすことができます:

sudo apt install acpi-call-dkms tp-smapi-dkms

ステップ3:Powertopによる診断

変更を加える前に、現在の放電率を確認しましょう。ノートPCをバッテリー駆動にし、ツールを起動します。最適化されていない一般的なノートPCは、アイドル時で12W〜15Wを消費しているかもしれません。目標はこれを8W未満に抑えることです。

sudo powertop --calibrate

注: キャリブレーション中に画面がちらつきます。完了したら、「Tunables」タブを確認してください。「Bad」と表示されている項目があれば、TLPがまだそれらのコンポーネントを管理できていないことを意味します。

ステップ4:設定の微調整

/etc/tlp.conf を開きます。このファイルには詳細なコメントが付いていますが、特に以下の調整がバッテリー寿命の向上に大きく貢献します:

# バッテリー駆動時は 'powersave' を使用し、ハードウェアにスケーリングを任せる
CPU_SCALING_GOVERNOR_ON_BAT=powersave

# 熱スパイクを防ぐため、バッテリー駆動時は最大ターボブーストを制限する
CPU_BOOST_ON_BAT=0

# Wi-Fiの強力な省電力機能を有効にする
WIFI_PWR_ON_BAT=on

# スリープ中の電力消費を抑えるため、Wake-on-LANを無効にする
WOL_DISABLE=Y

sudo tlp start を実行して、これらの変更をすぐに適用します。

ステップ5:バッテリーの状態確認

ACPIを使用して、バッテリーが設計通りの容量を維持しているか確認します。「last full capacity(最終フル充電容量)」が「design capacity(設計容量)」よりも著しく低い場合、ソフトウェア의 最適化だけでは寿命の尽きかけたハードウェアを救うことはできません。

acpi -i
# 出力例:
# Battery 0: design capacity 5000 mAh, last full capacity 4200 mAh (16% 劣化)

USB周辺機器のラグの修正

TLPの設定がアグレッシブすぎることがあります。ワイヤレスマウスの動きがカクつく場合、TLPが2秒ごとにUSBレシーバーをサスペンドさせている可能性があります。lsusb でデバイスID(例:046d:c52b)を確認し、設定ファイルの除外リストに追加してください:

USB_EXCLUDE_DEVICEIDS="046d:c52b"

最後に

最適化は反復的なプロセスです。ノートPCのファームウェアによってACPIコールの処理方法が異なるため、Dell XPSで機能した設定がLenovo Carbonではハングアップの原因になることもあります。まずはデフォルト設定から始め、数日間システムを監視してください。5時間安定して動作するマシンは、6時間持つものの重要なアップデート中にクラッシュするような不安定なマシンよりもはるかに価値があります。

Share: