FreeBSDの省電力設定

蛇の道は蛇ということで,i3 530を使ったのに46Wという惨状を省電力スレで嘆いたら,

TuningPowerConsumption - FreeBSD Wiki

というページを教えてもらう.

昨日のマシンをwindows 7で起動するとだいたいアイドルが29Wくらいになるので,46Wというのはいろいろとありえないのは明確だった.が,何をいじればいいんだよということで,上のページを参考にいろいろと考えてみた.

で,いじってみてわかったのはC2 stateは有効になっているものの,ほとんど使われていないということ.

dev.cpu.0.cx_supported: C1/3 C2/245
dev.cpu.0.cx_lowest: C2
dev.cpu.0.cx_usage: 100.00% 0.00% last 500us
dev.cpu.1.cx_supported: C1/3 C2/245
dev.cpu.1.cx_lowest: C2
dev.cpu.1.cx_usage: 100.00% 0.00% last 500us
dev.cpu.2.cx_supported: C1/3 C2/245
dev.cpu.2.cx_lowest: C2
dev.cpu.2.cx_usage: 100.00% 0.00% last 500us
dev.cpu.3.cx_supported: C1/3 C2/245
dev.cpu.3.cx_lowest: C2
dev.cpu.3.cx_usage: 100.00% 0.00% last 500us

これを改善するには割り込みを抑えることで,無理やりC2に持ってくようにするしかなかった.最終的な/boot/loader.confは

kern.hz=100 # きわめて有効(10Wくらい)
# hint.p4tcc.0.disabled=1 を有効にすると,EISTが有効にならなくなるのでダメ
hint.acpi_throttle.0.disabled=1 # 有効(C2が効果的に使えてる状態で5Wくらい)
hw.pci.do_power_nodriver=3 # 効かない

という感じ.これで,

dev.cpu.0.cx_supported: C1/3 C2/245
dev.cpu.0.cx_lowest: C2
dev.cpu.0.cx_usage: 9.47% 90.52% last 1979us
dev.cpu.1.cx_supported: C1/3 C2/245
dev.cpu.1.cx_lowest: C2
dev.cpu.1.cx_usage: 7.72% 92.27% last 9762us
dev.cpu.2.cx_supported: C1/3 C2/245
dev.cpu.2.cx_lowest: C2
dev.cpu.2.cx_usage: 7.76% 92.23% last 1446us
dev.cpu.3.cx_supported: C1/3 C2/245
dev.cpu.3.cx_lowest: C2
dev.cpu.3.cx_usage: 8.03% 91.96% last 659us

と結構な割合でC2にいるようになって,その結果,アイドルが32W.gccコンパイル時が75W前後に.


追記

現在運用中のファイルサーバに上の設定を適用してみたところ,

アイドル 66W(C1のみ,hz=1000)->61W(C2有効,hz=100)->61W(C3有効,hz=100)

なんか思ったより変わらない.でもまあ,コストが小さいC2まで有効で運用しようということで.

追記2

kern.hz=100だと,無線LAN経由の動画再生でかくつくようになったので,結局kern.hz=1000に戻す.アイドル時は64W.

追記3(2010-1-31)

BSDをCAM運用にして,動画再生時のかくつきが明らかに減ったので,kern.hz=100でも問題ないかと試してみたが,やっぱだめ.ノートPCみたいに,ユーザーのアクセスをもって動作するような用途や,ファイルコピーみたいにレイテンシがあっても問題のない用途ならいいんだろうけど,ファイルサーバ用途では低いkern.hzは致命的な模様.BSDももうちょっと賢く消費電力を減らして欲しいよ.

追記4 (2010-2-13)

debian(lenny, mutoさんバージョン)を入れてみたが,アイドル32Wで無線LAN経由でのTSファイル再生も問題なくできた.ファイル再生時も消費電力は32Wと変化なしなのは興味深い.このまま,次期ファイルサーバはlinux+btrfsで作ってみようかと思いつつも,やっぱテストのみだよなあ.怖すぎて.