现代x86处理器提供两种机制来降低空闲时的功耗。这对于便携式电脑很有用,对于工作负载有限的物理服务器也有帮助。
但是,不要考虑虚拟机,不包含它们。
在x86体系结构中,定义了几个被称为C状态(C-states)的CPU状态,允许系统通过降低CPU功能来节省功耗。这些C-状态在处理器之间大致相似,但具体细节可能会有所不同。
C0:处理器照常工作。
C1:处理器不执行任何指令,但可以立即重新开始工作。
C2:处理器停止运行,但保持寄存器和缓存的完整状态。处理器需要延迟才能重新开始工作。
C3:处理器正在休眠,没有保存缓存。处理器重新开始工作需要比C2状态更长的延迟。
CPU频率或CPU速度的调整,是通过调整处理器的时钟速度来降低功耗的一种方法。
RHEL 7 有五个中央处理器频率调速器:
性能(performance):使用这种静态调节器,您可以获得尽可能高的时钟频率,但没有任何省电优势。它最适合于CPU几乎从不空闲的繁重工作负载。
省电(powersave):在这种情况下,您的中央处理器可以获得最低的时钟频率,但代价是最低的中央处理器性能。这种静态调节器的一个严重缺点发生在系统遇到意外的高负载时:在这种情况下,它比其他时钟频率更高的调节器消耗更多的功率。因此,不建议使用它,除非过热是个问题。
按需(ondemand):该动态调节器设置系统负载高时的最大时钟频率和空闲时的最小时钟频率,但没有中间状态。这允许系统根据系统负载调整功耗,但代价是延迟。如果在空闲和繁重工作负载之间切换太频繁,性能和节能可能会受到影响。否则,这是最好的选择之一。
用户模式(userspace):有了这个调控器,任何以root身份运行的进程都可以设置时钟频率。
保守(conservative):这种动态调速器非常类似于按需调速器,只是它会逐渐调整时钟频率。它不是在最大和最小时钟频率之间进行选择,而是根据用途选择时钟频率。这种更细粒度的方法显著节省了功耗,但代价是比按需调控器的延迟更长。
安装内核工具包以访问cpupower命令:
# yum install -y kernel-tools
注意:操作中央处理器控制器并不严格需要内核工具包和cpupower命令。它们只提供了一个方便的接口。所有操作都可以使用/sys/devices/system/cpu/
路径和echo命令来完成。
基本操作
要获取0号CPU支持的各种空闲状态列表(各种类型的服务器都有可用的空闲状态),请键入:
# cpupower idle-info
CPUidle driver: intel_idle
CPUidle governor: menu
analyzing CPU 0:
...
Available idle states: POLL C1E-ATM C2-ATM C4-ATM C6-ATM (Atom CPU N2800)
Available idle states: POLL C1-IVB C1E-IVB C3-IVB C6-IVB (Xeon CPU E3-1245 V2)
Available idle states: POLL C1-NHM C1E-NHM C3-NHM C6-NHM (Core i5 CPU M 430)
Available idle states: POLL C1-HSW C1E-HSW C3-HSW C6-HSW C7s-HSW C8-HSW C9-HSW C10-HSW (Celeron 2961Y)
...
要获取服务器上所有CPU的相同信息,请键入:
# cpupower -c all idle-info
注:-c选项可以替换为–CPU。
要获取0号CPU的可用控制器列表,请键入:
# cpupower frequency-info -g
analyzing CPU 0:
available cpufreq governors: conservative userspace powersave ondemand performance
注:g选项可以替换为–governors。
要获取0号CPU可用CPU频率的所有详细信息,请键入:
# cpupower frequency-info
analyzing CPU 0:
driver: acpi-cpufreq
CPUs which run at the same hardware frequency: 0
CPUs which need to have their frequency coordinated by software: 0
maximum transition latency: 10.0 us
hardware limits: 1.20 GHz - 2.27 GHz
available frequency steps: 2.27 GHz, 2.27 GHz, 2.13 GHz, 2.00 GHz, 1.87 GHz, 1.73 GHz, 1.60 GHz, 1.47 GHz, 1.33 GHz, 1.20 GHz
available cpufreq governors: conservative userspace powersave ondemand performance
current policy: frequency should be within 1.20 GHz and 2.27 GHz.
The governor "conservative" may decide which speed to use
within this range.
current CPU frequency: 1.20 GHz (asserted by call to hardware)
boost state support:
Supported: yes
Active: yes
1900 MHz max turbo 2 active cores
1900 MHz max turbo 1 active cores
注1:如果没有-c选项,则只显示关于中央处理器号0的信息。
注2:调速器保守(conservative)是当前配置。
要将调速器更改为所有CPU的性能,请键入:
# cpupower frequency-set -g performance
Setting cpu: 0
Setting cpu: 1
Setting cpu: 2
Setting cpu: 3
注1:如果没有-c选项,所有CPU都会受到影响。
注2:要仅更改0、1和2号CPU,请键入:# cpupower -c 0-2 frequency-set -g performance
注3:g选项可以替换为–调速器。
# cpupower -c all frequency-info
...
current policy: frequency should be within 1.20 GHz and 2.27 GHz.
The governor "performance" may decide which speed to use
within this range.
...
要为中央处理器频率为1.2千兆赫的1号中央处理器指定调速器用户空间,请键入:
# cpupower -c 1 frequency-set -f 1.2
Setting cpu: 1
# cpupower -c 1 frequency-info -p
analyzing CPU 1:
current policy: frequency should be within 1.20 GHz and 2.27 GHz.
The governor "userspace" may decide which speed to use
within this range.
# cpupower -c 1 frequency-info -f
analyzing CPU 1:
current CPU frequency: 1199000 (asserted by call to kernel)
# cpupower -c 1 frequency-info --hwlimits
analyzing CPU 1:
hardware limits: 1.20 GHz - 2.27 GHz
注意:只有调速器用户空间允许设置频率。
之前看到的所有命令在重新启动后都不会持续。以持久方式设置CPU调速器的标准方法是通过已调守护程序和调控器指令(或者,使用rc.local仅在已调服务被禁用时有效)。
如果我们查看吞吐量-性能优化配置文件(/usr/lib/tuned/throughput-performance/tuned.conf),我们可以看到:
...
[cpu]
governor=performance
energy_perf_bias=performance
min_perf_pct=100
...
注意:energy_perf_bias指令允许支持的英特尔处理器上的软件更积极地帮助确定最佳性能和节能之间的平衡。
因此,如果您想要定义一个特定的配置,请在/etc/tuned目录中使用优化的继承机制创建一个新的优化配置文件(请参见优化教程):
[main]
include=throughput-performance
[cpu]
...
行为分析
要更好地理解系统的行为方式,请安装powertop软件包:
# yum install -y powertop
然后,运行powertop命令:
# powertop
PowerTOP 2.3 Overview Idle stats Frequency stats Device stats Tunables
Summary: 528.4 wakeups/second, 0.0 GPU ops/seconds, 0.0 VFS ops/sec and 4.1% CPU use
Usage Events/s Category Description
2.2 ms/s 177.5 Interrupt PS/2 Touchpad / Keyboard / Mouse
445.2 us/s 44.4 Timer tick_sched_timer
3.4 ms/s 39.2 Interrupt [27] nvkm
318.1 us/s 29.2 Timer hrtimer_wakeup
137.7 us/s 19.4 Process [rcu_sched]
...
通过按tab键,您可以访问不同类型的信息(更多详细信息请参阅powertop手册):
“概述(Overview)”选项卡显示系统的一般状态。
“空闲状态(Idle stats)”选项卡显示系统中当前加载的CPU和GPU与其C状态的关系。
“频率统计(Frequency)”选项卡显示了系统与空闲状态之间的关系。
“设备统计(Device stats)”选项卡显示系统中消耗最多电能的设备列表。
“可调参数(Tunables)”选项卡列出了系统上存在的设备。您可以通过将每个项目从坏切换到好来调整系统,使其电源友好。
资料来源:RHEL 7电源管理指南。
英文原文:https://www.certdepot.net/rhel7-get-started-cpu-governor/