CentOS5でML115のCPU周波数制御

うちのML115はOpteron1210(1.8GHz)を載せているが、CentOSをいれてそのままの状態では常に1.8GHzで動いていて電気代がもったいない。冬場はサーバ室(=寝室)がいつもほのかに暖かくて気にしなかったが、この猛暑ではさすがに耐えられなくなった。そこで、CPU周波数を負荷状態にあわせて変えられるようにする。

じつはその程度のことはOSをインストールしたら設定されていると思い込んでいたのだが、cat /proc/cpuinfoなどを見てもいつも1.8GHzなので不審に思っていたのだ。Linuxの世界では思い込み(盲信)はいかんなぁ。

まず、dmesgをながめて、AMDのPowerNow!という機能が認識されていることを確認する。

powernow-k8: Found 2 Dual-Core AMD Opteron(tm) Processor 1210 processors (2 cpu 
cores) (version 2.20.00)
powernow-k8:    0 : fid 0xa (1800 MHz), vid 0xa
powernow-k8:    1 : fid 0x2 (1000 MHz), vid 0x12

CPU周波数関係の設定は以下のパスで確認・操作できる。

[root@ml115 ~]# cd /sys/devices/system/cpu/cpu0/cpufreq/
[root@ml115 cpufreq]# ls
affected_cpus     ondemand                       scaling_driver
cpuinfo_cur_freq  scaling_available_frequencies  scaling_governor
cpuinfo_max_freq  scaling_available_governors    scaling_max_freq
cpuinfo_min_freq  scaling_cur_freq               scaling_min_freq
[root@ml115 cpufreq]# 

まず現在のCPU周波数を確認する。1.8GHzになっている。

[root@ml115 cpufreq]# cat scaling_cur_freq 
1800000

次に設定可能なCPU周波数を確認する。このCPUではこまかく制御できず2段階のようだ。

[root@ml115 cpufreq]# cat scaling_available_frequencies 
1800000 1000000

次に現在のCPU切り替えモードを確認する。パフォーマンス優先になっている。

[root@ml115 cpufreq]# cat scaling_governor 
performance

なお、設定可能なモードは以下のファイルに記述されている。

[root@ml115 cpufreq]# cat scaling_available_governors 
ondemand userspace performance 

動作モードをperformanceからondemandに変えることによって、CPU周波数を負荷状況に応じて変えることができる。なおuserspaceにするとユーザ(もしくはプログラム)が随時変更することができるようになる。

[root@ml115 cpufreq]# echo 'ondemand' > scaling_governor 
[root@ml115 cpufreq]# cat scaling_governor 
ondemand

再度、現在のCPU周波数を確認する。1GHzに下がっている。

[root@ml115 cpufreq]# cat scaling_cur_freq 
1000000

ちなみにOpteron1210はデュアルコアだが、上記のようにCPU0だけ設定変更をしたらCPU1も同様に設定変更が反映されていた。

さて、ここまで調べてきて実はこの設定はCentOS5の標準の設定ファイルで指定できることがわかった(泣)。/etc/sysconfig/cpuspeedで設定をして、cpuspeedというデーモンを立ち上げると自動的に設定してくれる。

[root@ml115 ~]# cat /etc/sysconfig/cpuspeed | grep GOVERNOR
### GOVERNOR ###
# - The GOVERNOR parameter is only valid on centrino and powernow-k8 (amd64)
GOVERNOR=ondemand

それ以外にも設定パラメータはあるのだが、他はデフォルト(空白)のままで大丈夫だった。ちなみに同じCentOS5をいれたThinkPad R60eはなにもしなくてもデフォルトでondemandになる。CPUメーカによる違いかな?