よかろうもん!

アプリからインフラまで幅広くこなすいまどきのクラウドエンジニアが記す技術ブログ

PowerTOPで省電力化

以前のエントリにてUbuntu Tweakを利用して省電力化のための設定方法をご紹介しました。
しかし、Ubuntuディストリビューションのバージョンアップにより、その機能がつかえなくなりました。

そこで今回は、Ubuntu Tweakではなく、PowerTOPツールを利用することで電力を無駄に使用している不要なサービスを停止し、消費電力を減らしてみようと思います。

それではさっそく、powertopをインストールしましょう。

[linux]$ sudo apt-get install powertop

続いて実際に設定をしていきましょう。
実行にはrootと同等の権限が必要となります。

[linux] $ sudo /usr/sbin/powertop

実行すると以下が表示されます。

PowerTOP version 1.10 (C) 2007 Intel Corporation

Cステイト 平均滞在時間 Pステイト (周波数)
C0 (CPU動作状態) (28.3%) 2.21 GHz 3.2%
ポーリC 0.0ms ( 0.0%) 2.21 GHz 0.0%
C1 0.0ms ( 0.0%) 1.60 GHz 0.0%
C2 0.4ms ( 0.7%) 800 MHz 96.8%
C4 2.3ms (71.0%)

1秒あたりのCPU割り当て回数 : 321.0 時間間隔: 15.0秒
消費電力(ACPI見積り): 16.4W (1.7時間)

CPU割り当て回数上位一覧:
31.8% (220.2) <割り込み> : uhci_hcd:usb4, yenta, i915@pci:0000:00:02.0
20.6% (142.5) <カーネルIPI> : Rescheduling interrupts
14.4% ( 99.5) <割り込み> : ahci
12.1% ( 83.5) <割り込み> : PS/2 キーボード/マウス/タッチパッド
7.0% ( 48.4) dropboxd : schedule_timeout (process_timeout)
3.3% ( 23.0) <カーネルIPI> : function call interrupts

初期状態では、消費電力が16.4Wとなっていることが確認できます。
Cステイトについては、上記ではC0、C1、C2、C4が表示されていますが、これらはCの後の数字が大きくなると、CPUに供給するクロックや電圧を下げ、消費電力が抑えられるようになっています。そのため、数字が大きいほどフル稼働状態のC0に復帰するに時間がかかるようになっています。
Pステイト(周波数)に注目すると、Cステイトが大きくなるとPステイトが低くなっていますが、これは、cpufreqというカーネルモジュールとして読み込まれるCPU周波数/電圧制御機能によるもののようです。#もしかしたらacpidによる影響かもしれません。
#今現在は、はっきりと分かっていないので、あとで調べてエントリにします。

それでは、powertopコマンド実行時に消費電力を低減するためにどのような提案があるかを以下に記録しておきます。

提案: USBのオートサスペンドを有効にするためには、Uキーを押すかGRUB
設定ファイルのkernelコマンドラインにusbcore.autosuspend=1を追加してください。


提案: 以下のコマンドで使用していないBluetoothインタフェースが無効になります。
hciconfig hci0 down ; rmmod hci_usb
Bluetoothは多くの電力を消費し、USBをビジー状態にします。
Q - 終了 R - 更新 B - Bluetooth無効


提案: 以下のコマンドでラップトップモードが有効になります。
echo 5 > /proc/sys/vm/laptop_mode

Q - 終了 R - 更新 L - ラップトップモード有効


提案: 以下のコマンドでSATAリンクパワーマネジメントが有効になります。
echo min_power > /sys/class/scsi_host/host0/link_power_management_policy
またはSキーを押してください。
Q - 終了 R - 更新 S - SATAリンクパワーマネジメ


このUSBデバイスの活動率は時間あたり100.0%です:
USBデバイス 1-1 : BCM2045B (Broadcom Corp)

Q - 終了 R - 更新 U - USBサスペンド有効


提案: 以下のコマンドでVMの遅延書き戻し間隔を0.02秒から15秒に延長できます。
echo 1500 > /proc/sys/vm/dirty_writeback_centisecs
この設定はVMのバックグラウンド動作によるディスクアクセスの頻度が低くなります。
Q - 終了 R - 更新 W - 書き戻し間隔を延長


提案: 以下のコマンドでファイルシステムのnoatime設定が有効になります。
mount -o remount,noatime / またはTキーを押してください。
noatimeでアクセス日時が記録されなくなり、ディスクI/Oの発生が抑えられます。
Q - 終了 R - 更新 T - noatime有効

上記の設定ですべて提案通り実施した結果は以下の通りです。

消費電力(ACPI見積り): 12.4W (2.1時間) (長期: 14.9W,/1.7h)

消費電力(ACPI見積り)が、16.4W (1.7時間)から12.4W (2.1時間)まで減少しています。多少ですが、省電力化に成功しました。
この設定は、システム再起動後にデフォルトの設定に戻ってしまうようなので、スクリプトにするなりしなければならないようです。

どのようにスクリプトを書けばよいかについては、Ubuntuのフォーラムでも議論されいたりするので、そちらを参考にされるとよいかと思います。
参考:http://forums.ubuntulinux.jp/viewtopic.php?id=2963

今回、PowerTOPコマンドを利用して省電力化を試みて、多少ですが省電力化をすることができました。ですが、多少Linuxに関する知識が必要となり敷居が高いため、今後はもっと簡単に省電力化できるようなツールを探してみようと思います。