英特尔® 睿频加速技术用户指南

英特尔® 睿频加速技术 (Intel® SST) 提供了一系列强大的新功能,可更精细地控制 CPU 性能。借助英特尔® SST,可以针对各种不同的工作负载要求配置一台服务器的功耗和性能。

有关该技术的概述,请参阅以下链接

在一些较新的服务器平台中,这些功能得到了进一步增强,这些功能可以动态枚举和控制,而无需通过 BIOS 设置选项进行预配置。此动态配置是通过向硬件发送邮箱命令来完成的。枚举和配置这些功能的一种方法是使用英特尔睿频加速实用程序。

本文档解释了如何使用英特尔睿频加速工具枚举和控制英特尔® SST 功能。本文档提供了示例命令,并解释了这些命令如何更改被测系统的功耗和性能配置文件。以该工具为例,客户可以在其生产软件中复制该工具中实现的消息传递。

英特尔睿频加速配置工具

大多数 Linux 发行版软件包可能包含 “intel-speed-select” 工具。如果未包含,则可以通过从 kernel.org 下载 Linux 内核树来构建该工具。下载后,无需构建完整的内核即可构建该工具。

从内核树中,运行以下命令

# cd tools/power/x86/intel-speed-select/
# make
# make install

获取帮助

要获取该工具的帮助,请执行以下命令

# intel-speed-select --help

顶级帮助描述了参数和功能。请注意,该工具中有一个多级帮助结构。例如,要获取功能 “perf-profile” 的帮助

# intel-speed-select perf-profile --help

要获取有关命令的帮助,还提供了另一级别的帮助。例如,对于命令 info “info”

# intel-speed-select perf-profile info --help

平台功能摘要

要检查当前平台和驱动程序功能,请执行

#intel-speed-select --info

例如在测试系统上

# intel-speed-select --info
Intel(R) Speed Select Technology
Executing on CPU model: X
Platform: API version : 1
Platform: Driver version : 1
Platform: mbox supported : 1
Platform: mmio supported : 1
Intel(R) SST-PP (feature perf-profile) is supported
TDP level change control is unlocked, max level: 4
Intel(R) SST-TF (feature turbo-freq) is supported
Intel(R) SST-BF (feature base-freq) is not supported
Intel(R) SST-CP (feature core-power) is supported

英特尔® 睿频加速技术 - 性能配置文件 (Intel® SST-PP)

此功能允许根据工作负载性能要求动态配置服务器。这有助于用户在部署期间,因为他们不必静态地选择特定的服务器配置。英特尔® 睿频加速技术 - 性能配置文件 (Intel® SST-PP) 功能引入了一种机制,允许每个系统使用多个优化的性能配置文件。每个配置文件定义了一组需要在线的 CPU,其余 CPU 需要离线以维持保证的基频。一旦用户发出命令以使用特定的性能配置文件并满足 CPU 在线/离线要求,用户就可以期望动态更改基频。在使用英特尔睿频加速工具时,此功能称为 “perf-profile”。

性能级别数

系统上可以有多个性能配置文件。要获取配置文件的数量,请执行以下命令

# intel-speed-select perf-profile get-config-levels
Intel(R) Speed Select Technology
Executing on CPU model: X
package-0
 die-0
   cpu-0
       get-config-levels:4
package-1
 die-0
   cpu-14
       get-config-levels:4

在此被测系统中,除了基本性能配置文件(即性能级别 0)之外,还有 4 个性能配置文件。

锁定/解锁状态

即使有多个性能配置文件,也可能被锁定。如果它们被锁定,则用户无法发出命令来更改性能状态。可能存在 BIOS 设置来解锁或咨询您的系统供应商。

要检查系统是否被锁定,请执行以下命令

# intel-speed-select perf-profile get-lock-status
Intel(R) Speed Select Technology
Executing on CPU model: X
package-0
 die-0
   cpu-0
       get-lock-status:0
package-1
 die-0
   cpu-14
       get-lock-status:0

在这种情况下,锁定状态为 0,这意味着系统已解锁。

性能级别的属性

要获取特定性能级别的属性(例如,下面的级别 0),请执行以下命令

# intel-speed-select perf-profile info -l 0
Intel(R) Speed Select Technology
Executing on CPU model: X
package-0
 die-0
   cpu-0
     perf-profile-level-0
       cpu-count:28
       enable-cpu-mask:000003ff,f0003fff
       enable-cpu-list:0,1,2,3,4,5,6,7,8,9,10,11,12,13,28,29,30,31,32,33,34,35,36,37,38,39,40,41
       thermal-design-power-ratio:26
       base-frequency(MHz):2600
       speed-select-turbo-freq:disabled
       speed-select-base-freq:disabled
       ...
       ...

此处 -l 选项用于指定性能级别。

如果省略选项 -l,则此命令将打印有关所有性能级别的信息。上面的命令正在打印性能级别 0 的属性。

对于此性能配置文件,“enable-cpu-mask/enable-cpu-list” 显示的 CPU 列表在最大程度上可以是“在线”的。当满足该条件时,可以保持 2600 MHz 的基频。要了解更多信息,请对性能级别 4 执行 “intel-speed-select perf-profile info”

# intel-speed-select perf-profile info -l 4
Intel(R) Speed Select Technology
Executing on CPU model: X
package-0
 die-0
   cpu-0
     perf-profile-level-4
       cpu-count:28
       enable-cpu-mask:000000fa,f0000faf
       enable-cpu-list:0,1,2,3,5,7,8,9,10,11,28,29,30,31,33,35,36,37,38,39
       thermal-design-power-ratio:28
       base-frequency(MHz):2800
       speed-select-turbo-freq:disabled
       speed-select-base-freq:unsupported
       ...
       ...

“enable-cpu-mask/enable-cpu-list” 中的 CPU 较少。因此,如果用户仅保持这些 CPU 在线,而其余 CPU “离线”,则基频将从性能级别 0 的 2.6 GHz 增加到 2.8 GHz。

获取当前性能级别

要获取当前性能级别,请执行

# intel-speed-select perf-profile get-config-current-level
Intel(R) Speed Select Technology
Executing on CPU model: X
package-0
 die-0
   cpu-0
       get-config-current_level:0

首先验证 cpufreq sysfs 显示的 base_frequency 是否正确

# cat /sys/devices/system/cpu/cpu0/cpufreq/base_frequency
2600000

这与 “perf-profile info” 命令针对性能级别 0 显示的 base-frequency (MHz) 字段值匹配(cpufreq 频率以 KHz 为单位)。

要检查对于 100% 繁忙的工作负载,平均频率是否等于基频,请禁用睿频

# echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo

然后在所有 CPU 上运行繁忙的工作负载,例如

#stress -c 64

要验证基频,请运行 turbostat

#turbostat -c 0-13 --show Package,Core,CPU,Bzy_MHz -i 1

 Package       Core    CPU     Bzy_MHz
               -       -       2600
 0             0       0       2600
 0             1       1       2600
 0             2       2       2600
 0             3       3       2600
 0             4       4       2600
 .             .       .       .

更改性能级别

要将性能级别更改为 4,请执行

# intel-speed-select -d perf-profile set-config-level -l 4 -o
Intel(R) Speed Select Technology
Executing on CPU model: X
package-0
 die-0
   cpu-0
     perf-profile
       set_tdp_level:success

在上面的命令中,“-o” 是可选的。如果指定了该选项,它还将使此性能级别的 enable_cpu_mask 中不存在的 CPU 脱机。

现在如果检查 base_frequency

#cat /sys/devices/system/cpu/cpu0/cpufreq/base_frequency
2800000

结果表明,基频现在从性能级别 0 的 2600 MHz 增加到性能级别 4 的 2800 MHz。因此,与性能级别 0 相比,任何可以使用较少 CPU 的工作负载都可以看到 200 MHz 的提升。

通过 BMC 接口更改性能级别

可以使用带外 (OOB) 代理(通过某些远程管理控制台,通过 BMC “基板管理控制器” 接口)更改 SST-PP 级别。Sapphire Rapids 处理器世代支持此模式。支持此模式的内核和工具更改已添加到 Linux 内核版本 5.18。要启用此功能,需要内核配置 “CONFIG_INTEL_HFI_THERMAL”。该工具的最低版本为 “v1.12” 以支持此功能,该功能是 Linux 内核版本 5.18 的一部分。

为了支持这种配置,可以将此工具用作守护程序。添加命令行选项 --oob

# intel-speed-select --oob
Intel(R) Speed Select Technology
Executing on CPU model:143[0x8f]
OOB mode is enabled and will run as daemon

在此模式下,该工具将根据新的性能级别使 CPU 在线/离线。

检查其他英特尔® SST 功能是否存在

每个性能配置文件还指定是否支持其他两个英特尔® SST 功能(英特尔® 睿频加速技术 - 基本频率 (Intel® SST-BF) 和英特尔® 睿频加速技术 - 睿频频率 (Intel SST-TF))。

例如,从上面的 “perf-profile info” 的输出中,对于级别 0 和级别 4

对于级别 0:

speed-select-turbo-freq:disabled speed-select-base-freq:disabled

对于级别 4:

speed-select-turbo-freq:disabled speed-select-base-freq:unsupported

根据这些结果,与性能级别 0 相比,级别 4 中的 “speed-select-base-freq” (Intel(R) SST-BF) 从“禁用”变为“不支持”。

这意味着在性能级别 4,“speed-select-base-freq” 功能不受支持。 然而,在性能级别 0,此功能是“支持的”,但目前是“禁用”的,这意味着用户尚未激活此功能。 而“speed-select-turbo-freq” (Intel(R) SST-TF) 在两个性能级别都受支持,但目前未被用户激活。

Intel(R) SST-BF 和 Intel(R) SST-TF 功能构建在名为 Intel(R) Speed Select Technology - Core Power (Intel(R) SST-CP) 的基础技术之上。当平台上支持 Intel(R) SST-BF 或 Intel(R) SST-TF 时,平台固件会启用此功能。

Intel(R) Speed Select Technology Core Power (Intel(R) SST-CP)

Intel(R) Speed Select Technology Core Power (Intel(R) SST-CP) 是一个允许用户定义每个核心优先级的接口。它定义了一种在功率受限情况下在核心之间分配功率的机制。这定义了一个服务类别 (CLOS) 配置。

用户最多可以配置 4 个服务类别配置。每个 CLOS 组配置都允许定义参数,这些参数会影响频率限制方式和功率分配方式。每个 CPU 核心都可以绑定到一个服务类别,从而绑定到相关的优先级。粒度级别是核心级别,而不是每个 CPU 级别。

启用基于 CLOS 的优先级

要使用基于 CLOS 的优先级功能,必须通知固件启用并使用优先级类型。有一个默认的每个平台的优先级类型,可以使用可选的命令行参数进行更改。

要启用并检查选项,请执行

# intel-speed-select core-power enable --help
Intel(R) Speed Select Technology
Executing on CPU model: X
Enable core-power for a package/die
       Clos Enable: Specify priority type with [--priority|-p]
                0: Proportional, 1: Ordered

有两种类型的优先级类型

  • 有序

有序节流的优先级是根据分配的 CLOS 组的索引定义的。其中 CLOS0 获得最高优先级(最后进行节流)。

优先级顺序为:CLOS0 > CLOS1 > CLOS2 > CLOS3。

  • 比例

当使用比例优先级时,还有一个额外的参数称为 frequency_weight,可以为每个 CLOS 组指定。比例优先级的目标是为每个核心提供请求的最小值,然后根据定义的权重按比例分配所有剩余的(超额/不足)预算。可以使用“core-power config”命令配置此比例优先级。

要启用平台默认优先级类型,请执行

# intel-speed-select core-power enable
Intel(R) Speed Select Technology
Executing on CPU model: X
package-0
 die-0
   cpu-0
     core-power
       enable:success
package-1
 die-0
   cpu-6
     core-power
       enable:success

当一个封装包含多个晶片时,此启用的范围是每个封装或晶片范围。要检查是否启用了 CLOS 并获取优先级类型,可以使用“core-power info”命令。例如,要检查 CPU 0 上核心电源功能的状态,请执行

# intel-speed-select -c 0 core-power info
Intel(R) Speed Select Technology
Executing on CPU model: X
package-0
 die-0
   cpu-0
     core-power
       support-status:supported
       enable-status:enabled
       clos-enable-status:enabled
       priority-type:proportional
package-1
 die-0
   cpu-24
     core-power
       support-status:supported
       enable-status:enabled
       clos-enable-status:enabled
       priority-type:proportional

配置 CLOS 组

每个 CLOS 组都有自己的属性,包括 min、max、freq_weight 和 desired。可以使用“core-power config”命令配置这些参数。如果用户跳过设置参数(clos id 除外,它是强制性的),将使用默认值。要检查 core-power 配置选项,请执行

# intel-speed-select core-power config --help
Intel(R) Speed Select Technology
Executing on CPU model: X
Set core-power configuration for one of the four clos ids
       Specify targeted clos id with [--clos|-c]
       Specify clos Proportional Priority [--weight|-w]
       Specify clos min in MHz with [--min|-n]
       Specify clos max in MHz with [--max|-m]

例如

# intel-speed-select core-power config -c 0
Intel(R) Speed Select Technology
Executing on CPU model: X
clos epp is not specified, default: 0
clos frequency weight is not specified, default: 0
clos min is not specified, default: 0 MHz
clos max is not specified, default: 25500 MHz
clos desired is not specified, default: 0
package-0
 die-0
   cpu-0
     core-power
       config:success
package-1
 die-0
   cpu-6
     core-power
       config:success

用户可以选择更改默认值。例如,用户可以更改“min”并将基本频率设置为始终获得保证的基本频率。

获取当前 CLOS 配置

要检查当前配置,可以使用“core-power get-config”。例如,要获取 CLOS 0 的配置

# intel-speed-select core-power get-config -c 0
Intel(R) Speed Select Technology
Executing on CPU model: X
package-0
 die-0
   cpu-0
     core-power
       clos:0
       epp:0
       clos-proportional-priority:0
       clos-min:0 MHz
       clos-max:Max Turbo frequency
       clos-desired:0 MHz
package-1
 die-0
   cpu-24
     core-power
       clos:0
       epp:0
       clos-proportional-priority:0
       clos-min:0 MHz
       clos-max:Max Turbo frequency
       clos-desired:0 MHz

将 CPU 与 CLOS 组关联

要将 CPU 与 CLOS 组关联,可以使用“core-power assoc”命令

# intel-speed-select core-power assoc --help
Intel(R) Speed Select Technology
Executing on CPU model: X
Associate a clos id to a CPU
       Specify targeted clos id with [--clos|-c]

例如,要将 CPU 10 与 CLOS 组 3 关联,请执行

# intel-speed-select -c 10 core-power assoc -c 3
Intel(R) Speed Select Technology
Executing on CPU model: X
package-0
 die-0
   cpu-10
     core-power
       assoc:success

一旦 CPU 被关联,其兄弟 CPU 也将关联到 CLOS 组。一旦关联,请避免更改 Linux “cpufreq” 子系统的缩放频率限制。

要检查 CPU 的现有关联,可以使用“core-power get-assoc”命令。例如,要获取 CPU 10 的关联,请执行

# intel-speed-select -c 10 core-power get-assoc
Intel(R) Speed Select Technology
Executing on CPU model: X
package-1
 die-0
   cpu-10
     get-assoc
       clos:3

这表明 CPU 10 是 CLOS 组 3 的一部分。

禁用基于 CLOS 的优先级

要禁用,请执行

# intel-speed-select core-power disable

某些功能(如 Intel(R) SST-TF)只能在启用基于 CLOS 的优先级时启用。因此,如果在启用 Intel(R) SST-TF 时禁用,可能会导致 Intel(R) SST-TF 失败。如果 Intel(R) SST-TF 已经启用,这将导致“disable”命令显示错误。反过来,要禁用,必须首先禁用 Intel(R) SST-TF 功能。

Intel(R) Speed Select Technology - Base Frequency (Intel(R) SST-BF)

Intel(R) Speed Select Technology - Base Frequency (Intel(R) SST-BF) 功能允许用户控制基本频率。如果某些关键工作负载线程需要持续高保证性能,则可以使用此功能在特定 CPU 集(高优先级 CPU)上以更高的基本频率执行线程,但其他 CPU 上的基本频率较低(低优先级 CPU)。此功能不需要低优先级 CPU 脱机。

Intel(R) SST-BF 的支持取决于 Intel(R) Speed Select Technology - Performance Profile (Intel(R) SST-PP) 性能级别配置。可能只有某些性能级别支持 Intel(R) SST-BF。也可能只有基本性能级别(级别 = 0)支持 Intel SST-BF。因此,首先选择所需的性能级别以启用此功能。

在此处的测试系统中,Intel(R) SST-BF 在基本性能级别 0 上受支持,但目前已禁用。例如,对于级别 0

# intel-speed-select -c 0 perf-profile info -l 0
Intel(R) Speed Select Technology
Executing on CPU model: X
package-0
 die-0
   cpu-0
     perf-profile-level-0
       ...

       speed-select-base-freq:disabled
       ...

在启用 Intel(R) SST-BF 并衡量其对工作负载性能的影响之前,执行一些工作负载并测量性能,并获得基准性能以进行比较。

在这里,用户需要更多的保证性能。因此,很可能禁用 turbo。要禁用 turbo,请执行

#echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo

根据 “intel-speed-select perf-profile info -l 0” 的输出,保证频率的基本频率为 2600 MHz。

测量基准性能以进行比较

要进行比较,请选择一个多线程工作负载,其中每个线程都可以在单独的 CPU 上调度。“Hackbench pipe” 测试是关于如何使用 Intel(R) SST-BF 提高性能的一个很好的例子。

下面,工作负载正在测量平均调度程序唤醒延迟,因此数字越低意味着性能越好

# taskset -c 3,4 perf bench -r 100 sched pipe
# Running 'sched/pipe' benchmark:
# Executed 1000000 pipe operations between two processes
    Total time: 6.102 [sec]
      6.102445 usecs/op
        163868 ops/sec

在运行上述测试时,如果我们采用 turbostat 输出,它将显示 2 个 CPU 很忙并达到最大频率(这将是 turbo 被禁用时的基本频率)。turbostat 输出

#turbostat -c 0-13 --show Package,Core,CPU,Bzy_MHz -i 1
Package        Core    CPU     Bzy_MHz
0              0       0       1000
0              1       1       1005
0              2       2       1000
0              3       3       2600
0              4       4       2600
0              5       5       1000
0              6       6       1000
0              7       7       1005
0              8       8       1005
0              9       9       1000
0              10      10      1000
0              11      11      995
0              12      12      1000
0              13      13      1000

从上面的 turbostat 输出可以看出,CPU 3 和 4 都很忙并达到了 2600 MHz 的完整保证频率。

Intel(R) SST-BF 功能

要获取当前性能级别 0 的 Intel(R) SST-BF 功能,请执行

# intel-speed-select base-freq info -l 0
Intel(R) Speed Select Technology
Executing on CPU model: X
package-0
 die-0
   cpu-0
     speed-select-base-freq
       high-priority-base-frequency(MHz):3000
       high-priority-cpu-mask:00000216,00002160
       high-priority-cpu-list:5,6,8,13,33,34,36,41
       low-priority-base-frequency(MHz):2400
       tjunction-temperature(C):125
       thermal-design-power(W):205

上述功能表明,此系统上的一些 CPU 可以提供 3000 MHz 的基本频率,而此性能级别的标准基本频率为 3000 MHz。 然而,这些 CPU 是固定的,并且它们是通过 high-priority-cpu-list/high-priority-cpu-mask 呈现的。但是,如果选择了此 Intel(R) SST-BF 功能,则低优先级 CPU(不在 high-priority-cpu-list 中)只能提供高达 2400 MHz 的频率。因此,如果可以接受对低优先级 CPU 的这种削减,则用户可以启用 Intel SST-BF 功能,特别是对于上述“sched pipe”工作负载,因为只使用了两个 CPU,它们可以在高优先级 CPU 上调度,并且可以获得 400 MHz 的提升。

启用 Intel(R) SST-BF

要启用 Intel(R) SST-BF 功能,请执行

# intel-speed-select base-freq enable -a
Intel(R) Speed Select Technology
Executing on CPU model: X
package-0
 die-0
   cpu-0
     base-freq
       enable:success
package-1
 die-0
   cpu-14
     base-freq
       enable:success

在本例中,-a 选项是可选的。这不仅会启用 Intel(R) SST-BF,还会使用 Intel(R) Speed Select Technology Core Power (Intel(R) SST-CP) 功能调整核心的优先级。此选项将每个 Intel(R) Speed Select Technology - Performance Profile (Intel(R) SST-PP) 类的最低性能设置为最高性能,以便硬件为每个 CPU 提供尽可能高的性能。

如果未使用 -a 选项,则在启用 Intel(R) SST-BF 之前需要执行以下步骤

  • 发现 Intel(R) SST-BF 并注意低优先级和高优先级基本频率

  • 注意高优先级 CPU 列表

  • 使用核心电源功能集启用 CLOS

  • 配置 CLOS 参数。使用 CLOS.min 设置为最低性能

  • 将所需的 CPU 订阅到 CLOS 组

通过此配置,如果通过将工作负载固定到高优先级 CPU(在本例中为 CPU 5 和 6)来执行相同的工作负载

#taskset -c 5,6 perf bench -r 100 sched pipe
# Running 'sched/pipe' benchmark:
# Executed 1000000 pipe operations between two processes
    Total time: 5.627 [sec]
      5.627922 usecs/op
        177685 ops/sec

通过这种方式,通过启用 Intel(R) SST-BF,此基准测试的性能提高了(延迟减少了)7.79%。从 turbostat 输出可以看出,高优先级 CPU 达到了 3000 MHz,而之前为 2600 MHz。turbostat 输出

#turbostat -c 0-13 --show Package,Core,CPU,Bzy_MHz -i 1
Package        Core    CPU     Bzy_MHz
0              0       0       2151
0              1       1       2166
0              2       2       2175
0              3       3       2175
0              4       4       2175
0              5       5       3000
0              6       6       3000
0              7       7       2180
0              8       8       2662
0              9       9       2176
0              10      10      2175
0              11      11      2176
0              12      12      2176
0              13      13      2661

禁用 Intel(R) SST-BF

要禁用 Intel(R) SST-BF 功能,请执行

# intel-speed-select base-freq disable -a

Intel(R) Speed Select Technology - Turbo Frequency (Intel(R) SST-TF)

此功能允许根据优先级为核心设置不同的“所有核心 turbo 比率限制”。通过使用此功能,可以通过将一些核心指定为高优先级来配置它们以获得更高的 turbo 频率,但低优先级核心的 turbo 频率会较低或没有 turbo 频率。

因此,只有当系统繁忙且正在利用所有 CPU 时,此功能才有用,但用户希望有一些可配置的选项以在某些 CPU 上获得高性能。

Intel(R) Speed Select Technology - Turbo Frequency (Intel(R) SST-TF) 的支持取决于 Intel(R) Speed Select Technology - Performance Profile (Intel SST-PP) 性能级别配置。可能只有特定的性能级别支持 Intel(R) SST-TF。也可能只有基本性能级别(级别 = 0)支持 Intel(R) SST-TF。因此,首先选择所需的性能级别以启用此功能。

在此处的测试系统中,Intel(R) SST-TF 在基本性能级别 0 上受支持,但目前已禁用

# intel-speed-select -c 0 perf-profile info -l 0
Intel(R) Speed Select Technology
package-0
 die-0
   cpu-0
     perf-profile-level-0
       ...
       ...
       speed-select-turbo-freq:disabled
       ...
       ...

要检查是否可以使用 Intel(R) SST-TF 功能提高性能,请获取启用 Intel(R) SST-TF 的 turbo 频率属性,并与此系统的基本 turbo 能力进行比较。

获取基本 turbo 能力

要获取性能级别 0 的基本 turbo 能力,请执行

# intel-speed-select perf-profile info -l 0
Intel(R) Speed Select Technology
Executing on CPU model: X
package-0
 die-0
   cpu-0
     perf-profile-level-0
       ...
       ...
       turbo-ratio-limits-sse
         bucket-0
           core-count:2
           max-turbo-frequency(MHz):3200
         bucket-1
           core-count:4
           max-turbo-frequency(MHz):3100
         bucket-2
           core-count:6
           max-turbo-frequency(MHz):3100
         bucket-3
           core-count:8
           max-turbo-frequency(MHz):3100
         bucket-4
           core-count:10
           max-turbo-frequency(MHz):3100
         bucket-5
           core-count:12
           max-turbo-frequency(MHz):3100
         bucket-6
           core-count:14
           max-turbo-frequency(MHz):3100
         bucket-7
           core-count:16
           max-turbo-frequency(MHz):3100

根据以上数据,当所有 CPU 都忙时,可以实现 3100 MHz 的最大频率。如果在 cpu 0 - 11 上有一些繁忙的工作负载(例如,stress),并在 CPU 12 和 13 上执行 “hackbench pipe” 工作负载

# taskset -c 12,13 perf bench -r 100 sched pipe
# Running 'sched/pipe' benchmark:
# Executed 1000000 pipe operations between two processes
    Total time: 5.705 [sec]
      5.705488 usecs/op
        175269 ops/sec

turbostat 输出

#turbostat -c 0-13 --show Package,Core,CPU,Bzy_MHz -i 1
Package        Core    CPU     Bzy_MHz
0              0       0       3000
0              1       1       3000
0              2       2       3000
0              3       3       3000
0              4       4       3000
0              5       5       3100
0              6       6       3100
0              7       7       3000
0              8       8       3100
0              9       9       3000
0              10      10      3000
0              11      11      3000
0              12      12      3100
0              13      13      3100

根据 turbostat 输出,性能受到 3100 MHz 频率上限的限制。要检查是否可以提高 CPU 12 和 CPU 13 的 hackbench 性能,请首先检查此性能级别的 Intel(R) SST-TF 功能的能力。

获取 Intel(R) SST-TF 能力

要获取能力,可以使用 “turbo-freq info” 命令

# intel-speed-select turbo-freq info -l 0
Intel(R) Speed Select Technology
Executing on CPU model: X
package-0
 die-0
   cpu-0
     speed-select-turbo-freq
         bucket-0
           high-priority-cores-count:2
           high-priority-max-frequency(MHz):3200
           high-priority-max-avx2-frequency(MHz):3200
           high-priority-max-avx512-frequency(MHz):3100
         bucket-1
           high-priority-cores-count:4
           high-priority-max-frequency(MHz):3100
           high-priority-max-avx2-frequency(MHz):3000
           high-priority-max-avx512-frequency(MHz):2900
         bucket-2
           high-priority-cores-count:6
           high-priority-max-frequency(MHz):3100
           high-priority-max-avx2-frequency(MHz):3000
           high-priority-max-avx512-frequency(MHz):2900
         speed-select-turbo-freq-clip-frequencies
           low-priority-max-frequency(MHz):2600
           low-priority-max-avx2-frequency(MHz):2400
           low-priority-max-avx512-frequency(MHz):2100

根据上面的输出,有一个 Intel(R) SST-TF 存储桶,其中有两个高优先级核心。如果仅设置了两个高优先级核心,则这些核心上的最大 turbo 频率可以提高到 3200 MHz。这比所有核心的基本 turbo 能力高 100 MHz。

反过来,对于 hackbench 工作负载,可以将两个 CPU 设置为高优先级,其余设置为低优先级。一个副作用是,一旦启用,低优先级核心的频率将被削减到较低的 2600 MHz。

启用 Intel(R) SST-TF

要启用英特尔(R) SST-TF,请执行以下操作

# intel-speed-select -c 12,13 turbo-freq enable -a
Intel(R) Speed Select Technology
Executing on CPU model: X
package-0
 die-0
   cpu-12
     turbo-freq
       enable:success
package-0
 die-0
   cpu-13
     turbo-freq
       enable:success
package--1
 die-0
   cpu-63
     turbo-freq --auto
       enable:success

在这种情况下,“-a”选项是可选的。如果设置,它将启用英特尔(R) SST-TF 功能,并使用英特尔 Speed Select 技术核心功率 (Intel(R) SST-CP) 功能将 CPU 设置为高优先级和低优先级。通过“-c”参数传递的 CPU 编号(包括其同级 CPU)将被标记为高优先级。

如果未使用 -a 选项,则在启用英特尔(R) SST-TF 之前需要执行以下步骤

  • 发现英特尔(R) SST-TF 并记下高优先级核心的存储桶和最大频率

  • 使用核心功率功能集启用 CLOS - 配置 CLOS 参数

  • 将所需的 CPU 订阅到 CLOS 组,确保将高优先级核心设置为最大频率

如果执行相同的 hackbench 工作负载,请在高优先级 CPU 上调度 hackbench 线程

#taskset -c 12,13 perf bench -r 100 sched pipe
# Running 'sched/pipe' benchmark:
# Executed 1000000 pipe operations between two processes
    Total time: 5.510 [sec]
      5.510165 usecs/op
        180826 ops/sec

这在繁忙系统上将性能提高了约 3.3%。 此处 turbostat 输出将显示 CPU 12 和 CPU 13 获得了 100 MHz 的提升。 turbostat 输出

#turbostat -c 0-13 --show Package,Core,CPU,Bzy_MHz -i 1
Package        Core    CPU     Bzy_MHz
...
0              12      12      3200
0              13      13      3200