电源和性能优化

能源效率在企业和数据中心环境中越来越重要,因为它,你在混搭使用配置选项时需要考虑另外一组权衡。 管理服务器时,请务必确保这些服务器尽可能高效地运行,同时满足其工作负载的性能需求。 Windows Server 经过优化,具有出色的能源效率,对各种客户工作负载的性能影响最小。 针对 Windows Server 均衡电源计划的处理器电源管理 (PPM) 优化描述了用于优化多个 Windows Server 版本中默认参数的工作负载,还提供了自定义优化的建议。

本部分详述了能源效率方面的权衡,以帮助你在需要调整服务器上的默认电源设置时作出明智的选择。 不过,运行 Windows Server 时,大多数服务器硬件和工作负载不应要求管理员进行电源优化。

选择优化指标

优化服务器来节省能源时,还必须考虑性能。 优化会影响性能和功耗,有时影响的程度不成比例。 对于每个可能的调整,请考虑功耗预算和性能目标,以确定权衡是否可接受。

Windows Server 默认参数优化使用“能源效率”作为关键指标来平衡功耗和性能。 能源效率是在指定时间内完成的工作与所需平均功耗的比率。

energy efficiency formula

可使用此指标来设置实际目标,将功耗和性能之间的权衡纳入考虑。 相比之下,整个数据中心能源节省 10% 的目标没有对性能产生相应的影响,反之亦然。

同样,如果优化服务器来将性能提高 5%,导致能耗增加 10%,那么对于你的业务目标来说,总体结果可能可接受,也可能不可接受。 与单独使用功耗或性能指标相比,能源效率指标让你能够做出更明智的决策。

测量系统能耗

在优化服务器的能源效率之前,应建立基线功耗度量。

如果服务器具有必要的支持,可以使用 Windows Server 2016 中的功耗计量和预算功能,通过性能监视器查看系统级能耗。

要确定服务器是否支持计量和预算,一种方法是查看 Windows Server Catalog。 如果你的服务器型号符合 Windows 硬件认证计划中新的增强型电源管理资格,则保证支持计量和预算功能。

检查是否支持计量的另一种方法是在性能监视器中手动查找计数器。 打开性能监视器,选择“添加计数器”,然后找到“功率表”计数器组。

如果标有“所选对象的实例”的框中显示功率表命名实例,则平台支持进行计量。 以瓦特为单位显示功耗的“功耗”计数器出现在所选计数器组中。 没有指定功耗数据值的确切推导。 例如,它可以是瞬时功耗,也可以是某个时间间隔内的平均功耗。

如果你的服务器平台不支持计量,你可以使用连接到电源输入的物理计量设备来测量系统功耗或能耗。

要建立基线,应测量各种系统负载点(从空闲到 100% [最大吞吐量])所需的平均功耗,生成一条负载线。 下图显示了三个示例配置的负载线:

sample load lines

可以使用负载线来评估和比较所有负载点的配置的性能和能耗。 在此特定示例中,可以轻松了解什么是最佳配置。 但是,在某些情况下,一种配置最适合繁重的工作负载,而另一种配置最适合轻型工作负载。

需要全面了解你的工作负载需求,才能选择最佳配置。 不要认为找到合适的配置后,它就始终是最优的。 在工作负载、工作负载级别或服务器硬件发生更改后,应定期测量系统利用率和能耗。

诊断能源效率问题

PowerCfg.exe 支持一个命令行选项,你可使用该选项来分析服务器空闲时的能源效率。 使用 /energy 选项运行 PowerCfg.exe 时,该工具将执行一个 60 秒的测试来检测潜在的能源效率问题。 该工具在当前目录中生成一个简单的 HTML 报告。

重要

要确保准确分析,请确保在运行 PowerCfg.exe 之前关闭所有本地应用。 

powercfg /energy 命令检测到的行为问题包括计时器计时速率变短、驱动程序缺少电源管理支持和 CPU 利用率过高。 此工具提供了一种简单的方法来识别和解决电源管理问题,这可能会在大型数据中心节省大量成本。

有关 PowerCfg.exe 的详细信息,请参阅 Powercfg 命令行选项

在 Windows Server 中使用电源计划

Windows Server 2016 有 3 个内置电源计划,旨在满足不同的业务需求组合。 这些计划提供了一种简单的方法来自定义服务器,使其满足功耗或性能目标。 下表介绍了这些计划,它列出了使用每种计划的常见场景,并提供了每个计划的一些实现详细信息。

规划 描述 常见适用场景 实现亮点
平衡(推荐) 默认设置。 目标是有良好的能源效率,且对性能影响最小。 常规计算 将容量与需求匹配。 节能功能在功耗和性能之间进行平衡。
高性能 提高性能,代价是高能耗。 需遵循电源和热限制、运营费用和可靠性注意事项。 低延迟应用,以及对处理器性能变化敏感的应用代码 处理器始终锁定在最高性能状态(包括“turbo”频率)。 所有核心均已取消休眠。 热输出可能很大。
节能 限制性能来节省能源并降低运营成本。 为确保性能足够,如果未进行彻底测试,不建议这样做。 具有有限功耗预算和热约束的部署 将处理器频率限制在最大百分比(如果支持),并启用其他节能功能。

这些电源计划存在于 Windows 中,用于交流电 (AC) 和直流电 (DC) 供电系统,但我们将假定服务器始终使用 AC 电源。

有关电源计划和电源策略配置的详细信息,请参阅 Powercfg 命令行选项

注意

某些服务器制造商通过 BIOS 设置提供自己的电源管理选项。 如果操作系统无法控制电源管理,那么更改 Windows 中的电源计划不会影响系统功耗和性能。

优化处理器电源管理参数

每个电源计划都表示许多基础电源管理参数的组合。 内置计划是由建议设置组成的三个集合,涵盖各种工作负载和场景。 然而,我们认识到,这些计划不会满足每个客户的需求。

以下部分介绍了如何优化某些特定处理器电源管理参数,以满足这三个内置计划未实现的目标。 如果需要了解更广泛的电源参数,请参阅 Powercfg 命令行选项

Intel 硬件控制 P 状态 (HWP)

从运行 WS2016 的 Intel Broadwell 处理器开始,Windows PPM 使用 Intel 硬件控制 P 状态 (HWP)。 HWP 是用于协作式硬件和软件性能控制的新功能。 启用 HWP 后,CPU 将监视活动和可伸缩性,并根据硬件时间刻度选择频率。 操作系统不再需要定期监视活动和选择频率。 切换到 HWP 具有以下优势:

  • 快速响应突发工作负载。 Windows PPM 检查间隔设置为默认值 30 毫秒,可减少最少 15 毫秒。 不过,HWP 可以每 1 毫秒的速率快速调整频率。
  • CPU 更了解每个 P 状态的硬件电源效率。 它可以更好地选择处理器频率,来实现最佳电源效率。
  • CPU 可以考虑其他硬件使用情况(例如内存、GPU 等),在某些热设计功耗 (TDP) 下实现最佳电源效率。

Windows 仍可以设置最小和最大处理器状态,来限制处理器可执行的频率范围。 它还可设置以下处理器能量性能首选项策略 (EPP) 参数,指示 HWP 有利于功耗或性能。

  • 处理器能量性能首选项策略,用于设置功耗和性能之间的平衡。 较低的值有利于性能,较高的值有利于功耗。 该值可介于 0 和 100 之间。 默认值为 50,它可以在功耗和性能之间实现平衡。

以下命令将当前电源计划上的 EPP 值降低到 0,使性能完全优于功耗:

Powercfg -setacvalueindex scheme_current sub_processor PERFEPP 0
Powercfg -setactive scheme_current

最小和最大处理器性能状态

为了匹配供需情况,处理器在性能状态(P 状态)之间变化非常快,在必要时提供性能并尽可能地节能。 如果你的服务器具有特定的高性能或最低功耗要求,可考虑配置“最小处理器性能状态”参数或“最大处理器性能状态”参数。

“最小处理器性能状态”和“最大处理器性能状态”参数的值以最大处理器频率的百分比表示,其值在 0-100 范围内。

如果服务器需要超低延迟、固定的 CPU 频率(例如,对于可重复的测试)或最高性能级别,那么你可能不希望处理器切换到更低性能状态。 对于此类服务器,可使用以下命令将最小处理器性能状态限制为 100%:

Powercfg -setacvalueindex scheme_current sub_processor PROCTHROTTLEMIN 100
Powercfg -setactive scheme_current

如果服务器要求更低的能耗,则可能需要将处理器性能状态限制为最大值的百分比。 例如,可使用以下命令将处理器限制为其最大频率的 75%:

Powercfg -setacvalueindex scheme_current sub_processor PROCTHROTTLEMAX 75
Powercfg -setactive scheme_current

注意

要将处理器性能限制为最大值的百分比,需要处理器支持。 查看处理器文档来确定是否存在这种支持,或者查看“处理器”组中的“最大频率的百分比(%)”这一性能监视器计数器,来查看是否应用了任何频率上限。

处理器响应能力替代

基于 CPU 利用率的电源管理算法通常使用时间检查窗口内的平均 CPU 利用率来确定频率是需要提高还是降低。 这可能会对磁盘 I/O 或网络密集型工作负载的延迟造成不利影响。 逻辑处理器在等待磁盘 IO 完成或网络数据包时可能处于空闲状态,导致整体 CPU 利用率较低。 因此,电源管理将为此处理器选择一个较低的频率。 基于 HWP 的电源管理也存在此问题。 处理 IO 完成或网络数据包的 DPC 和线程位于关键路径中,不应以低速运行。 为了解决此问题,Windows PPM 会考虑 DPC 的数量。 当 DPC 计数在过去的监视窗口中超过特定阈值时,PPM 将进入 IO 响应期,并将频率下限提高到一个更高的级别。 当 DPC 计数在一段时间内保持足够低时,将重置频率下限。 可通过以下参数优化此行为。

Parameter 描述 默认值 最小值 最大值
处理器响应能力替代启用阈值 性能检查内的 DPC 计数;如果高于此计数,应启用处理器响应能力替代 10 0 不可用
处理器响应能力替代禁用阈值 性能检查内的 DPC 计数;如果低于此计数,应禁用处理器响应能力替代 5 0 不可用
处理器响应能力替代启用时间 连续性能检查的计数;在启用处理器响应能力替代之前,该计数必须满足启用阈值 1 1 100
处理器响应能力替代禁用时间 连续性能检查的计数;在禁用处理器响应能力替代之前,该计数必须满足禁用阈值 3 1 100
处理器响应能力替代性能下限 启用处理器响应能力替代时允许的最小处理器性能 100 0 100
处理器响应能力替代能源性能首选项上限 启用处理器响应能力替代时的最大能源性能首选项策略值 100 0 100

例如,如果你的服务器工作负载对延迟不敏感,并且想要放松响应能力替代来提高功耗,你可调高处理器响应能力替代启用阈值和处理器响应能力替代启用时间,并降低处理器响应能力替代禁用阈值和处理器响应能力替代禁用时间。 这之后,系统将很难进入响应能力替代状态。 处理器响应能力替代性能下限的默认值设置为 100,以便响应能力替代周期以最大频率运行。 你还可以降低处理器性能下限,降低处理器响应能力替代能源性能首选项上限,以便 HWP 调整频率。 下面是用于设置当前有效电源计划的参数的示例命令。

Powercfg -setacvalueindex scheme_current sub_processor RESPENABLETHRESHOLD 100
Powercfg -setacvalueindex scheme_current sub_processor RESPDISABLETHRESHOLD 1
Powercfg -setacvalueindex scheme_current sub_processor RESPENABLETIME 10
Powercfg -setacvalueindex scheme_current sub_processor RESPDISABLETIME 1
Powercfg -setacvalueindex scheme_current sub_processor RESPPERFFLOOR 5
Powercfg -setacvalueindex scheme_current sub_processor RESPEPPCEILING 50
Powercfg -setactive scheme_current

处理器性能提升模式

此参数优化仅适用于非 HWP 系统。

借助 Intel Turbo Boost 和 AMD Turbo CORE 技,处理器能够在最有用的时候(即在高系统负载时)获得额外的性能。 但是,此功能会增加 CPU 核心能耗,因此 Windows Server 2016 根据正在使用的电源策略和特定的处理器实现来配置 Turbo 技术。

Turbo 在所有 Intel 和 AMD 处理器上都启用了高性能电源计划,并且禁用了节能电源计划。 对于依赖传统基于 P 状态的频率管理的系统上的平衡电源计划,只有当平台支持 EPB 寄存器时,才会默认启用 Turbo。

注意

EPB 寄存器仅在 Intel Westmere 和更高版本的处理器中受支持。

对于 Intel Nehalem 和 AMD 处理器,在基于 P 状态的平台上默认禁用 Turbo。 但是,如果系统支持协同处理器性能控制 (CPPC) - 这是操作系统与硬件之间的性能通信的新替代模式(定义见 ACPI 5.0),那么当 Windows 操作系统动态请求硬件提供可能的最高性能级别时,可能会使用 Turbo。

若要启用或禁用 Turbo Boost 功能,必须由管理员或所选电源计划的默认设置来配置处理器性能提升模式参数。 处理器性能提升模式有 5 个允许的值,如表 5 所示。

对于基于 P 状态的控制,选项为“禁用”、“启用”(每当要求标称性能,Turbo 都可用于硬件)和“高效率”(仅当实现 EPB 寄存器时才可使用 Turbo)。

对于基于 CPPC 的控制,选项为“禁用”,“启用高效”(Windows 指定要提供的确切 Turbo 量)和“激进”(Windows 要求具有“最佳性能”来启用 Turbo)。

在 Windows Server 2016 中,提升模式的默认值为 3。

Name 基于 P 状态的行为 CPPC 行为
0(禁用) 禁用 禁用
1(启用) 已启用 启用高效率
2(激进) 启用 激进
3(启用高效率) 高效 启用高效率
4(高效率激进) 高效 激进

以下命令在当前电源计划上启用处理器性能提升模式(使用 GUID 别名指定策略):

Powercfg -setacvalueindex scheme_current sub_processor PERFBOOSTMODE 1
Powercfg -setactive scheme_current

重要

必须运行 powercfg -setactive 命令才能启用新设置。 无需重新启动服务器。

若要为当前所选计划以外的电源计划设置此值,可以使用别名,例如 SCHEME_MAX(节能)、SCHEME_MIN(高性能)和 SCHEME_BALANCED(平衡)来代替 SCHEME_CURRENT。 将前面显示的 powercfg -setactive 命令中的“scheme current”替换为启用该电源计划所需的别名。

例如,若要调整节能计划中的提升模式,并使节能计划成为当前计划,请运行以下命令:

Powercfg -setacvalueindex scheme_max sub_processor PERFBOOSTMODE 1
Powercfg -setactive scheme_max

处理器性能提高和降低阈值和策略

此参数优化仅适用于非 HWP 系统。

处理器性能状态的提高或降低速度由多个参数控制。 下面 4 个参数具有最明显的影响:

  • 处理器性能增加阈值定义了一个利用率值,如果高于此值,处理器性能状态将提高。 值越大,性能状态的增加速率越低,以此来相应活动的增加。

  • 处理器性能降低阈值定义了一个利用率值,如果低于此值,处理器性能状态将降低。 值越大,空闲期间性能状态的降低速率越大。

  • 处理器性能提高策略和处理器性能降低策略确定发生更改时应设置的性能状态。 “单个”策略表示它选择下一个状态。 “Rocket”表示最大或最小电源性能状态。 如果是“理想”策略,则试图在功耗和性能之间找到平衡。

例如,如果你的服务器需要超低延迟,同时仍希望在空闲期间从低功耗中获益,你可以针对负载的任何增加来加快性能状态的提高,在负载下降时减慢该状态的降低。 以下命令将提高策略设置为“Rocket”来加快状态提高,并将降低策略设置为“单个”。 提高和降低阈值分别设置为 10 和 8。

Powercfg.exe -setacvalueindex scheme_current sub_processor PERFINCPOL 2
Powercfg.exe -setacvalueindex scheme_current sub_processor PERFDECPOL 1
Powercfg.exe -setacvalueindex scheme_current sub_processor PERFINCTHRESHOLD 10
Powercfg.exe -setacvalueindex scheme_current sub_processor PERFDECTHRESHOLD 8
Powercfg.exe /setactive scheme_current

处理器性能核心休眠最大和最小核心数

“核心休眠”是 Windows Server 2008 R2 中引入的一项功能。 处理器电源管理 (PPM) 引擎和计划程序协同工作,动态调整可用于运行线程的核心数。 PPM 引擎为要计划的线程选择最小核心数。

休眠的核心通常没有计划任何线程,并且当它们不处理中断、DPC 或其他严格关联的工作时,它们将进入非常低功耗的状态。 其余核心负责工作负载的其余部分。 核心休眠在使用率较低时可潜在地提高能源效率。

对于大多数服务器,默认的核心休眠行为在吞吐量和能源效率之间提供了合理的平衡。 在核心休眠对通用工作负载可能没多大好处的处理器上,可能会默认禁用核心休眠。

如果你的服务器有特定的核心休眠要求,你可以使用 Windows Server 2016 中的“处理器性能核心休眠最大核心数”参数或“处理器性能核心休眠最小核心数”参数来控制可休眠的核心数。

核心休眠并不总是最优的一种情况是,NUMA 节点中有一个或多个活动线程关联到 CPU 的一个非平凡子集(即,节点上超过 1 个 CPU,但小于整个 CPU 集)。 当核心休眠算法选取要取消休眠的核心时(假设工作负载强度增加),它可能并不总是在一个(或多个)活动关联子集中选取要取消休眠的核心,因此最终可能会将实际未在使用的核心取消休眠。

这些参数的值以百分比表示,介于 0-100 范围内。 “处理器性能核心休眠最大核心数”参数控制可在任何时候取消休眠(可用于运行线程)的核心的最大百分比,而“处理器性能核心休眠最小核心数”参数控制可取消休眠的核心的最小百分比。 要关闭核心休眠,请使用以下命令将“处理器性能核心休眠最小核心数”参数设置为 100%:

Powercfg -setacvalueindex scheme_current sub_processor CPMINCORES 100
Powercfg -setactive scheme_current

要将可计划核心数减少到最大计数的 50%,请将“处理器性能核心休眠最大核心数”参数设置为 50,如下所示:

Powercfg -setacvalueindex scheme_current sub_processor CPMAXCORES 50
Powercfg -setactive scheme_current

处理器性能核心休眠实用程序分发

“实用程序分发”是 Windows Server 2016 中的一种算法优化,旨在提高某些工作负载的电源效率。 它跟踪不可移动的 CPU 活动(即 DPC、中断或严格关联线程),并根据任何可移动的工作可平均分布在所有未休眠的核心上这一假设来预测每个处理器的未来工作。

对于某些处理器的平衡电源计划,会默认启用“实用程序分发”。 它可降低处于合理稳定状态的工作负载的请求 CPU 频率来降低处理器功耗。 但是,对于受到高活动突发影响的工作负载,或者在处理器之间快速随机转移工作负载的程序,实用程序分发不一定是一个很好的算法选择。

对于此类工作负载,建议使用以下命令禁用实用程序分发:

Powercfg -setacvalueindex scheme_current sub_processor DISTRIBUTEUTIL 0
Powercfg -setactive scheme_current

其他参考