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

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

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

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 或 10 是默认设置)。当这个参数设置为 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 状态节省电力。


相关内容