組み込むモジュールによってはVCoreが高くなり発熱が増してしまうことがわかった。結論は、デフォルトのacpi-cpufreqモジュールのままが良いということだった。
下ではその手順を記している。
■cpufreqを使うにはCPUに応じたドライバの組み込みが必要
システムの情報を表示
CentOS5.3をわたしは使ってます
[root@localhost ~]# uname -a
Linux localhost.localdomain 2.6.18-128.el5 #1 SMP Wed Jan 21 10:44:23 EST 2009 i686 i686 i386 GNU/Linux
システムがはじめから保存しているモジュールファイルの表示
(2.6.18-128.el5 部分は、システムによって異なります↓)
[root@localhost ~]# ls /lib/modules/2.6.18-128.el5/kernel/arch/i386/kernel/cpu/cpufreq/
acpi-cpufreq.ko powernow-k8.ko
p4-clockmod.ko speedstep-centrino.ko
CPU情報を表示。モバイルペンティアムらしい。
[root@localhost ~]# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 13
model name : Intel(R) Pentium(R) M processor 2.00GHz
stepping : 8
cpu MHz : 1995.189
cache size : 2048 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss tm pbe nx up est tm2
bogomips : 3992.67
◎とりあえず、cpufreqパッケージをインストールします。
[root@localhost ~]# yum install cpufreq-utils
◎自分のCPUに合うモジュールを上のリストから選んで組み込む。
選んだものがCPUに不適切であれば、エラー文が表示されます。
また、これだけではリブートすると組み込みが解除されるようなので、工夫が必要です。(/etc/rc.localに記述しておく等する。後で述べる。)
[root@localhost ~]# modprobe p4-clockmod
また、もし、ここで別に次のようなエラーが表示された場合、
FATAL: Error inserting p4_clockmod (/lib/modules/2.6.18-164.15.1.el5/kernel/arch/i386/kernel/cpu/cpufreq/p4-clockmod.ko): Device or resource busy
すでに別のモジュールが組み込まれているということなので、それを一度取り外す必要がある。
現在組み込まれているモジュールを次のコマンドを使って確認する。
[root@localhost ~]# cpufreq-info
cpufrequtils 005: cpufreq-info (C) Dominik Brodowski 2004-2006
Report errors and bugs to cpufreq@vger.kernel.org, please.
analyzing CPU 0:
driver: acpi-cpufreq ←この先に組み込まれているモジュールを取り外す
CPUs which need to switch frequency at the same time: 0
hardware limits: 800 MHz - 2.00 GHz
available frequency steps: 2.00 GHz, 800 MHz
available cpufreq governors: ondemand, userspace, performance
current policy: frequency should be within 800 MHz and 2.00 GHz.
The governor "userspace" may decide which speed to use
within this range.
current CPU frequency is 2.00 GHz (asserted by call to hardware).
acpi-cpufreqが組み込まれているわけは、cpuspeedというデーモンが動作しているためだった。
そこで、このデーモンを使用停止する。
[root@localhost ~]# chkconfig cpuspeed off
[root@localhost ~]# service cpuspeed stop
[root@localhost ~]# /sbin/modprobe -r acpi-cpufreq ←モジュールの取り外し
[root@localhost ~]# /sbin/modprobe p4-clockmod ←改めて、目的のモジュールを組み込む
◎モジュールを組込みの後でCPUの性能について情報表示を行う。
[root@localhost ~]# cpufreq-info
cpufrequtils 005: cpufreq-info (C) Dominik Brodowski 2004-2006
Report errors and bugs to cpufreq@vger.kernel.org, please.
analyzing CPU 0:
driver: p4-clockmod ←さっき組み込んだドライバ
CPUs which need to switch frequency at the same time: 0
hardware limits: 188 MHz - 1.50 GHz
available frequency steps: 188 MHz, 375 MHz, 563 MHz, 750 MHz, 938 MHz, 1.13 GHz, 1.31 GHz, 1.50 GHz ←モバイルCPUだからなのか188MHzにまでクロックを落とすことができるのだが・・・・・
available cpufreq governors: userspace, performance
current policy: frequency should be within 188 MHz and 1.50 GHz.
The governor "userspace" may decide which speed to use
within this range.
current CPU frequency is 1.50 GHz (asserted by call to hardware).
これでcpufreq-infoが実行できました。
ドライバが正常に動作していることがわかりました。
■負荷に応じたクロックの調整がされるよう設定
/etc/rc.local に、エディタに下のコマンドを付け足し、起動時に自動的に設定されるようにします。
設定したら、リブートします。
#vi /etc/rc.local
/sbin/modprobe p4-clockmod ←上で既出のモジュールの組み込み
/sbin/modprobe cpufreq_conservative ←クロック調整用のモジュールの組み込み(※)
/usr/bin/cpufreq-set -g conservative ←※で組み込んだモジュールを利用するためのコマンド
※クロック調整用のモジュールは、cpufreq_conservative以外にもある。
performance ←いつも最高クロックで走らせる
cpufreq_powersave ←いつも最小クロックで走らせる
cpufreq_ondemand ←負荷に応じてクロックを調整しながら走らせる
cpufreq_conservative ←負荷に応じてクロックをマイルドに調整しながら走らせる
cpufreq_userspace ←ユーザー定義ファイルに準じてクロックを調整しながら走らせる
■ちゃんとクロックが落ちているかどうか確認
CPUに負荷をかけずにしばらく放っておいてから確認します。
[root@localhost ~]# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 13
model name : Intel(R) Pentium(R) M processor 2.00GHz
stepping : 8
cpu MHz : 187.500 ← 188MHzにまで落ちているが・・・・
cache size : 2048 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss tm pbe nx up est tm2
bogomips : 3992.67
★クロックは下がったが・・・温度は下がらず・・・
確かに、クロックは落ちているがちっとも温度が下がらない。
sensorsコマンドでCPUの状態を表示させてみた。すると、VCoreが高くなっていることがわかった。
[root@localhost ~]# sensors
p4_clockmodの場合
w83697hf-isa-0290
Adapter: ISA adapter
VCore: +1.32 V (min = +0.91 V, max = +1.00 V) ALARM
+3.3V: +3.33 V (min = +3.14 V, max = +3.47 V)
+5V: +4.92 V (min = +4.76 V, max = +5.24 V)
+12V: +11.49 V (min = +10.82 V, max = +13.19 V)
V5SB: +5.01 V (min = +4.76 V, max = +5.26 V)
VBat: +3.26 V (min = +2.40 V, max = +3.60 V)
SYSFAN: 0 RPM (min = 1328 RPM, div = 4) ALARM
CPUFAN: 0 RPM (min = 1328 RPM, div = 4) ALARM
SYS: +64°C (high = +50°C, hyst = +37°C) sensor = transistor ALARM
CPU: +79.5°C (high = +45°C, hyst = +30°C) sensor = diode ALARM
alarms:
beep_enable:
Sound alarm disabled
そこで、組み込んだモジュールを取り外し、cpuspeedデーモンを再び動作させてみた。
そうして、CPUの状態を表示させてみる。
[root@localhost ~]# sensors
acpi-cpufreqの場合
w83697hf-isa-0290
Adapter: ISA adapter
VCore: +0.96 V (min = +0.91 V, max = +1.00 V) ←電圧が下がった!
+3.3V: +3.34 V (min = +3.14 V, max = +3.47 V)
+5V: +4.97 V (min = +4.76 V, max = +5.24 V)
+12V: +11.49 V (min = +10.82 V, max = +13.19 V)
V5SB: +5.03 V (min = +4.76 V, max = +5.26 V)
VBat: +3.25 V (min = +2.40 V, max = +3.60 V)
SYSFAN: 0 RPM (min = 1328 RPM, div = 4) ALARM
CPUFAN: 0 RPM (min = 1328 RPM, div = 4) ALARM
SYS: +63°C (high = +50°C, hyst = +37°C) sensor = transistor ALARM
CPU: +71.0°C (high = +45°C, hyst = +30°C) sensor = diode ALARM
alarms:
beep_enable:
Sound alarm disabled
結論としては、p4_clockmodではなく、acpi-cpufreqのまま使用した方が良いことがわかった。
ただし、クロックはあまり落ちない。
しかし温度こそ低いほうが良い。
acpi-cpufreqが示すCPU情報
[root@localhost ~]# cpufreq-info
cpufrequtils 005: cpufreq-info (C) Dominik Brodowski 2004-2006
Report errors and bugs to cpufreq@vger.kernel.org, please.
analyzing CPU 0:
driver: acpi-cpufreq
CPUs which need to switch frequency at the same time: 0
hardware limits: 800 MHz - 2.00 GHz
available frequency steps: 2.00 GHz, 800 MHz
available cpufreq governors: ondemand, conservative, userspace, performance
current policy: frequency should be within 800 MHz and 2.00 GHz.
The governor "ondemand" may decide which speed to use
within this range.
current CPU frequency is 800 MHz (asserted by call to hardware).