2009年10月7日水曜日

CPUの節電

acpi絡みでCPUの節電ってのを始めて知ったのでメモ。

CPUの節電のために、パワーを制御することが出来る。S101のCPU、Atom N270はデフォルトで1.6GHzで駆動しているが、あまり作業をしていないときなどにクロック数を下げて節電する仕組みがある。archlinuxのWikiで見かけるこの種のユティリティは、CpuFrequtilsとPowernowdの2つ。

CpuFrequtilsの方が[Extra]リポジトリにあるので、こっちを導入してみたが、powernowdの方が設定は簡単っぽい。

パッケージ「cpufrequtils」
インストールはpacmanから。

前準備として、acpi-cpufreqモジュールをロードする。
#modprobe acpi-cpufreq

常時読み込みのため/etc/rc.confのMODULES配列に加えておく。
MODULES=(acpi-cpufreq ...)

モジュールが読み込めたら、以下のコマンドでS101のCPU情報を見ることができる。
$cpufreq-info

N270については、cpu0とcpu1の二つの情報がみれて、
そのそれぞれについてセッティング出来るクロック数や現在のクロック数がみれる。

1.cpuの設定モジュール「scaling govenor」
通常、CPUはいつも最大出力で動いている。しかし、cpufrequtilsは、あまり働かない時にはクロック数を下げる等のいくつかの決まった節電パターンで動かすためのモジュール(govenor)を提供してくれる。モジュールの種類は以下の通り

performance
 いつも最大クロックで駆動する。(カーネル付属のデフォルトモジュール)
cpufreq_ondemand
 システムロードに従って、クロック数を変化させる。(お勧めモジュール)
cpufreq_conservative
 ondemandと似ているが、保守的でクロックスピードは上品に変化する?
cpufreq_powersave
 最小クロック数で駆動させる。
cpufreq_userspace
 ユーザーがルールを定義できる。

これらのうち、好きなモジュールを(全てでも良い)ロードする。
 ※modprobe、恒常的には/etc/rc.confのMODULES配列で読み込み。

読み込んだモジュールのうち一つを選択してcpufreq-setコマンドを使い、対応したパターンでCPUを動かすことが出来る。

#cpufreq-set -g ondemand

使い方は、-gオプションでgovernor名を指定する。
ロードしていないモジュールのgovernorは選択できない。

2.しきい値の変更
ondemandモード等でCPUが動いている場合、CPUの使用率が低い時にクロック数は最小値で動いている。そしてデフォルトではこの状態からCPUの使用率が95%を越えると、クロック数が変更されるようになっている。この95%のしきい値を変更する事も出来る。

現在のしきい値は/sys/devices/system/cpu/cpu0/cpufreq/ondemand/up_thresholdファイルに記されているので、catコマンド等で確認できる。もう少し機敏に反応したい場合は50程度の数値を設定しても良いらしい。

#echo 50 >/sys/devices/system/cpu/cpu0/cpufreq/ondemand/up_threshold

但し、これらはリブート時にリストアされないので、/etc/rc.local等で設定して置くと良いらしい。

3.デーモン
/etc/conf.d/cpufreqを設定ファイルとして、/etc/rc.d/cpufreqをデーモンとして動かすことが出来る。

設定ファイルでの設定は、governorパターンの選択のみでOK
governor="ondemand"

最小クロック数と最大クロック数の部分はコメントアウトして自動認識に任せる。
#min_freq="1GHz"
#max_freq="2GHz"

設定ファイルの書き換えがおわったら、rc.confのDAEMONS配列にcpufreqを加えて置く。

0 件のコメント:

コメントを投稿