17.3. CPUfreq 概述
在系统上减少功耗和散热输出的最有效方法是 CPUfreq,在 Red Hat Enterprise Linux 8 中的 x86 和 ARM64 架构的支持。CPUfreq (也称为 CPU 加快扩展)是 Linux 内核中的基础架构,它可以扩展 CPU 频率以省电。
CPU 扩展可根据系统负载、响应高级配置和电源接口(ACPI) 事件进行自动完成,或者由用户空间程序手动完成,并且允许实时调整处理器的时钟速度。这可让系统以较低的时钟速度运行来省电。CPUfreq 调控器定义切换频率(无论是快速还是较慢的时钟速度)的规则。
您可以以 root 用户身份使用 cpupower frequency-info
命令来查看 cpufreq
信息。
17.3.1. CPUfreq 驱动程序
以 root 用户身份使用 cpupower frequency-info --driver
命令,您可以查看当前的 CPUfreq 驱动程序。
以下是可用于 CPUfreq 的两种可用驱动程序:
ACPI CPUfreq
- 高级配置和电源接口 (ACPI) CPUfreq 驱动程序是一个内核驱动程序,它通过 ACPI 控制特定 CPU 的频率,这样可确保内核与硬件之间的通信。
Intel P-state
在 Red Hat Enterprise Linux 8 中,支持 Intel P-state 驱动程序。驱动程序提供了一个界面,用于根据 Intel Xeon E 系列架构或更新的架构控制处理器上的 P-state 选择。
目前,在支持的 CPU 中默认使用 Intel P-state。您可以通过在内核命令行中添加
intel_pstate=disable
命令来切换到 ACPI CPUfreq。Intel P-state 实施
setpolicy()
回调。驱动程序根据cpufreq
内核请求的策略决定使用 P-state 的 P-state。如果处理器可以在内部选择其下一个 P-state,则驱动程序会将这一责任卸载到处理器。如果没有,则驱动程序实施算法来选择下一个 P-state。Intel P-state 提供自己的
sysfs
文件来控制 P-state 选择。这些文件位于/sys/devices/system/cpu/intel_pstate/
目录中。对文件所做的任何更改都适用于所有 CPU。该目录包含以下用于设置 P-state 参数的文件:
-
max_perf_pct
限制驱动程序请求的最大 P-state,以可用性能百分比表示。可以通过no_turbo
设置来减少可用的 P-state 性能。 -
min_perf_pct
限制驱动程序请求的最少 P-state,以最大no-turbo
性能级别表示的百分比。 -
no_turbo
将驱动程序限制为在 turbo frequency 频率范围下选择 P-state。 -
turbo_pct
显示 turbo 范围内硬件支持的总性能百分比。这个号码独立于turbo
已被禁用。 -
num_pstates
显示硬件支持的 P-states 数量。这个号码与 turbo 是否已被禁用无关。
-
其他资源
-
cpupower-frequency-info(1)
man page
17.3.2. Core CPUfreq governors
CPUfreq governor 定义系统 CPU 的电源特征,后者反过来会影响 CPU 性能。每个 governor 在工作负载方面都有自己的独特行为、目的和适用性。以 root 用户身份使用 cpupower frequency-info --governor
命令,您可以查看可用的 CPUfreq governor。
Red Hat Enterprise Linux 8 包括多个 core CPUfreq governor:
cpufreq_performance
- 它强制 CPU 使用最高可能时钟频率。这个频率是静态设置的,不会更改。因此,这一特定监管器不提供节能功能。它只适用于在较长时间内有大量负载,且在 CPU 很少或永不空闲时才出现。
cpufreq_powersave
-
它强制 CPU 使用最低可能的时钟频率。这个频率是静态设置的,不会更改。该 governor 提供最大节能效果,但以最低 CPU 性能为代价。术语 "powersave" 有时可能并不准确,因为在原则上,在一个慢的 CPU 中有完全负载会比一个没有负载的快速 CPU 消耗更多能源。因此,虽然建议将 CPU 设置为在预期的低活动期间使用
powersave
governor,但该期间任何意外的高负载都可能导致系统实际消耗更多电源。Powersave governor 对 CPU 速度的限制比对节能更有效果。这对于可能会有过度负载问题的系统和环境中最有用。 cpufreq_ondemand
-
这是一个动态监管器,您可以使用它启用 CPU 以获得系统负载高时的最大时钟频率,以及系统空闲时的最小时钟频率。虽然这允许系统根据系统负载而相应地调整功耗,但在频率切换之间会牺牲延迟。因此,如果系统在空闲和高工作负载间切换过度频频时,通过
ondemand
governor 获得的性能或节能方面的好处会因为延迟问题而降低。对于大多数系统,ondemand
governor 可以在散热、功耗、性能和可管理性之间提供最佳折衷。当系统只在一天的特定时间段忙碌时,ondemand
governor 会根据负载自动切换最大和最小频率,而不进行进一步的干预。 cpufreq_userspace
-
它允许用户空间程序或以 root 身份运行的任何进程来设置频率。在所有 governor 中,
用户空间
是最可自定义的,具体取决于其配置方式,它可以为您的系统提供在性能和功耗的最佳平衡。 cpufreq_conservative
-
与
ondemand
governor 类似,conservative
governor 还根据使用情况调整时钟频率。但是,conservative
governor 会以更加渐进的方式切换时钟频率。这意味着,conservative
governor 会通过评估对负载的最佳效果来调整时钟频率,而不是只在最大和最小值间进行选择。虽然这可能会在节能方面带来显著效果,但它可能会比ondemand
governor 有更多延迟。
您可以使用 cron
任务启用一个 governor。这可让您在一天的指定时间自动设置特定的 governor。因此,您可以在空闲时间(如工作时间后)指定一个低频率 governor,并在有大量负载时返回到更高频率的调控器。
有关如何启用特定监管器的步骤,请参阅设置 CPUfreq governor。
17.3.3. Intel P-state CPUfreq governor
默认情况下,Intel P-state 驱动程序使用活动模式运行,并带有硬件 p-state (HWP),具体取决于 CPU 支持 HWP。
以 root 用户身份使用 cpupower frequency-info --governor
命令,您可以查看可用的 CPUfreq governor。
与相同名称的内核 CPUfreq governor 相比,performance
和 powersave
Intel P-state CPUfreq governor 的功能是不同的。
Intel P-state 驱动程序可在以下三种不同的模式下运行:
带有硬件管理的 P-states 的活跃模式
当使用 HWP 的活跃模式时,Intel P-state 驱动程序指示 CPU 执行 P-state 选择。驱动程序可以提供频率提示。但是最终选择取决于 CPU 内部逻辑。在带有 HWP 的活跃模式中,Intel P-state 驱动程序提供了两个 P-state 选择算法:
-
performance
:使用performance
governor 时,该驱动程序指示内部 CPU 逻辑性能为面向性能的。允许的 P-states 范围限制为驱动程序允许使用的范围的上限。 -
powersave
:使用powersave
governor,该驱动程序指示内部 CPU 逻辑为节能。
-
没有硬件管理的 P-states 活跃的模式
在使用没有 HWP 的活跃模式中,Intel P-state 驱动程序提供了两个 P-state 选择算法:
-
performance
:使用performance
governor 时,该驱动程序选择允许使用的最大 P-state。 -
powersave
:使用powersave
governor,驱动程序选择 P-states proportional to current CPU 使用率。此行为与ondemand
CPUfreq core governor 类似。
-
被动模式
-
当使用
passive
模式时,Intel P-state 驱动程序的功能与传统的 CPUfreq 扩展驱动程序相同。所有可用的通用 CPUFreq 内核控制器都可使用。
17.3.4. 设置 CPUfreq 调控器
所有 CPUfreq 驱动程序作为 kernel-tools
软件包的一部分构建,并自动选择。要设置 CPUfreq,您需要选择一个监管器。
前提条件
要使用
cpupower
,请安装kernel-tools
软件包:# yum install kernel-tools
流程
查看哪些 governor 可用于特定 CPU:
# cpupower frequency-info --governors analyzing CPU 0: available cpufreq governors: performance powersave
在所有 CPU 上启用其中一个 governor:
# cpupower frequency-set --governor performance
根据您的要求,将
performance
governor 替换为cpufreq
governor 名称。要只在特定内核上启用 governor,请使用
-c
,其范围或以逗号分隔的 CPU 编号列表。例如,要为 CPU 1-3 和 5 启用userspace
governor,请使用:# cpupower -c 1-3,5 frequency-set --governor cpufreq_userspace
如果没有安装 kernel-tools
软件包,可以在 /sys/devices/system/cpu/cpuid/cpufreq/
目录中查看 CPUfreq 设置。可以通过写入这些可调项来更改设置和值。例如,要将 cpu0 的最小时钟速度设置为 360 MHz,请使用:
# echo 360000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
验证
验证 governor 是否已启用:
# cpupower frequency-info analyzing CPU 0: driver: intel_pstate CPUs which run at the same hardware frequency: 0 CPUs which need to have their frequency coordinated by software: 0 maximum transition latency: Cannot determine or is not supported. hardware limits: 400 MHz - 4.20 GHz available cpufreq governors: performance powersave current policy: frequency should be within 400 MHz and 4.20 GHz. The governor "performance" may decide which speed to use within this range. current CPU frequency: Unable to call hardware current CPU frequency: 3.88 GHz (asserted by call to kernel) boost state support: Supported: yes Active: yes
当前策略显示当前启用的
cpufreq
governor。在这种情况下,它的performance
。
其他资源
-
cpupower-frequency-info(1)
和cpupower-frequency-set(1)
man page