Ubuntuでも冷え冷えにしたい
WindowsXPのサポート期間が終了して、まだ動く古いマシンにLinuxを導入することを考えた人もそれなりに居ることでしょう。しかし、Linuxはそのままだと割と熱々。その消費電力や熱、バッテリー駆動時間の減少にガックリ来た人も居るかもしれません。
そこで、今回はUbuntu14.04LTSで消費電力を低減する方法を探ってみました。
LinuxはどうしてもHardware Driver周りで遅れを取りますし、最適化が進み辛いものです。それはある程度仕方が無いことでありますが、ある程度解決できることもあります。
徐々にカーネルに取り込まれている部分もあるようですが、ここでは省電力ユーティリティを2つ導入してみます。
TLP
Linux Advanced Power ManagementでどうしてTLPなのか良く分かりませんが、割と広範囲の電力管理を一括で管理してくれるユーティリティです。
こちらの導入はとても簡単、かつ、スムーズに行えました。
linrunner.de: TLP - Linux Advanced Power Managementのページに記載してある通りで行けました。
たった3つコマンドを打つだけですね。
ACアダプタ接続時の標準設定が結構アグレッシブな印象を受けまして、個人的にはACアダプタ使用時でも冷え冷えで使いたいので、Battery接続時と同じになるように設定ファイルを書き換えました。
恐らく割と新しい機種ではこれだけでも充分かもしれません。しかし、筆者の持つ古いノートPCではCPU電圧設定のマージンが多く取られているものがあり、この設定が詰められると非常にありがたいのです。
WindowsではCrystal CPUIDやNHC(Notebook Hardware Control)、K10Statなどのユーティリティで設定できました。Linuxには……
PHC
なるものがあります。
こちら、Ubuntu12.04LTSではPPAから楽々導入が出来、PHCToolなるGUIで楽々設定ができたのですが、Ubuntu14.04LTSではPPAが無いので別の方法を取る必要があります。
PHC-LinuxのForumで「phc-intel-pack-rev14.tar.bz2」というツールをアップしてくれています。linux-PHC ・ View topic - phc-intel 0.3.2 and 0.4.0 + dkms for kernel 2.6.27 to 3.14
Intel CPUの場合はこちらのツールを導入することでPHCが使えるようになります……が。
- 混乱その1
ツールのドキュメントにUbuntuの場合は特殊な独自カーネルを使用していてCPUFreqドライバの置き換えが出来ないので、別のカーネルを用意すべき云々……とある。 - 混乱その2
ggっても別カーネルの資源を持って来てそれにPHCを入れる、というページにヒットする。 - 混乱その3
上記に従ってやろうとしてもうまく行かない。
とまあこんな具合で心が折れかけました。本当ならここでうまく行かない事例をきっちりと提示すべきなのですが、もうそんな気力も根性もないのでさらっと抽象的な記載で済ませてしまいます。スマヌ
そもそも、Ubuntuの独自カーネルは省電力関連を強化しているという記載もあって、そこまで頑張ってPHCを導入する意義が果たしてあるのだろうかという疑問も頭を過ぎり……
でも、解決できたんですね。苦労約3日間で。遅
結論から言うとUbuntu14.04LTSのカーネルに対してそのままPHCを導入できました。どうも、上記のドキュメントは少々昔の話なのかもしれません。
HeadersはInstallしておく必要はあるかと思いますが、普通にmakeとsudo make installで行けます。
ここで、2つ目の引っかかり。もし、makeで怒られたら……、それはhome配下に日本語名ディレクトリがあるせいかもしれません。(´・ω・`)
なんでそんなもんが影響するのか分かりませんが、筆者は自分のhome配下に上記ツールのディレクトリを作成してその中で作業していたのです。pathには日本語は含まれません。
でも、makeに失敗していました。権限が足りないと。ならば、sudo makeでどうだ。syscallほにゃらら.tblに対するconfigルールが定義されていないだとかなんとか(もう忘れちゃった)って怒られる。
それで、頓挫していたのです。
しかし、事は急展開。もう一台の、既にUbuntu12.04LTSを導入していろいろとカスタマイズした後に14.04LTSにアップグレードしてあったマシンで同じことを試してみたところ、こちらはあっけなく成功したのです。
その差として考えられたのが、home配下の日本語名ディレクトリの存在。成功したマシンの方はhome配下の「デスクトップ」や「ダウンロード」などの日本語名ディレクトリを英語名に変えていたのです。それが、こちら
$ LANG=C xdg-user-dirs-gtk-update
あ、ちなみに、うちでは素のUbuntu(NetInstallかServerで必要なものだけtaskselで選択している)でXubuntu Desktop(XubuntuをInstallしているのではない)を選択していますので、他のデスクトップだとまた違うかも思われます。
んでこれをすると、日本語ディレクトリ→英語にするが良いかみたいなダイアログが表示される。んでOKする。そしたら、……make通るじゃねぇか(# ゚Д゚) (;゚∀゚)=3ムッハー
あっけなくUbuntu標準のカーネルでも導入OK!でも、まだこれで終わりじゃない。
GRUBの設定
起動時にPHCを使ってくれるように言っておかないと、標準のCPUFreqを使われてしまうのでまるで意味がないのだ。
$ sudo nano /etc/default/grub
で「GRUB_CMDLINE_LINUX_DEFAULT=""」に「cpufreq_driver=phc-intel」を記述する。
GRUB_CMDLINE_LINUX_DEFAULT="cpufreq_driver=phc-intel"
他のオプションと併記したい場合はスペースを空けること。筆者は「quiet」とか「splash」とか無い方が好みなので、上記一つだけの記述としている。
編集し終えたら、
$ sudo update-grub
を忘れずに。
そして、いよいよ、CPU電圧の設定だ。
/etc/default/tlpの設定
上記にあるPHCToolはGUIでCPU電圧が設定できる優れものだが、Python2で動作するらしく、標準でPython3となっているUbuntu14.04LTSでは導入に少々苦労する。
というか、設定する値が決定しているならGUIなど必要ない。それにTLPも導入している場合はTLPの方にその設定を記述しておかないと起動時に反映されない。(TLPを導入していない場合はPHCToolで設定した値を起動時から適用することがPHCTool上で可能となっているが、TLPを入れるとTLP側の設定が優先されるっぽい)
$ sudo nano /etc/default/tlp
で
#PHC_CONTROLS="F:V F:V F:V F:V"
という行がある。これのコメント#を外して、動作させるクロックと電圧の組み合わせを組み合わせの数だけスペースを空けて列記する。
例えば、Dell LatitudeX1の場合、
PHC_CONTROLS="11:4 8:0 6:0"
11倍(1100MHz)でVID=4(0.764V)、8倍(800MHz)でVID=0(0.700V)、6倍(600MHz)もVID=0(0.700V)という設定。
標準より0.112〜0.144V下げている。ファンレスマシンなのでちょっとでも冷え冷えになるのは嬉しいし、モバイルマシンなのでバッテリー駆動時間が若干延びるのも嬉しいポイント。
なお、ここの数値はCPUにより異なるのでDataSheetとにらめっこするか、上記PHCToolで探ってみたら良いかと思う。
ちなみに、Dell Inspiron6000では、
#PHC_CONTROLS="13:23 10:14 8:8 6:2"
13倍(1733MHz)でVID=23(1.068V)、10倍(1333HMz)でVID=14(0.924V)、8倍(1066MHz)でVID=8(0.828V)、6倍(800MHz)でVID=2(0.732V)という設定。
0.24〜0.256Vも下げて冷え冷えなのだ。
厳密な比較ができているわけではないが、ここまでやっても同じ電圧に設定したWindowsXPにアイドル消費電力の低さでは叶わないっぽいが、それでも、遜色無いくらいには省電力に出来た。(※個人の感想です。)
少なくともワットチェッカーを眺めていて、1Wも差は付いていない感じだし、Dell Inspiron6000の方はファンが回る頻度も少なく、全く熱くもならずに良い感じです。
あ、ちなみにDell Inspiron6000の方は「i8kmon」なるものも入れてファンコントロールもしています。(標準よりも早めに(低い温度で)ファンを回すが、ゆっくり回す設定。それでも高負荷が続かない限り回らない)