13 Jun 2007

电源管理之动态CPU频率

以前从来没有关注过电源管理,但是用了 X31 之后,需要考虑电池使用的时间。

当然,电源管理不光是电池使用时间的问题。当时用 AC 电源的时候,能源损耗也是要考虑的,节约能源就是节约我们的钱袋子 :P 能源损耗过多就会产生过多的热量,这可能导致 1)CPU/GPU 过热引起系统不稳定;2) 风扇狂转。有 2) 有可能引发 a) 风扇损耗过快,换风扇需要你的钱袋子支持;b) 风扇因损耗而产生噪音,这个足以让你心烦意乱。(我现在用的日光灯就狂响不止,烦得很。)

在 laptop 中,让 CPU 根据任务的轻重跑在不同的频率上是重要的电源管理措施。使用这种功能需要 kernel 和 user space 两方面的支持。

I Kernel 中的配置

Kernel 中,Power management 是很重要的一块,目前支持 APM 和 ACPI 两种方式,其中 ACPI 是新的,APM 是要淘汰的。我在 X31 上使用的配置如下:
#
# Power management options (ACPI, APM)
#
CONFIG_PM=y
CONFIG_SOFTWARE_SUSPEND=y
CONFIG_PM_STD_PARTITION="/dev/hda9"

#
# ACPI (Advanced Configuration and Power Interface) Support
#
CONFIG_ACPI=y
CONFIG_ACPI_SLEEP=y
CONFIG_ACPI_SLEEP_PROC_FS=y
CONFIG_ACPI_AC=y
CONFIG_ACPI_BATTERY=y
CONFIG_ACPI_BUTTON=y
CONFIG_ACPI_FAN=y
CONFIG_ACPI_PROCESSOR=y
CONFIG_ACPI_THERMAL=y
CONFIG_ACPI_IBM=y
CONFIG_ACPI_IBM_BAY=y
CONFIG_ACPI_BLACKLIST_YEAR=0
CONFIG_ACPI_EC=y
CONFIG_ACPI_POWER=y
CONFIG_ACPI_SYSTEM=y
CONFIG_X86_PM_TIMER=y

#
# CPU Frequency scaling
#
CONFIG_CPU_FREQ=y
CONFIG_CPU_FREQ_TABLE=y
CONFIG_CPU_FREQ_STAT=m
CONFIG_CPU_FREQ_STAT_DETAILS=y
CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
CONFIG_CPU_FREQ_GOV_USERSPACE=y
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m


#
# CPUFreq processor drivers
#
CONFIG_X86_SPEEDSTEP_CENTRINO=m
CONFIG_X86_SPEEDSTEP_CENTRINO_ACPI=y
CONFIG_X86_SPEEDSTEP_CENTRINO_TABLE=y

这部分需要根据不同机器调节的也就最后的 CPUFreq processor drivers。

II user space 的支持

user space 中我是用的是 cpufreqd,这个包需要 cpufrequtils 的库。如果使用的是 slackware,你可以在 slackbuilds.org 找到这两个包的编译脚本。

我的 cpufreqd 的配置在:
http://jicknan.googlecode.com/svn/trunk/doc/etc/cpufreqd.conf

运行时需要加上 -D 选项,并放在后台:
cpufreqd -D &

你一定会将 cpufreqd 加入自动启动的脚本吧 ;P
--
每一个不曾起舞的日子都是对生命的辜负。

No comments:

Post a Comment