打印

[lesswatts.org]Processor(Linux节能技巧)

[lesswatts.org]Processor(Linux节能技巧)

Processor处理器
原文地址:http://www.lesswatts.org/tips/cpu.php
译者:zy_sunshine

Scheduler tunables for multi-socket systems(调度可调的多插槽系统)
多核, 多线程 节能 可调的进程调度:
(译者注:processor packages,一个CPU封装(可能包含多个core)。CPU core,一个封装中的CPU核)
在多核CPU和/或具有多线程处理能力的处理器平台上,在Linux内核进程调度中(从2.6.18版本开始)为节能提供了一对可调节功能。在轻负载的情况下(如,正在运行的任务比系统中可用的逻辑CPU还要少的时候),这些可调节功能可以最大限度的减少CPU封装(processor packages)或多个CPU核心(CPU cores)在执行过程中的负载(carrying the process load)。这样可以使其他在系统中空闲的处理器封装或空闲的处理器核心进入更深的空闲状态,从而节省电能。

(译者注:下面是控制多处理器封装相关的调节,即你的计算机可能是多核,或者多CPU)
位于/sys/devices/system/cpu/下的'sched_mc_power_savings'可调节文件,可以控制多核心(Multi- core)相关的调节。默认情况下,它设置为'0'(为最佳性能)。通过设置这个参数为'1',在轻负载的情况下进程负载是这样分配的:在所有的核心中,process负载在其中一个处理器封装(译者注:这里的处理器封装根据情况可以指一个CPU核心,或者一个处理器封装(有可能包含多个core))中忙碌,在此之前不会分发给其他的处理器封装。

该'sched_mc_power_savings'调节功能,在系统空闲的情况下,可以明显节省大量的电能(成倍的瓦特)。使用下面的命令开启该调节功能:
echo 1 > /sys/devices/system/cpu/sched_mc_power_savings

位于/sys/devices/system/cpu/下的'sched_smt_power_savings'可调节文件可以控制多线程(Multi- threading)相关的调节。默认情况下,它设置为'0'(为最佳性能)。通过设置该文件为'1',在轻负载的情况下process负载是这样分配的:所有的线程封装为一个核心(译者注:此处的核心指的是线程封装的核心),所有的线程封装核心在一个处理器封装中忙碌,在此之前线程封装的 process负载不会分配给其他的处理器封装。

这些节能选项可能会影响某些应用程序的性能。对于某些情况,这些性能上的影响微乎其微。提供这些可调节的选项是希望管理员可以在空闲时间里(此时他们可以忍受一些性能上的影响)使用这些调节参数。如果相应的节能策略在某些特定工作目标的情况下(服务器?)没有影响性能,而且管理员也对此非常感兴趣的时候,也可以默认打开一些这样的选项。
欲了解更多的信息可查看:http://oss.intel.com/pdf/mclinux.pdf

P-states: Frequency control and ondemand-governor
Processor performance states(P-states)(处理器性能状态)是一个预定义的一系列频率和电压的组合,用于处理器控制。随着处理器频率的升高,你可以获得一个更高的性能,但是为了达到这一目标则需要更高的电压(超频?),这使得处理器消耗更多的电能。通过P-states,操作系统可以随时改变功率和性能的平衡点。

虽然从一个电压/频率状态改变到另一个状态会花费一点时间,但在当前的芯片上这点时间实际上是非常短的。在这段时间,根据其他的系统特征,可以确定操作系统应该怎样怎样控制这些电压/频率组合。
在一些较旧的x86处理器以及嵌入式处理器上,会有一些不同的表现,因此Linux内核实现了几种不同的算法来控制(governing支配)不同的处理器工作在最佳的性能状态。
在Linux上控制CPU当前P-state的机制非常有名的软件是CPUFREQ。它需要运行中的内核打开相关功能,以及一些不同的控制算法,这些算法称为governer(调节支配)。当然,现在的发行版默认会打开这些governer,如果你要自己编译内核或者只是想要确定你的系统已经运行在最佳状态,你可以查找一些命令来帮助设置这些。

对于当前的内核。你可以查看/sys/devices/system/cpu/cpu0/cpufreq目录下的文件来寻找正在运行的系统的相关信息。如果这个目录不存在,说明你的内核没有打开CPUFREQ特性。
你可以用下面的命令列出所有可用的governers:
# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
ondemand userspace performance

在上面的例子中有三个governers可用。除了ondemand governer,还有userspace和performance governers

你可以用这个命令来查看当前使用的governer:
# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
ondemand

你也可以通过echo一个可用的governor到scaling_governor文件节点中来改变当前运行的governor:
# echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

对于大多数发行版,适当的P-state governor会在init脚本中被自动加载,这些脚本包括/etc/init.d/powernow , /etc/init.d/cpuspeed 。这些值得检查以确保一致。

如果你正在自己编译内核,你应该确保你至少打开了下面的选项,以获得最优的CPU 频率/功率 控制功能:
CONFIG_CPU_FREQ=y
CONFIG_CPU_FREQ_GOV_ONDEMAND=m
CONFIG_X86_ACPI_CPUFREQ=m
也有一些相关的governor和处理器选项需要打开,但是对于当前系统,上面只是一些必要的设置。
如果/sys/devices/system/cpu/cpu0/cpufreq目录存在,说明CONFIG_CPU_FREQ是打开的。

Power aware interrupt balancing
在系统设备到多核/多处理器上,使用中断(IRQ)平衡技术来分配各种中断。

IRQ平衡不是Linux上的新特性。它是在不同的多个CPU核心之间平衡工作负载的机制。多年来,Linux内核编译中有一个配置选项,可以把自动平衡 IRQ功能编译进Linux内核中。我们不建议你使用该选项。这个功能的实现是相当简单的,而且不是针对当前系统的最优策略。

做好IRQ平衡工作,需要负载平衡策略管理者对处理器或者多核配置有一个很好的了解,这关于到共享缓存和前端总线(FSB)配置以及NUMA拓扑结构。这有一个为Linux解决IRQ平衡的可用的新方案,http://www.irqbalance.org,它是缓存的拓扑结构,同时也关注一些节能方面。它为现代multi-core/multi-socket的系统,提供了一个良好的平衡IRQs的特性。

irqbalance考虑到现代系统新的拓扑结构的原因,在平衡处理中断负荷上做了一个很好的处理工作,同样也在IRQ负荷限度上实现了一个启发式省电模式。当IRQ负载低的时候,它会合并IRQs到一个CPU核心或CPU封装。这样可以帮助在其他的处理器封装上节省大量的电能,通过开启这个性能可以在低的C和P状态上获得更多的优势。

如果你有一个大型的多插槽(multi-socket)(多cpu)系统,运行的工作负载量也不同,我们建议你使用这个新的IRQBALANCE守护进程来帮助你平衡负载。IRQ负载平衡在不是多个插槽(socket)也不是多核的系统上使用是不值得的。

TOP