最近 csup した 7.1-STABLE は powerd の挙動が変わったねぇ。僕は CPU のロードアベレージと速度を MRTG で取得していて毎日見ているのだけど、それで powerd の挙動が一目瞭然;-)。
今までとどう変わったか?と、言われれば、多分 C7i や PhenomII など Core 毎に速度が変えられるようになったのに対応したのでしょうなぁ。
MRTG のグラフを見ていたら、今までは
CPU クロック抑えつつロードアベレージがちょっと高め
だったのだけど、最近の STABLE では
CPU クロック高めでロードアベレージはちょっと抑え気味
って感じかな。まぁ、どっちでも構わないのだけど、CPU クロックを低くしていれば消費電力が抑えられるわけでして。地球環境を考えたら、僕的には今までのほうが良いなぁ。と思ってしまうわけです。サーバであっても CPU ロードアベレージが低ければクロックも低くなっていて欲しい。裏を返すと、多少ロードアベレージが高くても CPU クロックは低くても良い。みたいな感じかしら。
で、powerd で調整できないものか man みましたよー。で、オプションで CPU クロックの変動を抑制することができる;-)。
現在、AthlonX2 なサーバに設定している powerd のオプションはこんな感じ。
|
Atom N330 なサーバに設定しているオプションはこんな感じ。
|
まず、-a で adaptive を指定して「適切なモード」を設定します。 -i で CPU アイドルのパーセントレベルを指定して、最後に -p でポーリング時間を設定します。
経験上、ポーリング時間を変更すると細かな CPU クロックの調整ができます。大きく変えたい時は -i オプションの値を変更すれば良いかと思われます。
後は二時間位ブン回して、その間に MRTG で情報取得して更にオブションの値を細かく調整すれば良いかと思います。
それにしても、温度とか、この手の値って MRTG で取れると知ると知りたくなるんだけど、知らなくても全然問題無いのよねぇ。その気分的な問題が中々面白いんだけど;-)。
それにしても、CentOS で CPU 速度を落とそうとしても、ややこしいのねぇ。カーネルモジュールをロードしてもエラー吐いてダメだしさ。そー考えると CPU クロックを可変にするのは FreeBSD のほうが圧倒的に楽だね。GENERIC カーネルだと powerd を起動すれば良いだけだし。
そー考えると地球環境を考える人は FreeBSD 使うのかぁ?;-P。
core毎にクロックを変えるようにすると、
プロセススケジューラがプロセッサの負荷を計算するときに
runキューだけでなく動作クロックも見ないといけなくなります。
たぶん当分はcore毎にクロックを変えられるようにはならないと予想してます。
powerdの変わったのはロードアベレージの扱いで
いままでは0%〜100%だったのが0%〜NCPUx100%になりました。
従来は、たとえば 100 core のマシンがあったとして、
1プロセスが全開で実行していたとしてもロードアベレージは
1%にしかならずpowerdは反応しませんでしたが、
今のは100%と計算されてpowerdがクロックを上げに行きます。
(ちなみに100coreのマシンのロードアベレージの上限は10000%になります。)
koieさん。こんにちは。
詳しい説明ありがとうございました。なるほど、一個のCPUで100%になるように変更されたのですね。CentOSとかと一緒になった感じですね。すると MRTGの MaxBytesの値を変える必要があるなぁ。
ちなみに、その昔 acpi_ppc を利用していた時、作者の方からお話を伺ったことがあるのですが、cpufreq や powerd はまだまだ楽しそうな感じですねぇ。