11 电源管理REPORT DOCUMENTATION BUG

电源管理旨在减少能源和散热系统的运行成本,同时使系统性能始终保持在符合当前要求的水平。因此,电源管理始终涉及在系统的实际性能需求与节能选项之间进行平衡。可在系统的不同级别实施和使用电源管理。高级配置和电源接口 (ACPI) 中已经定义了设备电源管理功能及其操作系统接口的一组规范。由于在服务器环境中的节能主要在处理器级别实现,因此本章将介绍一些主要概念,并将重点放在用于分析和影响相关参数的一些工具上。

11.1 CPU 级别的电源管理REPORT DOCUMENTATION BUG

在 CPU 级别,可以通过多种方式控制电源的使用。例如,通过使用空闲电源状态(C 状态)、更改 CPU 频率(P 状态)和限制 CPU(T 状态)进行控制。下列章节提供了每种方法的简短介绍及其对节能的重要性。在 http://www.acpi.info/spec.htm 上可以找到详细规范。

11.1.1 C 状态(处理器运行状态)REPORT DOCUMENTATION BUG

现代处理器有称为 C-state 的若干节能模式。它们反映了空闲处理器关闭不使用的组件以实现节能的能力。

当某个处理器处于 C0 状态时,表示它正在执行指令。在任何其他 C 状态下运行的处理器都处于空闲状态。C 后面的数字越大,CPU 休眠模式越深:将关闭更多的组件,以节省电源。深度休眠状态可以节省大量能源。缺点是会造成延迟。即,CPU 需要花费更长时间恢复到 C0。根据工作负载(唤醒线程,触发 CPU 的使用,然后再次短时间进入休眠状态)和硬件(例如网络设备的中断活动),禁用最深度休眠状态能够显著提升总体性能。有关操作细节,请参见第 11.3.2 节 “使用 cpupower 查看内核空闲统计”。

某些状态还包括一些具有不同节能延迟级别的子模式。支持哪些 C 状态和子模式取决于相应的处理器。但是,C1 始终可用。

表 11.1 “C 状态”概述了最常见的 C 状态。

表 11.1︰ C 状态REPORT DOCUMENTATION BUG

方式

定义

C0

运行状态。CPU 完全开启。

C1

第一种空闲状态。通过软件停止 CPU 主要内部时钟。总线接口单元和 APIC 保持全速运行。

C2

通过硬件停止 CPU 主要内部时钟。在此状态下,处理器会保留所有软件可见状态,但通过中断唤醒时可能需要更长时间。

C3

停止所有 CPU 内部时钟。处理器不需要保持其缓存的连贯性,但需要维持其他状态。某些处理器的 C3 状态存在差异,不同体现在通过中断将处理器唤醒所需的时间长短。

为了避免不必要的电源消耗,建议分别在启用和禁用深度休眠状态的情况下对工作负载进行测试。有关详细信息,请参见第 11.3.2 节 “使用 cpupower 查看内核空闲统计”或 cpupower-idle-set(1) 手册页。

11.1.2 P 状态(处理器性能状态)REPORT DOCUMENTATION BUG

当处理器运行时(处于 C0 状态),它可能处于多个 CPU 性能状态(P 状态)的其中之一。C 状态反映空闲状态(除 C0 外全部处于空闲状态),而 P 状态则是反映与 CPU 频率和电压相关的运行状态。

P 状态数字越大,处理器的运行频率和电压越低。P 状态的数字与特定的处理器相关,在不同类型的实施方式各不相同。但是,P0 始终是性能最高的状态(第 11.1.3 节 “Turbo 功能”中所述的情况除外)。P 状态的数字越大,表示处理器速度越慢,电源消耗越低。例如,与在 P1 状态下运行的处理器相比,处于 P3 状态的处理器运行速度更慢,消耗的电源更少。要以任何 P 状态运行,处理器必须处于 C0 状态,这意味着它正在工作而不是处于空闲状态。ACPI 规范中还定义了 CPU P 状态,具体请参见 http://www.acpi.info/spec.htm。

可以单独改变 C 状态和 P 状态。

11.1.3 Turbo 功能REPORT DOCUMENTATION BUG

使用 Turbo 功能可以在其他核心处于深度休眠状态时,动态 overtick 活动的 CPU 核心。这可以在提高活动线程性能的同时仍符合热设计功耗 (TDP) 的限制。

但是,CPU 核心可以使用睿频的条件与特定的体系结构相关。在第 11.3 节 “cpupower 工具”中了解如何评估这些新功能的有效性。

11.2 内核中调节器REPORT DOCUMENTATION BUG

内核中调节器属于 Linux 内核 CPUfreq 基础结构,可用于在运行时动态调整处理器频率。您可将调节器视为 CPU 的某种预配置电源模式。CPUfreq 调节器使用 P 状态来更改频率和降低电源消耗。动态调节器可以根据 CPU 使用率切换 CPU 频率,以便在不牺牲性能的情况下实现节能。

以下调节器可用于 CPUfreq 子系统:

性能调节器

将 CPU 频率静态设置为可能的最高频率,以实现最佳性能。因此,节能不是此调节器的重点。

另请参见 第 11.4.1 节 “P 状态的微调选项”.

节能调节器

将 CPU 频率静态设置为可能的最低频率。这会对性能造成严重影响,因为不管处理器有多忙,系统都不会超过此频率运行。一个重要的例外是 intel_pstate,它默认采用节能模式。这是硬件特定的决策使然,但在功能上其运行方式与按需调节器类似。

但是,使用此调节器通常不会产生预期的节能效果,因为往往是在进入 C 状态后处于空闲状态时才能实现最大节能。使用节能调节器时,处理器将以最低的频率运行,因此需要更长的时间才能完成。这意味着,它会运行更长时间,直到系统能够进入空闲 C 状态为止。

微调选项:可以调整调节器可用的最小频率范围(例如,使用 cpupower 命令行工具)。

按需调节器

动态 CPU 频率策略的内核实施:此调节器会监视处理器使用率。使用率超过特定阈值时,调节器会将频率设置为可用的最高频率。如果使用率低于阈值,将使用下一个最低频率。如果系统还是处于利用率低的状态,则再次降低频率,直到设置最低可用频率为止。

重要:驱动程序和内核中调节器

并非所有驱动程序都会使用内核中调节器在运行时动态调整电源频率。例如 intel_pstate 驱动程序会自我调整电源频率。使用 cpupower frequency-info 命令可以确定系统使用的驱动程序。

11.3 cpupower 工具REPORT DOCUMENTATION BUG

cpupower 工具旨在提供给定计算机上支持的所有 CPU 电源相关参数的概述,包括睿频(或加速)状态。使用该工具集可以查看和修改内核相关的 CPUfreq 和 cpuidle 系统的设置,以及与频率调整或空闲状态无关的其他设置。集成式监视框架可以访问内核相关的参数和硬件统计。因此,它非常适用于性能评测。另外,它还可帮助您识别睿频状态与空闲状态之间的依赖性。

安装 cpupower 软件包后,使用 cpupower --help 查看可用的 cpupower 子命令。使用 man cpupower 可访问一般手册页,使用 man cpupower-SUBCOMMAND 可访问子命令的手册页。

11.3.1 使用 cpupower 查看当前设置REPORT DOCUMENTATION BUG

cpupower frequency-info 命令显示内核中使用的 cpufreq 驱动程序的统计。此外,它还会显示 BIOS 中是否支持和启用了睿频(或加速)状态。如果不带任何选项运行,它将显示如下输出:

例 11.1︰ cpupower frequency-info 的示例输出REPORT DOCUMENTATION BUG

root #

COPY

要获取所有 CPU 的当前值,请使用 cpupower -c all frequency-info。

11.3.2 使用 cpupower 查看内核空闲统计REPORT DOCUMENTATION BUG

idle-info 子命令显示内核中使用的 cpuidle 驱动程序的统计。它可以在使用 cpuidle 内核框架的所有体系结构上运行。

例 11.2︰ cpupower idle-info 的示例输出REPORT DOCUMENTATION BUG

root #

COPY

使用 cpupower idle-info 找出支持的处理器空闲状态后,可以使用 cpupower idle-set 命令禁用单个状态。通常,用户希望禁用最深度的休眠状态,例如:

root #

COPY

或者,禁用延迟等于或高于 80 的所有 CPU:

root #

COPY

11.3.3 使用 cpupower 监视内核和硬件统计REPORT DOCUMENTATION BUG

使用 monitor 子命令可以报告处理器拓扑,以及监视特定时间段内的频率和空闲电源状态统计。默认间隔为 1 秒,但可以使用 -i 来更改。工具中实施有独立的处理器休眠状态和频率计数器 — 其中一些可从内核统计中检索,另一些可从硬件寄存器中读取。可用的监视器取决于底层硬件和系统。使用 cpupower monitor -l 可以列出这些监视器。有关各个监视器的说明,请参见 cpupower-monitor 手册页。

monitor 子命令可让您执行性能评测。要将特定工作负载的内核统计与硬件统计进行比较,请串联相应的命令,例如:

cpupower
monitor

COPY

例 11.3︰ cpupower monitor 示例输出REPORT DOCUMENTATION BUG

root #

COPY

1

Mperf 显示 CPU 在一段时间内的平均频率,包括加速频率。此外,它还会显示 CPU 处于活动状态 (C0) 或任意休眠状态 (Cx) 的时间百分比。由于睿频状态由 BIOS 管理,因此无法获取给定瞬间的频率值。在具备睿频功能的新式处理器上,只能通过 Mperf 监视器找出特定 CPU 的运行频率的信息。

2

Idle_Stats 显示 cpuidle 内核子系统的统计。每当进入或退出空闲状态,内核都会更新这些值。因此,当测量开始或结束时如果核心处于空闲状态已有一段时间,这些值可能会有点不准确。

除了上述示例中所述的(一般)监视器以外,还可以使用其他体系结构特定的监视器。有关详细信息,请参见 cpupower-monitor 手册页。

通过比较各个监视器的值,可以找到关联性和依赖关系,并评估节能机制对于特定工作负载的效果。在例 11.3 中可以看到,CPU 0 处于空闲状态(Cx 的值接近 100%),但其运行频率却非常高。这是因为,CPU 0 和 1 的频率值相同,这意味着两者之间存在某种依赖关系。

11.3.4 使用 cpupower 修改当前设置REPORT DOCUMENTATION BUG

您可以 root 身份使用 cpupower frequency-set 命令来修改当前设置。此命令可让您设置供调节器选择的最小或最大 CPU 频率值,或创建新的调节器。您还可以使用 -c 选项指定要修改哪些处理器的设置。如此可以轻松地为所有处理器使用一致的策略,而无需单独调整每个处理器的设置。有关更多细节和可用选项,请参见 cpupower-frequency-set 手册页,或运行 cpupower frequency-set --help。

11.4 特殊微调选项REPORT DOCUMENTATION BUG

下列章节重点介绍一些重要设置。

11.4.1 P 状态的微调选项REPORT DOCUMENTATION BUG

CPUfreq 子系统提供 P 状态的多个微调选项:您可以在不同的调节器之间切换、影响要使用的最小或最大 CPU 频率,或更改单个调节器参数。

要在运行时切换到另一个调节器,请将 -g 选项与 cpupower frequency-set 结合使用。例如,运行以下命令(以 root 身份)会激活性能调节器:

root #

COPY

要设置可供调节器选择的最小或最大 CPU 频率值,请分别使用 -d 或 -u 选项。

11.5 查错REPORT DOCUMENTATION BUG

是否已启用 BIOS 选项?

要使用 C 状态或 P 状态,请检查 BIOS 选项:

  • 要使用 C 状态,请确保启用 CPU C 状态或类似选项,以便在空闲时实现节能。
  • 要使用 P 状态和 CPUfreq 调节器,请确保启用处理器性能状态选项或类似选项。
  • 即使 P 状态和 C 状态可用,也可能存在 CPU 频率由平台固件管理的情况,从而导致性能欠佳。例如,如果已装载 pcc-cpufreq,则操作系统只会向固件发出提示,而后者可以随意忽略提示。要解决此问题,可以针对 BIOS 中管理的 CPU 频率,选择“操作系统管理”或类似选项。重引导后,将使用替代的驱动程序,但仍应仔细测量性能影响。

升级 CPU 时,请务必同时升级 BIOS。BIOS 需要知道新 CPU 及其频率步进值,以便将此信息传递给操作系统。

是否有日志文件信息?

在 systemd 日记(请参见第 17 章 “journalctl:查询 systemd 日记”)中检查有关 CPUfreq 子系统的任何输出。其中只会报告严重错误。

如果您怀疑计算机上的 CPUfreq 子系统有问题,还可以启用额外的调试输出。为此,请使用 cpufreq.debug=7 作为引导参数,或以 root 身份执行以下命令:

root #

COPY

这会导致 CPUfreq 在状态转换时将更多信息记录到 dmesg,这些信息有助于进行诊断。但这些附加的内核消息输出可能相当详尽,因此请仅当您确信存在问题时才采用这种做法。

11.6 更多信息REPORT DOCUMENTATION BUG

配备基板管理控制器 (BMC) 的平台可能会提供可通过服务处理器访问的其他电源管理配置选项。这些配置与特定的供应商相关,因此不属于本指南讨论的主题。有关详细信息,请参见供应商提供的手册。

11.7 使用 powerTOP 监视电源消耗REPORT DOCUMENTATION BUG

powerTOP 可帮助识别电源消耗不必要升高的原因。在笔记本电脑上,此工具特别有用,因为尽量减少电源消耗对笔记本电脑而言更为重要。此工具支持 Intel 和 AMD 处理器。以一般方式安装此工具:

tux > 
sudo
zypper in powertop

COPY

powerTOP 结合了各种信息来源(程序分析、设备驱动程序、内核选项、将处理器从休眠状态唤醒的中断数目和来源),并提供多种方式用于查看这些信息。您可以在交互模式下启动此工具,它将在 ncurses 会话中运行(请参见图 11.1 “处于交互模式的 powerTOP”):

tux > 
sudo
powertop

COPY

bios里电源管理 bioss电源管理_网络

图 11.1︰ 处于交互模式的 POWERTOPREPORT DOCUMENTATION BUG

powerTOP 支持将报告导出为 HTML 和 CSV。以下示例生成了一个运行 240 秒的报告:

tux > 
sudo
powertop --iteration=1 --time=240 --html=POWERREPORT.HTML

COPY

对于在一段时间内运行独立报告此工具会很有用。以下示例运行 powerTOP 10 次,每次运行 20 秒,并为每次运行创建独立 HTML 报告:

tux > 
sudo
powertop --iteration=10 --time=20 --html=POWERREPORT.HTML

COPY

这会创建 10 个带时戳的报告:

powerreport-20200108-104512.htmlpowerreport-20200108-104451.html powerreport-20200108-104431.html [...]

COPY

HTML 报告如图 11.2 “HTML powerTOP 报告”中所示:

bios里电源管理 bioss电源管理_HTML_02

图 11.2︰ HTML POWERTOP 报告REPORT DOCUMENTATION BUG

HTML 报告的“微调”选项卡以及交互模式下的“可调参数”选项卡都提供了用于测试各种电源设置的命令。HTML 报告会列显命令,您可将其复制到 root 命令行进行测试,例如 echo '0' > '/proc/sys/kernel/nmi_watchdog'。ncurses 模式提供 Good 和 Bad 之间的简单切换。选择 Good 会运行一个命令来启用节能;选择 Bad 则会关闭节能。通过一条命令启用所有 powerTOP 设置:

tux > 
sudo
powertop --auto-tune

COPY

重引导后,所有这些更改都不会留存。要进行永久性更改,请使用 sysctl、udev 或 systemd 在引导时运行选定的命令。powerTOP 包含 systemd 服务文件 /usr/lib/systemd/system/powertop.service。以下命令使用 --auto-tune 选项启动 powerTOP:

ExecStart=/usr/sbin/powertop --auto-tune

COPY

在启动 systemd 服务之前,请仔细测试,以确定它是否能够获得所需的结果。您也许不希望 USB 键盘和鼠标进入节能模式,因为不断唤醒这些设备会很麻烦,另外,您还可能希望其他设备保持现有状态。为了更方便地进行测试和配置编辑,请使用 awk 提取 HTML 报告中的命令:

tux >

COPY

在校准模式下,powerTOP 会设置多个运行,即针对背光、CPU、Wi-Fi、USB 设备和磁盘使用不同的空闲设置,此外,在电池供电时,powerTOP 还可帮助您识别最佳的亮度设置:

tux > 
sudo
powertop --calibrate

COPY

您可以调用文件来创建工作负载,以提高校验的准确性:

tux > 
sudo
powertop --calibrate --workload=FILENAME --html=POWERREPORT.HTML

COPY