CPUのクロック数調整による省電力2

CPUのクロック数調整による省電力1 - 日進月歩からの続き.

前回はCPUの動作モードやら周波数の段階やらの話.
今回はcpufreqdデーモンの話でも...

cpufreqdデーモンは計算機の状況によって動的にCPUの周波数を変える役割がある.
例えば,バッテリーが少なくなったらなるべく周波数を低くして電力を使わないようにするとか.

とりあえず,cpufreqdデーモンの設定ファイル/etc/cpufreqd.confを見てみましょうか

[General]
pidfile=/var/run/cpufreqd.pid
poll_interval=2
verbosity=4
#enable_remote=1
#remote_group=root
[/General]

#[acpi]
#acpid_socket=/var/run/acpid.socket
#[/acpi]

[Profile]
name=Performance High
minfreq=100%
maxfreq=100%
policy=performance
[/Profile]

[Rule]
name=AC Rule
ac=on # (on/off)
profile=Performance High
[/Rule]

どうやら4つのセクションから成り立っているみたい.
詳しい説明は以下でみてもらうとして,簡単な説明をしていく.
$man cpufreqd.conf
まずは[General]セクションから.

  • poll_interval

計算機の状態をチェックする間隔.0.15以上の値じゃないとクラッシュするみたいなんで注意.

  • verbosity

メッセージの冗長性に関する設定.

  • enable_remote

コマンドからcpufreqdの設定を変えれるかどうかの設定(cpufreq-set,cpufreq-getのコマンドの使用の許可)

  • remote_group

enable_remotenoの設定をオンにしたときコマンドを使えるグループを設定.

ここでは後のことも考えてenable_remoteとremote_groupのコメントアウトを外しておく.
次は[acpi]セクション.
このセクションはacpiプラグインの設定.プラグインによってCPUの温度などをリアルタイムで読み取ることが可能となる.
acpidとのソケット通信を行うためのパスがかかれているのでここはコメントアウトを外しておけばOK.

[Profile]セクション.

  • name

Profileの各セクションごとに固有の名前をつける.

  • minfreq

最小の周波数.パーセンテージか周波数をKHz単位で表記.

  • maxfreq

最大の周波数.

  • policy

CPUの動作モードを設定する.

  • up_threshold

CPUの動作モードをondemandまたはconservativeしたとき,周波数を上げるCPU負荷のしきい値を設定.

  • down_threshold

CPUの動作モードをconservativeにしたとき,周波数を下げるCPU負荷のしきい値を設定.

[Rule]セクション

  • name

Ruleの各セクションごとの固有の名前

  • profile

このRuleセクションで用いるProfile(CPUの状態)のname値.

  • ac

acpiのオプション.AC電源が接続されているか.

  • battery_interval

acpiのオプション.バッテリーの残量.

他にもいろいろありますが...とりあえずこんなところ.

cpufreqdデーモンは計算機の状態から各[Rule]の中からどれが一番当てはまるかを探す(この時[Rule]の記述順も影響するらしい).そしてその[Rule]内に記述されている[Profile]の状態CPUを設定することを繰り返す.
このことが分かれば後は自分が好きなように設定すればOK.

記事のタイトル通り省電力をしたい...でも処理速度は遅くしたくはないのでCPUの負荷があまりかからない(アイドル状態など)では周波数を下げれば効率良く運用ができる.

そこで以下のように設定ファイルを変更.
手元の計算機はサーバ用なので電源やバッテリーまわりは気にせずに設定.ただしCPUの温度が高い場合は故障してしまうので,その時と通常時で[Rule]を考えた.

[General]
pidfile=/var/run/cpufreqd.pid
poll_interval=2
verbosity=4
enable_remote=1
remote_group=root
[/General]

[acpi]
acpid_socket=/var/run/acpid.socket
[/acpi]

[Profile]
name=iDefault Performance
minfreq=100%
maxfreq=0%
policy=ondemand
up_threshold=60
[/Profile]

[Profile]
name=Performance Low
minfreq=80%
maxfreq=0%
policy=powersave
[/Profile]

[Rule]
name=default
profile=Default Performance
[/Rule]

[Rule]
name=CPU Too Hot
acpi_temperature=55-100
cpu_interval=50-100
profile=Performance Low
[/Rule]

設定ファイルが書けたらデーモンもしくは計算機の再起動.

$sudo /etc/init.d/cpufreqd restart

再起動の後はCPUにそれほど負荷がかかっていなければ1.60GHzで稼働しているのが確認できる.
これで少しは地球に優しいかな?

ほかにもいろいろ設定は出来て(特にクライアントやったら動画みてるときの設定とか..)おもしろいのでまた機会があればいろいと触ってみようと思ってます.