红联Linux门户
Linux帮助

ArchLinux的CPU和显卡的节能设置

发布时间:2014-12-01 10:25:42来源:linux网站作者:archboy

默认下Arch Linux系统是没有开启电源节能功能,CPU和显卡(指独立显卡,下同)以最大性能运行,而作为家用或者办公用计算机并不总需要最大性能,所以这会造成一定的能源浪费。本文目标有:

查看系统硬件的温度、电压和风扇转速等状态信息。
打开CPU的节能功能。
打开显卡的节能功能。


1、安装 Linux-monitoring sensors (lm_sensors)

这是一个 Linux 下的开源工具,用于监控系统硬件的温度、电压、风扇转速等状态信息。首先安装它:

$ sudo pacman -S lm_sensors

安装完毕之后要进行一次硬件探测:

$ sudo sensors-detect

程序会询问很多问题,一般情况下一路按回车直至完成即可。

现在可以手动启动 lm_sensors 的守护程序:

$ sudo /etc/rc.d/sensors start

然后运行 sensors 显示硬件状态信息:

$ sensors

(注意,上面的 sensors 是一个程序,而 /etc/rc.d/sensors 是一个守护程序控制脚本。)

没问题的话应该可以看到诸如系统温度、显卡温度、CPU电压和温度、风扇转速等信息,大致如下:

k10temp-pci-00c3

Adapter: PCI adapter

temp1: +38.9°C (high = +70.0°C)

(crit = +72.0°C, hyst = +70.0°C)

radeon-pci-0100

Adapter: PCI adapter

temp1: +53.0°C

it8718-isa-0228

Adapter: ISA adapter

in0: +1.14 V (min = +0.00 V, max = +4.08 V)

in1: +1.60 V (min = +0.00 V, max = +4.08 V)

in2: +3.28 V (min = +0.00 V, max = +4.08 V)

+5V: +3.02 V (min = +0.00 V, max = +4.08 V)

in4: +3.09 V (min = +0.00 V, max = +4.08 V)

in5: +3.30 V (min = +0.00 V, max = +4.08 V)

in6: +4.08 V (min = +0.00 V, max = +4.08 V)

in7: +2.11 V (min = +0.00 V, max = +4.08 V)

Vbat: +3.14 V

fan1: 1717 RPM (min = 10 RPM)

fan2: 0 RPM (min = 0 RPM)

fan3: 0 RPM (min = 0 RPM)

fan5: 0 RPM (min = 0 RPM)

temp1: +47.0°C (low = +127.0°C, high = +127.0°C) sensor = thermistor

temp2: +42.0°C (low = +127.0°C, high = +70.0°C) sensor = thermal diode

temp3: +46.0°C (low = +127.0°C, high = +127.0°C) sensor = thermistor

cpu0_vid: +1.050 V

上面数据当中的 +53.0°C 是显卡温度,最后的三个温度应该是CPU相关温度,因为下面准备打开显卡和CPU的节能功能,为了对比效果,可以用笔记下这两项。

最后别忘了将 lm_sensors 守护程序加入 rc.conf ,让系统启动时自动运行。即编辑 /etc/rc.conf 文件,在DAEMONS后面加上“sensors”,如下:

DAEMONS=(syslog-ng dbus networkmanager sensors)


2、打开CPU频率动态调节功能

现在新产的CPU和主板一般支持CPU频率动态调节功能,我们可以通过让系统在任务轻松时降低CPU频率以达到节能目的。这个功能可能叫作“Speedstep, Cool and Quiet, PowerNow!, ACPI.” 等,要先在BIOS里打开此项功能(我的主板是技嘉AMD主板,对应的名称是“Cool and Quiet”)。

然后安装CPU频率调节工具:

$ sudo pacman -S cpufrequtils

下面我们需要载入频率调节的内核模块(驱动),通过下面命令可以查看有哪些内核可用:

$ ls /lib/modules/$(uname -r)/kernel/drivers/cpufreq/

对于 intel CPU 可以尝试:

$ sudo modprobe acpi-cpufreq

对于 AMD CPU 可以尝试:

$ sudo modprobe powernow-k8

假如有错误可以换其他的试试。

一旦载入成功,可以使用 cpufreq-info 命令查看当前CPU状态:

$ cpufreq-info

结果大致如下:

cpufrequtils 008: cpufreq-info (C) Dominik Brodowski 2004-2009

Report errors and bugs to cpufreq@vger.kernel.org, please.

analyzing CPU 0:

driver: powernow-k8

CPUs which run at the same hardware frequency: 0

CPUs which need to have their frequency coordinated by software: 0

maximum transition latency: 8.0 us.

hardware limits: 800 MHz - 2.80 GHz

available frequency steps: 2.80 GHz, 2.10 GHz, 1.60 GHz, 800 MHz

available cpufreq governors: ondemand, conservative, userspace, powersave, performance

current policy: frequency should be within 800 MHz and 2.80 GHz.

The governor "ondemand" may decide which speed to use

within this range.

current CPU frequency is 800 MHz.

上面的数据列出每个CPU(或者核心)的最小和最大频率、可选的频率、当前工作频率以及调速器(Scaling governors)等信息。

其中调速器(Scaling governors)有如下几种:

cpufreq_performance (默认,最大性能)
cpufreq_ondemand (推荐,按需调节)
cpufreq_conservative (也是按需调节,不过较为保守)
cpufreq_powersave (最低频率,节能模式)
cpufreq_userspace (手动模式)

注意调速器也是内核模块,需要先载入才能使用。比如:

$ sudo modprobe cpufreq_ondemand

然后更改各个CPU(或核心)选用的调速器(默认是最大性能):

$ sudo cpufreq-set -c 0 -g ondemand
 
$ sudo cpufreq-set -c 1 -g ondemand
 
$ sudo cpufreq-set -c 2 -g ondemand
 
$ sudo cpufreq-set -c 3 -g ondemand

现在你可以再次运行 cpufreq-info 查看CPU的当前频率和调速器是否正确,过1、2分钟之后再次运行 sensors 查看CPU温度是否有所下降。如果都是的话,则可以把加载的内核模块名称添加到 rc.conf 的 MODULES 一行让系统启动时自动载入,大致如下:

MODULES=(vboxdrv vboxnetflt powernow-k8 cpufreq_ondemand)

最后,因为 cpufreq-set 程序的作用在系统重启后会自动消失,所以需要将掌管它的守护程序 cpufreq 写入到 rc.conf 的 DAEMONS 里,大致如下:

DAEMONS=(syslog-ng dbus networkmanager sensors @cpufreq)

然后修改配置文件 /etc/conf.d/cpufreq,去掉 governor=”ondemand” 一行的注释,内容大致如下:

#configuration for cpufreq control
 
# valid governors:
 
# ondemand, performance, powersave,
 
# conservative, userspace
 
governor="ondemand"
 
# limit frequency range (optional)
 
# valid suffixes: Hz, kHz (default), MHz, GHz, THz
 
#min_freq="2.25GHz"
 
#max_freq="3GHz"
 
# use freq to set up the exact cpu frequency using it with userspace governor
 
#freq=

 
3、降低显卡运作频率

这个操作会根据不同的显卡有所不同,这里只以ATI Radeon HD 5750作为示例说明。我的系统安装了 ATI 开源的显卡驱动 xf86-video-ati,通过如下命令可以查看当前显卡电源管理模式:

$ cat /sys/class/drm/card0/device/power_profile

默认的是“default”,也就是最大性能模式,我们可以把它更改为 auto,low,mid,high 等模式,其中auto是根据是否使用电池供电实指笔记本电脑电池)来自动切换low和high模式,这个对于台式计算机来说是无效的,所以我们如果不是经常运行3D程序的话可以冒进一点设置为low模式。切换到 root 帐号,然后运行下面命令即可;

# echo low>/sys/class/drm/card0/device/power_profile

过1分钟左右使用 sensors 命令查看显卡温度是否有所降低,是的话则说明起效了,然后可以将上面一行命令写入 /etc/rc.local 文件,让系统启动时自动运行。


总结

通过上面的操作一般可以将CPU和显卡温度降低10摄氏度左右,当然也节省不少电能和电费。