うちの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メーカによる違いかな?
