TLPでLinuxの消費電力を減らす

Posted by 雅楽斎 on Friday, October 25, 2019

TOC

様々な設定ができる省電力設定ツール

LinuxではCPUクロックを制御するcpufreqという仕組みで消費電力を抑えることができますが、イマドキはTLPを使うそうなので導入してみます。

TLPの日本語のまとまった説明としてはArch LinuxのWikiが大変参考になります。

なお、確認はGalliumOS3.0で行っています。

インストール

# apt-get install tlp

現在の設定値を確認

# tlp stat
--- TLP 1.1 --------------------------------------------

+++ Configured Settings: /etc/default/tlp
TLP_ENABLE=1
TLP_DEFAULT_MODE=AC
TLP_PERSISTENT_DEFAULT=0
DISK_IDLE_SECS_ON_AC=0
(略)

起動時有効化設定

# systemctl enable tlp

諸処の設定

設定ファイルは/etc/default/tlpで、ここに必要な設定を追記します。

btrfsを使っている場合はSATA_LINKPWR_ON_BATをmax_performanceにする。

SATA_LINKPWR_ON_BAT=max_performance

参考

btrfs and TLP · Issue #128 · linrunner/TLP

I am using btrfs on archlinux 3.18.* and have massive issues with TLP. After installing TLP and rebooting it a few times I get random file corruptions until my filesystem breaks completely. I cant ...

CPUガバナーを設定

AC接続時にパフォーマンス、バッテリー接続時は負荷に応じる設定

CPU_SCALING_GOVERNOR_ON_AC=perfomance
CPU_SCALING_GOVERNOR_ON_BAT=ondemand

一般に他にcpufreqとして使われるガバナーのprofileとしてはconservative(保守的)、powersave(最小クロックで固定)あたりでしょうか。

Turbo Boostを設定(kernel3.7以降)

AC接続時に有効、バッテリー接続時に無効

CPU_BOOST_ON_AC=1
CPU_BOOST_ON_BAT=0

とりあえずこういう差分になりました。

--- /etc/default/tlp.org	2018-07-25 11:00:47.000000000 +0900
+++ /etc/default/tlp	2019-10-25 08:43:12.667501498 +0900
@@ -41,8 +41,8 @@
 #   distributions have chosen them as defaults. If you still want to change,
 #   you should know what you're doing! You *must* disable your distribution's
 #   governor settings or conflicts will occur.
-#CPU_SCALING_GOVERNOR_ON_AC=powersave
-#CPU_SCALING_GOVERNOR_ON_BAT=powersave
+CPU_SCALING_GOVERNOR_ON_AC=perfomance
+CPU_SCALING_GOVERNOR_ON_BAT=ondemand
 
 # Set the min/max frequency available for the scaling governor.
 # Possible values strongly depend on your CPU. For available frequencies see
@@ -73,8 +73,8 @@
 # Important:
 # - This may conflict with your distribution's governor settings
 # - A value of 1 does *not* activate boosting, it just allows it
-#CPU_BOOST_ON_AC=1
-#CPU_BOOST_ON_BAT=0
+CPU_BOOST_ON_AC=1
+CPU_BOOST_ON_BAT=0
 
 # Minimize number of used CPU cores/hyper-threads under light load conditions:
 #   0=disable, 1=enable.

ガリガリチューニングすべき?

私の場合は大雑把に省電力設定を適用したかったのでかなり設定項目が少ないですが、他にもコア数を絞る/ハイパースレッディングを無効にするSCHED_POWERSAVE_ON_AC/SCHED_POWERSAVE_ON_BATもありますが、これらは元々性能向上のための機能であり、イマドキのCPUであれば無意味に電力消費をするとも思えません。

また、負荷が高い場合はリソースをガンガン投入して短時間で処理を終わらせるべきと個人的には思うので、このくらいでどうでしょうか。

ちなみにこの設定項目でpowertopを実行すると概ね7.5W程度のバッテリー消費になっています。

powertopで突き詰める

ガリガリやる場合によく使われるpowertopをインストールします。

# apt-get install powertop

おもむろにpowertopをroot権限で実行します。デフォルトではOverviewにフォーカスが当たっているので、tabキーでTunableに移動します。

割とスパルタな感じで思い通りの値になっていないとBad判定されます。

>> Bad           Enable SATA link power management for host0                       
   Bad           Enable SATA link power management for host1
   Bad           Enable Audio codec power management
   Bad           Runtime PM for I2C Adapter i2c-5 (i915 gmbus dpc)
   Bad           Runtime PM for I2C Adapter i2c-7 (i915 gmbus dpd)
   Bad           Runtime PM for I2C Adapter i2c-2 (i915 gmbus ssc)
   Bad           Runtime PM for I2C Adapter i2c-4 (i915 gmbus panel)
   Bad           Autosuspend for unknown USB device 2-4 (0489:e056)
   Bad           Runtime PM for I2C Adapter i2c-6 (i915 gmbus dpb)
   Bad           Runtime PM for I2C Adapter i2c-3 (i915 gmbus vga)
   Bad           Runtime PM for PCI Device Intel Corporation 8 Series USB EHCI #1
   Bad           Runtime PM for PCI Device Intel Corporation Haswell-ULT DRAM Contr
   Bad           Runtime PM for PCI Device Intel Corporation Haswell-ULT HD Audio C
   Bad           Runtime PM for PCI Device Intel Corporation 8 Series Thermal
   Bad           Runtime PM for PCI Device Intel Corporation 8 Series USB xHCI HC
   Bad           Runtime PM for PCI Device Intel Corporation 8 Series Low Power Sub
   Bad           Runtime PM for PCI Device Intel Corporation 8 Series HD Audio Cont
   Bad           Runtime PM for PCI Device Intel Corporation 8 Series LPC Controlle
   Bad           Runtime PM for PCI Device Intel Corporation 8 Series SATA Controll
   Bad           Runtime PM for PCI Device Intel Corporation Haswell-ULT Integrated
   Bad           Runtime PM for PCI Device Qualcomm Atheros AR9462 Wireless Network
   Bad           Runtime PM for PCI Device Intel Corporation 8 Series SMBus Control
   Good          VM writeback timeout
   Good          Bluetooth device interface status
   Good          NMI watchdog should be turned off
   Good          Autosuspend for USB device xHCI Host Controller [usb2]
   Good          Runtime PM for I2C Adapter i2c-0 (Synopsys DesignWare I2C adapter)
   Good          Runtime PM for I2C Adapter i2c-1 (Synopsys DesignWare I2C adapter)
   Good          I2C Device 0-0067 has no runtime power management
   Good          Autosuspend for USB device xHCI Host Controller [usb3]
   Good          Autosuspend for USB device HD WebCam [Chicony Electronics Co.,Ltd.
   Good          Runtime PM for PCI Device Intel Corporation 8 Series I2C Controlle
   Good          Runtime PM for PCI Device Intel Corporation 8 Series I2C Controlle
   Good          Runtime PM for PCI Device Intel Corporation 8 Series PCI Express R
   Good          Wake-on-lan status for device wlp1s0
   Good          Wake-on-lan status for device br-558db79c23b9
   Good          Wake-on-lan status for device docker0

めちゃめちゃBad言われてる…

ここで選択されている項目上でEnterを押すと、

>> echo 'min_power' > '/sys/class/scsi_host/host0/link_power_management_policy';

>> Good          Enable SATA link power management for host0                       

となり、sysfsの設定を書き換えたっぽいことがわかります。こんな感じでBadをGoodに変えていくと…

The battery reports a discharge rate of 5.59 W
The power consumed was 102 J

ということで2Wくらい更に減りました。

ただ、消費電力が少ないに越したことはないですがここまでやる必要があるかといわれるとちょっと…というのが実感です。突き詰めたい方にはオススメできます。


comments powered by Disqus