2013年11月23日土曜日

PowerTOPでラップトップのバッテリー持ちを良くしたい! その1

基本家でしか使わないので私にはあまり意味がないかもしれませんが。


私は今Dell Vostro 3360をメインに使っています。初めはWindows7、途中からDebianとデュアルブート、そして今はDebianオンリーなのですが、どう考えてもバッテリーの持ちがWindowsよりも悪いんです。5時間くらい持っていたのが3時間くらい。

acpidはちゃんと動いているので、やっぱりメーカーが調整してくれるってのがどれだけ素晴らしいかってことですよね。DellはUbuntu入れて売っている時期があるんだから是非またやってみてもらいたいです。

まぁそんなこんなでバッテリー持ちを良くしたいと思い検索すると、どうやらPowerTOPというものがあるらしく。なんかIntelご謹製みたいです。

https://01.org/powertop/

早速入れました。

# aptitude install powertop

使ってみるとバッテリー食ってそうなプロセスや機器が見られたり、今何ワットで動いているのか分かったり、CPUがどのクロックで動いているのか分かったりします。Tabキーで画面が切り替わります。一番目につくのはTuneableというタブで、実行した方が良いコマンドや、より省電力になるパラメータを教えてくれます。

適用したい設定にカーソルを合わせてエンターを押すと適用してくれるんですけど、再起動すると元に戻っちゃうんですよね。なので、今回はこれらを自動的に適用してくれるようにやってみます。

まず、実際に適用するときに使われるスクリプトはこのままではたぶん分からないのですが、powertopを起動した際の状況をhtmlに出力してくれるオプションがあるので、それを実行します。

# powertop --html

そうするとpowertop.htmlというのが出来ているので、適当なブラウザで開いてみてください。見た目は違えど内容は大体同じです。しかし、Tuningというタブをクリックすると説明と共に実行されていないスクリプトが載っています。

画像ではあまり項目が多くないですが、これはスクリプトを自動で実行できるようにした後の様子なので参考にならないかもしれません;
初期状態ではもっとたくさんありました。

自動で実行する方法として、私は/usr/local/bin/powertop.shにpowertopで推奨されるスクリプトを書き、/etc/rc.localで起動時に実行してもらうことにしました。(参考:PowerTOP to Optimise Laptop Power Consumption - Manjaro Linux)

/usr/local/bin/powertop.sh

#!/bin/sh

iw dev wlan0 set power_save on
echo '0' > '/proc/sys/kernel/nmi_watchdog'
echo '1' > '/sys/module/snd_hda_intel/parameters/power_save'
echo 'min_power' > '/sys/class/scsi_host/host0/link_power_management_policy'
echo 'min_power' > '/sys/class/scsi_host/host1/link_power_management_policy'
echo 'min_power' > '/sys/class/scsi_host/host2/link_power_management_policy'
echo 'min_power' > '/sys/class/scsi_host/host3/link_power_management_policy'
echo 'min_power' > '/sys/class/scsi_host/host4/link_power_management_policy'
echo 'min_power' > '/sys/class/scsi_host/host5/link_power_management_policy'
echo 'auto' > '/sys/bus/usb/devices/1-1.1/power/control'
echo 'auto' > '/sys/bus/usb/devices/1-1.3/power/control'
echo 'auto' > '/sys/bus/usb/devices/3-1.1/power/control'
echo 'auto' > '/sys/bus/usb/devices/3-1.3/power/control'
echo 'auto' > '/sys/bus/pci/devices/0000:00:00.0/power/control'
echo 'auto' > '/sys/bus/pci/devices/0000:00:02.0/power/control'
echo 'auto' > '/sys/bus/pci/devices/0000:00:14.0/power/control'
echo 'auto' > '/sys/bus/pci/devices/0000:00:16.0/power/control'
echo 'auto' > '/sys/bus/pci/devices/0000:00:1a.0/power/control'
echo 'auto' > '/sys/bus/pci/devices/0000:00:1b.0/power/control'
echo 'auto' > '/sys/bus/pci/devices/0000:00:1c.0/power/control'
echo 'auto' > '/sys/bus/pci/devices/0000:00:1c.4/power/control'
echo 'auto' > '/sys/bus/pci/devices/0000:00:1d.0/power/control'
echo 'auto' > '/sys/bus/pci/devices/0000:00:1f.0/power/control'
echo 'auto' > '/sys/bus/pci/devices/0000:00:1f.2/power/control'
echo 'auto' > '/sys/bus/pci/devices/0000:00:1f.3/power/control'
echo 'auto' > '/sys/bus/pci/devices/0000:01:00.0/power/control'
echo 'auto' > '/sys/bus/pci/devices/0000:02:00.0/power/control'

/etc/rc.local

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/usr/local/bin/powertop.sh

exit 0

とまぁこんな感じです。個々powertopの結果を見てこんな感じにやってみて書いてみて下さい。終わったらACアダプタを抜いた状態で再起動して、powertop --htmlを実行して変化があるか確かめて下さい。

need of Tuningの欄が減っていたらやったぁ!って感じです。powertop.shに書いたのに変化がない箇所があれば、打ち間違いなど確かめたほうがいいんじゃないですかね。お疲れ様です。


...お疲れのところ申し訳ないのですが、まだやることがあります。それはその2でやります。では。