06/08/08。 cathayan.org版权所有,保留一切权利。转载请保留此说明。谢绝商业转载。
现在CPU尤其是笔记本用的多数有随时调节运行频率的功能,这样可以在不需要太多计算能力时降低频率运行,省电,减少发热。在Windows平台,微软已经把这件事搞好了,似乎不需要用户干预;但在Linux上还是要自己搞一搞的,也许有些发行版已经设好了。
我这个本是Debian sid,使用cpufreqd来调节,工作得还不错,2GHz的CPU,经常是以800MHz在运行,但上次编译Google gadgets时却发现它不会自动提升速度,编译很需要CPU的也不提。cpufreqd有个设置文件,/etc/cpufreqd.conf,里面设置很明了,大体就是设定几种规则,然后给定条件运行某个规则,比如接外接电源时就用Performance规则等等。但这次我怎么改这个设置,重启数次也没有反应。
后来检查到/etc/init.d下的cpufreqd脚本,才发现另外有一个
cpufrequtils脚本,这个脚本也是自动运行,并且里面直接写了运行哪种方案,也就难怪cpufreqd不能自动调节了。
查了一下,这个cpufrequtils是个单独的包,可能是当初装cpufreqd时就随手装了。又Google了一下,发现它的主页,原来是个简化cpufreqd管理的工具。它自己把想用的规则直接写在脚本里,倒也简单省事,所以决定还是用它。里面主要这四行有用:
ENABLE="true"
GOVERNOR="ondemand"
MAX_SPEED="2000000"
MIN_SPEED="1067000"
意思很明确。重要的就是个governor,也就是管理CPU频率的方案,这个也是核心的不同模块,如下:
acpi-cpufreq
cpufreq_ondemand
cpufreq_userspace
cpufreq_conservative
cpufreq_powersave
这几个模块可以写在/etc/modules里面,然后系统现有哪些governor可用,可以用以下命令列出:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
意思也很明白。Ondemand就是按需分配。
问题在于如果只设了这个ondemand,没有设定最大最小速度,它的工作也不行,可能会一直停留在最低频率上,按道理这个事不应该发生,但我机器上确实如此。所以还必须设定最大最小频率。CPU可用的频率可用如下命令列出:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
比如这台的结果是:2000000 1600000 1333000 1067000 800000 。MHz为单位。把这个数字写到上面的脚本中即可。然后运行:
/etc/init.d/cpufrequtils restart
对CPU速度进行重新设定,工作就正常了。
另一个命令是cpufreq-info,可以列出当前CPU的全面信息,也可以使用。
用这个脚本,另外的cpufreqd.conf就没有用了,倒也省事。想用什么频率,就直接改这个脚本,算是个半自动步枪,比全自动化还可靠些。
06/08/08 14:00:54,由
cathayan发表。目录:
电脑
7条评论
我这里还是不行啊,我在cpufrequtils中设定了
ENABLE="true"
GOVERNOR="conservative"
MAX_SPEED="1667000"
MIN_SPEED="1000000"
但系统重启后默认仍然是“ondemand”,在这个参数下,CPU频率只运行于1667000,这是怎么回事???请帮忙看看,多谢了。
rgaobj 于 06/08/08 22:55:28 发表.
检查几个模块是否都在
可用的Governor/frequency是否正确
/sys/devices/system/cpu/cpu0/cpufreq这个目录下的信息
cpufreq-info的信息
cpufrequtils这个脚本运行没有?自己运行一下?又或者这个脚本是否在cpufreqd之后运行?于是被cpufreqd给盖了?
其他的俄也不知道了
http://blog.cathayan.org/member/1 cathayan 于 06/09/08 09:13:36 发表.
ubuntu里早就缺省配置好这个功能了。
Shiqi 于 06/09/08 11:40:43 发表.
编译 GGL 的时候确实发现过不自动提速的情况,但我怀疑并非 governor 有问题,而可能是 GGL 的那部分编译确实不是 cpu 密集(内存密集?谁知道)操作,因为并非所有编译都这样,编译其他很多东西的时候都会自动提速。
cpufreqd 和 cpufrequtils 是两个具备同样功能的互不依赖的包,单独用哪个都行,混着用没试过。我用的就完全是前者(因为能配置的东西更多一些),留着后一个 的话估计八成是因为舍不得 cpufreq-info 这个命令。
p.s. 单独用 cpufrequtils 同样也是要配置最高和最低频率的,不知道 debain 上的配置文件在哪儿(忘了 apt-get 怎么查某个包的所有文件了),我的发行版是在 /etc/conf.d/cpufreq,内容类似这样
#configuration for cpufreq control
# valid governors:
# ondemand, performance, powersave,
# conservative, userspace
governor="ondemand"
# valid suffixes: Hz, kHz (default), MHz, GHz, THz
min_freq="800MHz"
max_freq="2GHz"
http://lymanrb.spaces.live.com lyman 于 06/10/08 15:13:07 发表.
2.6.24 或者以后的内核都不需要 cpufreqd之类的工具了
只需要保证安装使用:acpi-cpufreq cpufreq_conservative
这两个kernel module就行(用ondemand策略的是cpufreq_ondemand, 其余类推)
然后在rc.local里面加上一行:
echo "conservative" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
(同理,用ondemand策略的,用ondemand替换掉上面的conservative)
// 建议安装powertop看看还有什么其他省电的tweak可以用
http://brucewang.net number5 于 06/10/08 18:43:56 发表.
I am watching and will delete all spam.