サーバマシンなので、CPUを負荷に合わせてクロック調整するデーモンをしばらく前に停止しました(覚えてないんですが、多分自分でそのようにしたのでしょうね)。
その状態でこのところずっと稼働させてきたわけですが、そしたらサーバマシン本体の発熱がとんでもないことに。でもってそれに伴ってファンがグワングワン回るようになってしまって、うるさいのなんのって。
件のデーモン、つまりcpuspeedですが、これが停止しているだけでそんなに違うものなのでしょうかねぇ・・・と思ったので、同デーモンを停止した状態と稼働した状態でCPUの状況を確認してみることにしました。
まずはcpuspeedをオフにした状態(現状)。
# /etc/init.d/cpuspeed stop
Disabling ondemand cpu frequency scaling: [ OK ]
# cat /proc/cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 16
model : 4
model name : AMD Phenom(tm) II X4 945 Processor
stepping : 3
cpu MHz : 3000.000
cache size : 512 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 4
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 5
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nonstop_tsc extd_apicid pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt npt lbrv svm_lock nrip_save
bogomips : 6027.74
TLB size : 1024 4K pages
clflush size : 64
cache_alignment : 64
address sizes : 48 bits physical, 48 bits virtual
power management: ts ttp tm stc 100mhzsteps hwpstate
(以下略。4コアなのでこれがあと3つ続きます)
cpuspeedをカットしているからでしょう、CPUのクロックはMaxの3GHzになってます。それが4コアなんだからそりゃー暑くもなりますわな・・・。
ついで、cpuspeedをオンにした状態だと・・・。
# /etc/init.d/cpuspeed start
Enabling ondemand cpu frequency scaling: [ OK ]
# cat /proc/cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 16
model : 4
model name : AMD Phenom(tm) II X4 945 Processor
stepping : 3
cpu MHz : 800.000
cache size : 512 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 4
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 5
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nonstop_tsc extd_apicid pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt npt lbrv svm_lock nrip_save
bogomips : 6027.74
TLB size : 1024 4K pages
clflush size : 64
cache_alignment : 64
address sizes : 48 bits physical, 48 bits virtual
power management: ts ttp tm stc 100mhzsteps hwpstate
(以下略)
おぉ、なるほど!これだとちゃんと低負荷に合わせてクロックが800MHzに落とされているじゃありませんか。3000が800なんだから、1/3.75。ものすごく大雑把に考えて、1/4になったということですね!
うちのサーバなんてそもそも高負荷になることなんてまずないんですから、やっぱりcpuspeedは稼働させておかないとダメですね〜(笑)
ちなみにcpuspeedは、/etc/sysconfig/cpuspeedで使用するクロック周波数を指定できるそうです。
同BLOGによれば、自分の使用しているCPUに指定可能なクロック周波数を調べることができます。
# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
3000000 2300000 1800000 800000
ということで、どうやらminで800MHz、maxで3GHzであることがわかりました。
同BLOGによれば、ここで得られた値を/etc/sysconfig/cpuspeedの該当セクションに記述することでcpuspeedのmaxとminを指定できるようになり云々・・・とありましたが、うちではとくにそれらを指定することなくcpuspeedが自動的にCPUのクロック周波数の表示がminとmaxに・・・?
こちらにも明示的に指定しないと有効にならないとあるので、/etc/sysconfig/cpuspeedの該当セクションを確認してみることにしましょう。
### FREQUENCIES ###
# NOTE: valid max/min frequencies for your cpu(s) can be found in
# /sys/devices/system/cpu/cpu*/cpufreq/scaling_available_frequencies
# on systems that support frequency scaling (though only after the
# appropriate drivers have been loaded via the cpuspeed initscript).
# maximum speed to scale up to
# default value: empty (use cpu reported maximum)
MAX_SPEED=
# minimum speed to scale down to
# default value: empty (use cpu reported minimum)
MIN_SPEED=
このMAX_SPEEDとMIN_SPEEDに値を入れるわけですが、デフォルトは空値で、その場合、それぞれmaxとminと報告されたCPU(のクロック周波数)を使用する、とあります。なのでおそらく未記入のままでもよろしいかと(ちゃんと動いてそうな時は、設定を弄らないのがシステム管理の原則!?)
試しにCPUに負荷を与えるコマンドを実行して確認してみました。
# yes > /dev/null &
[1] 6681
# cat /proc/cpuinfo | grep MHz
cpu MHz : 800.000
cpu MHz : 800.000
cpu MHz : 800.000
cpu MHz : 3000.000
yesコマンドはCPUに負荷を与えるコマンドだそうで、複数走らせることもできるとか。とりあえず一つだけ走らせてみたところ、4コアのうちの一つがmaxになりました(しばらく放置してみたら、2コアがmaxになりました)。これで少なくともminとmaxの値を自動的に行き来してくれることはわかりました(^_^)
確認できたらyesコマンドを強制終了(kill)しましょう。忘れると負荷がかかり続けることになっちゃいますからね!(笑)
というわけで、これにて一件落着・・・かな?
・・・おっと、最後に忘れないようにcpuspeedデーモンがマシン起動時に自動的に起動するようにしておかなくちゃ!