Search This Blog

Saturday, February 18, 2006

P4也可以cpufreq!

在家试了一下powernow的威力,非常适合我这种24小时不关机的人,能省不少电呢,当然,不开机更省,呵呵
回学校来又开始折腾(我总是倾向于让我的电脑都有同一个环境,这样至少当我分别在家和在学校时,不需要改变我的习惯),于是看到文档里说cpufreq也能用在P4上,那当然要用。
编译内核基本上和athlon64的时候一样,只是cpu换成了P4,对应的cpufreq的模块换成了,具体如下:
[*] CPU Frequency scaling
│ │ [ ] Enable CPUfreq debugging
│ │ < *> CPU frequency translation statistics
│ │ [*] CPU frequency translation statistics details
│ │ Default CPUFreq governor (performance) --->
│ │ --- 'performance' governor
│ │ 'powersave' governor
│ │ 'userspace' governor for userspace frequency scaling
│ │ 'ondemand' cpufreq policy governor
│ │ <> 'conservative' cpufreq governor
│ │ --- CPUFreq processor drivers
│ │ < *> ACPI Processor P-States driver
│ │ <> AMD Mobile K6-2/K6-3 PowerNow!
│ │ <> AMD Mobile Athlon/Duron PowerNow!
│ │ <> AMD Opteron/Athlon64 PowerNow!
│ │ <> Cyrix MediaGX/NatSemi Geode Suspend Modulation
│ │ <> Intel Enhanced SpeedStep
│ │ <> Intel Speedstep on ICH-M chipsets (ioport interface)
│ │ <> Intel SpeedStep on 440BX/ZX/MX chipsets (SMI interface)
│ │ Intel Pentium 4 clock modulation
│ │ <> nVidia nForce2 FSB changing
│ │ <> Transmeta LongRun
│ │ <> VIA Cyrix III Longhaul
│ │ --- shared options
│ │ [ ] /proc/acpi/processor/../performance interface (deprecated)


有了支持cpufreq的内核以后基本上就成功一半了
然后安装三个额外的包:
#apt-get install acpid cpufreqd cpufrequtils
这里插一句,据说powernowd也是支持P4的,不过我没试过,谁有兴趣可以试一下
这三个包装好后就有一个完整的环境了,如果图方便的话,重启一下,不过,重启是window$的德性,还是手动吧
其实本来不用手动启动的,因为包的安装脚本会帮我们启动,不过acpid不能在X环境下启动,会提示资源或设备忙,所以可以先退出X,启动acpid以后再进X,当然,如果不用X的话就不用这么麻烦了
接下去就只剩最后一步了,配置一下/etc/cpufreqd.conf
默认的配置似乎是针对笔记本的,什么ac=on,ac=off的
先简单介绍一下cpufreqd.conf
这个文件由一系列的section组成,分别是gerneral,profile和rule
gerneral部份是总的设置,需要改的是把以下两行的注释去掉
# enable_remote=1
# remote_group=root

不然的话cpufreqd-get和cpufreqd-set就无法工作
然后是profile,这个部份为rule提供一些模板
name是profile的名字,随便你喜欢,可以有空格,不能重复
minfreq是本profile下CPU的最低工作频率,百分数表示
maxfreq以此类推
policy 这个能使用的选项取决于 /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors,cat一下就有 了,而它又取决于刚才编译内核时的几个选项,分别是userspace,ondemand,performance和powersave
other plugin entries放到下面一起说
最后是rule,rule比较复杂一点
name是rule的名字,和profile的name差不多
profile是符合该rule时所使用的profile的name
other plugin entries提供匹配一个rule的机制,我只说几个比较有用的,详细的可以man cpufreqd.conf,acpi_temperature plugin用来匹配CPU的温度,当然这也需要内核的支持,可以参考我前面powernow的文章,比如说当CPU温度高于50度时让CPU稍微休息一 下,就这样匹配:acpi_temperature=50-100,cpu plugin用来匹配CPU的使用率,比如可以用cpu_interval=50-100和刚才的acpi_temperature=50-100一起来 匹配CPU过热,programs plugin可以匹配一个程序,这样就可以在看电影或者编译软件时让CPU以最高频率跑起来,这样写:programs=xxx,有不止一个程序的话用逗 号间隔,基本上这些就够用了,如果还是不明白就对照着默认的配置文件,再看看manual,应该很容易就搞定了

这些都完成以后,让cpufreqd重启一下:
#/etc/init.d/cpufreqd restart
可以运行一下cpufreqd-get查看当前的状态,下面是我的结果:
root@huzhou:/home/cxl# cpufreqd-get
socket I'll try to connect: /tmp/cpufreqd-zRGa6x/cpufreqd


Name (#1): On Demand High *
Governor: ondemand
Min freq: 1499962
Max freq: 2399940


Name (#2): On Demand Low
Governor: ondemand
Min freq: 899977
Max freq: 1799955


Name (#3): Performance High
Governor: performance
Min freq: 2399940
Max freq: 2399940


Name (#4): Performance Low
Governor: performance
Min freq: 1799955
Max freq: 1799955


Name (#5): Powersave High
Governor: powersave
Min freq: 1799955
Max freq: 1799955


Name (#6): Powersave Low
Governor: powersave
Min freq: 599985
Max freq: 599985


可以再看一下/etc/proc/cpuinfo
root@huzhou:/home/cxl# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 15
model : 2
model name : Intel(R) Pentium(R) 4 CPU 2.40GHz
stepping : 7
cpu MHz : 1493.971
cache size : 512 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 sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe cid xtpr
bogomips : 4784.88


可以看到频率已经降下来了
不过我的sensors显示核心电压并没有下降,目前为止我还不知道是怎么回事:)

No comments: