减少Linux耗电:一般设置和与调控器相关的设置

运维 系统运维
我们先来介绍 Linux CPUfreq 子系统的使用设置并提供一些接口选项,看看使用它是多么容易。先讨论一些一般设置......

CPUfreq 的一般设置

我们先来介绍 Linux CPUfreq 子系统的使用设置并提供一些接口选项,看看使用它是多么容易。先讨论一些一般设置:

/sys 接口

cpuspeed 设置文件

cpufreq-utils

使用 /sys 接口

/sys 文件系统为 CPUfreq 提供用户接口,起点是 /sys/devices/system/cpu/。其中一些文件是可写的(由根用户写),其他文件是只读的。

首先,看看 /sys/devices/system/cpu/。在这里会找到每个逻辑 CPU 的目录和 sched_mc_power_savings 可调项,如果在系统上可用的话,还会找到 sched_smt_power_savings 可调项(稍后讨论)。

清单 1. 检查 /sys/devices/system/cpu/ 的内容

[root@systemx ~]# cd /sys/devices/system/cpu/

[root@systemx cpu]# ls

cpu0 cpu1 cpu2 cpu3 cpu4 cpu5 cpu6 cpu7 sched_mc_power_savings

在每个处理器的目录内是一个 cpufreq 目录,它包含 CPUfreq 接口:

清单 2. 检查 cpufreq 目录

[root@systemx cpu]# cd cpu0/cpufreq/

[root@systemx cpufreq]# ls -l

total 0

-r--r--r-- 1 root root 4096 Oct 31 14:53 affected_cpus

-r-------- 1 root root 4096 Oct 31 14:53 cpuinfo_cur_freq

-r--r--r-- 1 root root 4096 Oct 31 14:53 cpuinfo_max_freq

-r--r--r-- 1 root root 4096 Oct 31 14:53 cpuinfo_min_freq

-r--r--r-- 1 root root 4096 Oct 31 14:53 scaling_available_frequencies

-r--r--r-- 1 root root 4096 Oct 31 14:53 scaling_available_governors

-r--r--r-- 1 root root 4096 Oct 31 14:53 scaling_cur_freq

-r--r--r-- 1 root root 4096 Oct 31 14:53 scaling_driver

-rw-r--r-- 1 root root 0 Nov 5 11:44 scaling_governor

-rw-r--r-- 1 root root 4096 Oct 31 14:53 scaling_max_freq

-rw-r--r-- 1 root root 4096 Oct 31 14:53 scaling_min_freq

加入 My developerWorks 上的绿色组

在 GReen IT Report space 和 My developerWorks 上的 Green computing group 讨论与能源、效率和环境相关的主题并分享参考资料。

如果调控器设置为 conservative 或 ondemand,还会在这里看到与调控器同名的目录。我们稍后讨论如何改变调控器。

对于每个调控器,都可以使用这些文件。我们将讨论每个设置的意义以及如何修改它们;然后讨论这个接口之外与调控器相关的一些设置。注意,对于每个处理器,cpufreq 目录下的设置可以不一样,因此要想跨处理器应用一致的策略,就必须按照后面的说明修改每个处理器的设置值。

首先,affected_cpus 显示修改频率会影响哪些处理器。由于硬件和/或软件的关联,一些处理器的频率是相互依赖的,必须同时修改频率。例如,可能会看到这种设置:

清单 3. 检查修改频率会影响哪些处理器

[root@systemx ~]# cd /sys/devices/system/cpu

[root@systemx cpu]# grep . cpu*/cpufreq/affected_cpus

cpu0/cpufreq/affected_cpus:0 1

cpu1/cpufreq/affected_cpus:0 1

cpu2/cpufreq/affected_cpus:2 3

cpu3/cpufreq/affected_cpus:2 3

接下来,cpuinfo_cur_freq 显示处理器当前的运行频率。scaling_cur_freq 文件列出调控器当前使用的扩展频率。

清单 4. 检查频率

[root@systemx cpufreq]# cat cpuinfo_cur_freq

2997000

[root@systemx cpufreq]# cat scaling_cur_freq

2997000

这个接口中列出的所有频率都以 KHz 为单位。

下面一些文件提供可用处理器频率的相关信息。cpuinfo_max_freq 和 cpuinfo_min_freq 文件包含系统可用的***和最小频率;scaling_available_frequencies 显示所有可用频率。

#p#

清单 5. 检查***、最小和可用频率

[root@systemx cpufreq]# cat cpuinfo_max_freq

2997000

[root@systemx cpufreq]# cat cpuinfo_min_freq

1998000

[root@systemx cpufreq]# cat scaling_available_frequencies

2997000 2664000 2331000 1998000

scaling_available_governors 文件列出可用的所有调控器。如果没有看到全部五个调控器,要检查在配置文件中是否启用了所有调控器并确保按第 1 部分中的说明装载了调控器的模块。

清单 6. 检查可用的调控器

[root@systemx cpufreq]# cat scaling_available_governors

ondemand powersave conservative userspace performance

scaling_driver 文件说明系统正在运行哪个 cpufreq 驱动程序。典型的驱动程序包括 acpi、speedstep-smi、speedstep-centrino、powernor_k8、powernow_k7、longhaul 等。如果希望改变驱动程序,需要先卸载正在使用的驱动程序,然后再装载另一个驱动程序。另外,在使用之前,一定要检查驱动程序是否适用于您的处理器。

清单 7. 检查系统正在运行哪个 cpufreq 驱动程序

[root@systemx cpufreq]# cat scaling_driver

centrino

这个目录中的其他文件可以由根用户写,可以通过它们修改一些 cpufreq 设置。这些文件只包含允许用户修改的 powersave 和 performance 调控器设置。其他调控器有更多设置可用,我们在下一节中讨论。

首先,scaling_governor 文件显示当前启用的调控器。要想改变调控器,只需把新调控器的名称 echo 到这个文件中。注意,要想应用一致的策略,必须对每个处理器这么做。例如:

清单 8. 检查启用的调控器并改变调控器

[root@systemx ~]# cd /sys/devices/system/cpu/

[root@systemx cpu]# ls

cpu0 cpu1 cpu2 cpu3 cpu4 cpu5 cpu6 cpu7 sched_mc_power_savings

[root@systemx cpu]# cat cpu0/cpufreq/scaling_governor

performance

[root@systemx cpu]# echo conservative > cpu0/cpufreq/scaling_governor

[root@systemx cpu]# cat cpu0/cpufreq/scaling_governor

conservative

scaling_max_freq 和 scaling_min_freq 文件显示调控器可用的***和最小频率。通过把一个可用的频率 echo 到这些文件中,用户可以修改调控器可用频率的范围。注意,这个频率必须是 scaling_available_frequencies 中列出的频率之一,因为这些是系统可用的所有处理器频率。同样,必须对每个处理器这么做。例如:

清单 9. 修改调控器可用的频率

[root@systemx ~]# cd /sys/devices/system/cpu/

[root@systemx cpu]# cat cpu0/cpufreq/scaling_available_frequencies

2997000 2664000 2331000 1998000

[root@systemx cpu]# cat cpu0/cpufreq/scaling_max_freq

2997000

[root@systemx cpu]# cat cpu0/cpufreq/scaling_min_freq

1998000

[root@systemx cpu]# echo 2331000 > cpu0/cpufreq/scaling_min_freq

[root@systemx cpu]# cat cpu0/cpufreq/scaling_min_freq

2331000

使用 cpuspeed 设置文件

除了像前面提到的那样直接 echo 设置值,用户还可以使用 cpuspeed 设置文件修改驱动程序、调控器、***速度、最小速度、利用率阈值和 ignore_nice_load 设置。RHEL 5.2 附带 cpuspeed,但是其他 Linux 发行版可能不包含这个包。如果您的发行版不包含 cpuspeed,可以 下载 carlthompson.net 版本;README 中提供安装说明。要想使用 cpuspeed 的 RHEL 5.2 版本,只需编辑 /etc/sysconfig/cpuspeed 文件,在文件中设置任何变量值,然后执行以下命令:

/etc/init.d/cpuspeed restart

这个命令会让新设置生效。请记住,必须装载相应的调控器模块,才能开始使用调控器,除非它已经是内置的。

使用 cpufreq-utils

RHEL 5.2 和其他一些发行版还附带 cpufreq-utils 包,它为 CPUfreq 子系统提供另一个用户接口。大多数其他发行版应该也包含这个包。在安装 cpufreq-utils rpm 时,会得到两个实用程序 cpufreq-info 和 cpufreq-set。

cpufreq-info 实用程序列出处理器的相关信息及其 CPUfreq 设置,比如当前频率、频率限制、CPUfreq 驱动程序、当前策略、当前调控器和 affected-cpus 列表。

在启用 userspace 调控器时,cpufreq-set 实用程序让用户可以修改每个处理器的可用频率范围、使用的调控器和当前运行频率。更多信息见 cpufreq-info 和 cpufreq-set 手册页。

与调控器相关的设置

现在讨论用户可以在内核调控器中修改的设置。

powersave 和 performance 调控器

这两个调控器分别把处理器频率静态地设置为***和***频率。用户只能修改前一节中讨论的设置。

userspace 调控器

#p#

现在开始讨论与调控器相关的设置。如果启用 userspace 调控器,还会在 cpufreq 目录中看到 scaling_setspeed 文件,根用户可以写这个文件。这个调控器让用户或用户空间中的程序可以交互地修改处理器频率。用户可以把所需的频率 echo 到这个文件中,一些用户空间守护进程也可以设置这个值。正如对前面讨论的文件所做的,必须修改每个处理器的 scaling_setspeed 文件。

许多守护进程使用 userspace 调控器调整处理器频率;下面是几个例子:

cpudyn(CPU 动态频率控制):这个守护进程根据处理器负载修改基本频率,还可以在没有活动时让磁盘进入备用状态以节省能源。

cpufreqd:这个守护进程可以对电池电压、AC 状态、温度、正在运行的程序、处理器使用量等做出反应。

cpuspeed:这个守护进程可以根据处理器需求、电源变化、温度等改变频率。

powernowd:这个调控器守护进程根据处理器负载改变基本频率,用户可以选择四种行为模式。

ondemand 调控器

如果装载 ondemand 调控器,会在 cpufreq 目录中看到 ondemand 目录。在这个目录中,有许多可调的设置。对于可由根用户写的所有文件,可以通过 echo 新的设置值来修改。注意,对 ondemand 设置的任何修改会应用于整个系统范围,所以不需要为每个处理器修改设置。

清单 10. 检查 ondemand 的可调设置

[root@systemx ~]# cd /sys/devices/system/cpu/cpu0/cpufreq/ondemand/

[root@systemx ondemand]# ls -l

total 0

-rw-r--r-- 1 root root 4096 Nov 19 10:30 ignore_nice_load

-rw-r--r-- 1 root root 4096 Nov 19 10:30 powersave_bias

-rw-r--r-- 1 root root 4096 Nov 19 10:30 sampling_rate

-r--r--r-- 1 root root 4096 Nov 19 10:30 sampling_rate_max

-r--r--r-- 1 root root 4096 Nov 19 10:30 sampling_rate_min

-rw-r--r-- 1 root root 4096 Nov 19 10:30 up_threshold

ignore_nice_load 文件可以设置为 0 或 1(0 是默认设置)。当这个参数设置为 1 时,任何具有 “nice” 值的处理器不计入总处理器利用率。在设置为 0 时,所有处理器都计入利用率。如果运行的某个程序需要大量处理器,但是您不关心运行时间,就可以使用这个设置。如果把 “nice” 设置应用于进程,就可以避免它受到频率调整的影响。

接下来,powersave_bias 文件可以略微改变 ondemand 调控器的行为,它在用户不太关心性能的情况下把目标频率降低指定的百分比,从而节省更多电力。这个设置可以设置为 1 到 1000 之间的值,这会使频率下降百分之 0.1 到***。

sampling_rate(以微秒为单位)决定调控器间隔多长时间检查处理器利用率,以便决定设置什么频率。这个设置必须设置为 sampling_rate_min 和 sampling_rate_max 之间的值。

***,up_threshold 设置允许用户修改***处理器利用率阈值,这个阈值触发处理器频率修改。在默认情况下,up_threshold 值为 80。这意味着,内核将按照 sampling_rate 指定的时间间隔检查处理器利用率,如果超过了百分之 80,调控器会把频率提高到可用的***频率。

conservative 调控器

如果装载 conservative 调控器,会在 cpufreq 目录中看到 conservative 目录。在这个目录中,有许多可调的设置。对于可由根用户写的所有文件,可以通过 echo 新的设置值来修改。注意,对 conservative 设置的任何修改会应用于整个系统范围,所以不需要为每个处理器修改设置。

清单 11. 检查 conservative 的可调设置

[root@systemx ~]# cd /sys/devices/system/cpu/cpu0/cpufreq/conservative/

[root@systemx conservative]# ls -l

total 0

-rw-r--r-- 1 root root 4096 Nov 19 11:31 down_threshold

-rw-r--r-- 1 root root 4096 Nov 19 11:31 freq_step

-rw-r--r-- 1 root root 4096 Nov 19 11:31 ignore_nice_load

-rw-r--r-- 1 root root 4096 Nov 19 11:31 sampling_down_factor

-rw-r--r-- 1 root root 4096 Nov 19 11:31 sampling_rate

-r--r--r-- 1 root root 4096 Nov 19 11:31 sampling_rate_max

-r--r--r-- 1 root root 4096 Nov 19 11:31 sampling_rate_min

-rw-r--r-- 1 root root 4096 Nov 19 11:31 up_threshold

ignore_nice_load、sampling_rate、sampling_rate_max、sampling_rate_min 和 up_threshold 设置与前面讨论的 ondemand 调控器中的设置相同。

conservative 调控器还允许用户设置 down_threshold。例如,在默认情况下 down_threshold 设置为 20。这意味着,内核将按照 sampling_rate 指定的时间间隔检查处理器利用率,如果低于百分之 20,调控器会降低频率。

freq_step 设置修改调控器在调整 CPU 频率时使用的频率步长(包括提高和降低两个方向)。在默认情况下,这个值设置为 5,这意味着,在每次决定调整频率时,调控器调整频率的幅度为***或最小频率的百分之 5。如果把这个值设置为 100,这个调控器的表现会与 ondemand 调控器完全一样。

***,sampling_down_factor 作为 sampling_rate 的乘数,放宽处理器利用率取样的时间间隔。例如,如果 sampling_rate 设置为 10,000,而 sampling_down_factor 设置为 2,那么处理器利用率取样的时间间隔为 20,000 微秒。

调度器可调项

现在,讨论两个调度器可调项 —

sched_mc_power_savings 用于在核上调度进程。

sched_smt_power_savings 用于在核上的超线程上调度进程。

sched_mc_power_savings

sched_mc_power_savings 是 /sys/devices/system/cpu/ 目录中的调度器可调项。如果要使用这个可调项,不要忘了把 CONFIG_SCHED_MC 配置文件选项设置为 y(见 减少 Linux 耗电,第 1 部分:CPUfreq 子系统 中的设置部分)。

清单 12. 检查 sched_mc_power_savings 的位置

[root@systemx ~]# cd /sys/devices/system/cpu/

[root@systemx cpu]# ls -l

total 0

drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu0

drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu1

drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu2

drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu3

drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu4

drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu5

drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu6

drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu7

-rwxrwxr-x 1 root root 4096 Nov 19 09:54 sched_mc_power_savings

sched_mc_power_savings 文件可以设置为 0 或 1;0 是默认设置。在设置为 1 时,调度器尝试在尽可能少的核上调度进程,让其他核可以空闲。换句话说,如果所有处理器都不太忙,那么 sched_mc_power_savings 尝试把工作整合在尽可能少的处理器上。然后就可以让一些处理器空闲,从而进一步节省电力,尤其是在处理器支持 C 状态等深度睡眠状态的情况下(在这种状态下处理器在空闲时只消耗非常少的电力)。实际节省的电力取决于许多因素,包括可用处理器的数量和正在运行哪种 CPUfreq 调控器。当 sched_mc_power_savings 设置为 0 时,不执行特殊的调度。

sched_smt_power_savings

sched_smt_power_savings 可调项也是 /sys/devices/system/cpu/ 目录中的调度器可调项;但是,这个可调项只适用于支持超线程的系统。如果要使用这个可调项,不要忘了把 CONFIG_SCHED_SMT 配置文件选项设置为 y(见第 1 部分中的设置部分)。

清单 13. 检查 sched_smt_power_savings 的位置

[root@systemx ~]# cd /sys/devices/system/cpu/

[root@systemx cpu]# ls -l

total 0

drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu0

drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu1

drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu2

drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu3

drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu4

drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu5

drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu6

drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu7

-rwxrwxr-x 1 root root 4096 Nov 19 09:54 sched_mc_power_savings

-rwxrwxr-x 1 root root 4096 Nov 19 09:54 sched_smt_power_savings

与 sched_mc_power_savings 设置相似,sched_smt_power_savings 文件可以设置为 0 或 1;0 是默认设置。在设置为 1 时,调度器尝试在核上尽可能少的超线程上调度进程,让其他超线程可以空闲,进而通过空闲 C 状态节省电力。

【编辑推荐】

  1. 排除Linux服务器接入故障的七个要素
  2. Linux服务器安装后的优化
  3. 跨平台Linux虚拟服务器配置心得
责任编辑:赵宁宁 来源: chinaitlab
相关推荐

2009-12-16 10:52:47

PSP无线路由设置

2011-07-08 09:42:03

2010-07-16 14:31:11

Linux Telne

2010-08-10 14:51:29

2010-07-27 13:07:23

NFS Server

2020-06-09 08:09:07

机器学习统计学习无监督学习

2009-12-17 15:17:39

设置路由器

2009-12-22 15:25:23

2009-12-16 15:56:05

Cisco路由器配置

2010-08-05 15:54:20

NFSUNIX

2011-09-08 11:35:18

2010-10-08 14:23:08

MySQL中INSER

2017-08-31 14:09:26

数据库MySQLSQL优化

2009-12-01 19:01:34

路由器IP设置

2022-05-07 06:52:04

Edge浏览器技巧

2020-07-07 10:41:34

Chrome省电浏览器

2010-09-14 11:09:36

Linux TFTP服

2023-04-12 11:32:03

2023-04-12 13:55:16

2010-09-01 17:15:45

Linux DHCP
点赞
收藏

51CTO技术栈公众号