amd-pstate CPU 性能调整驱动

版权所有:

© 2021 Advanced Micro Devices, Inc.

作者:

Huang Rui <ray.huang@amd.com>

简介

amd-pstate 是 AMD CPU 性能调整驱动程序,它在 Linux 内核中为现代 AMD APU 和 CPU 系列引入了一种新的 CPU 频率控制机制。 新机制基于协作处理器性能控制 (CPPC),与传统的 ACPI 硬件 P 状态相比,它提供了更精细的频率管理。 目前,AMD CPU/APU 平台使用 ACPI P 状态驱动程序来管理 CPU 频率和时钟,仅在 3 个 P 状态中切换。 CPPC 取代了 ACPI P 状态控制,并允许 Linux 内核通过灵活的低延迟接口直接将性能提示传递给硬件。

amd-pstate 利用 Linux 内核调速器(例如 schedutilondemand 等)来管理性能提示,这些提示由 CPPC 硬件功能提供,该功能在内部遵循硬件规范(有关详细信息,请参阅 AMD64 架构程序员手册第 2 卷:系统编程 [1])。 目前,amd-pstate 支持根据内核调速器对某些 Zen2 和 Zen3 处理器进行基本频率控制功能,并且我们将在硬件和 SBIOS 上验证后,在将来实现更多 AMD 特定功能。

AMD CPPC 概述

协作处理器性能控制 (CPPC) 接口枚举了一个连续的、抽象的、无单位的性能值,该值的尺度与特定的性能状态/频率无关。 这是一个 ACPI 标准 [2],软件可以指定应用程序性能目标和提示,作为基础设施限制的相对目标。 AMD 处理器提供低延迟寄存器模型 (MSR),而不是 AML 代码解释器来进行性能调整。 amd-pstate 将初始化一个 struct cpufreq_driver 实例 amd_pstate_driver,其中包含管理每个性能更新行为的回调。

Highest Perf ------>+-----------------------+                         +-----------------------+
                    |                       |                         |                       |
                    |                       |                         |                       |
                    |                       |          Max Perf  ---->|                       |
                    |                       |                         |                       |
                    |                       |                         |                       |
Nominal Perf ------>+-----------------------+                         +-----------------------+
                    |                       |                         |                       |
                    |                       |                         |                       |
                    |                       |                         |                       |
                    |                       |                         |                       |
                    |                       |                         |                       |
                    |                       |                         |                       |
                    |                       |      Desired Perf  ---->|                       |
                    |                       |                         |                       |
                    |                       |                         |                       |
                    |                       |                         |                       |
                    |                       |                         |                       |
                    |                       |                         |                       |
                    |                       |                         |                       |
                    |                       |                         |                       |
                    |                       |                         |                       |
                    |                       |                         |                       |
 Lowest non-        |                       |                         |                       |
 linear perf ------>+-----------------------+                         +-----------------------+
                    |                       |                         |                       |
                    |                       |       Lowest perf  ---->|                       |
                    |                       |                         |                       |
 Lowest perf ------>+-----------------------+                         +-----------------------+
                    |                       |                         |                       |
                    |                       |                         |                       |
                    |                       |                         |                       |
         0   ------>+-----------------------+                         +-----------------------+

                                    AMD P-States Performance Scale

AMD CPPC 性能能力

最高性能 (RO)

这是单个处理器可能达到的绝对最大性能,假设条件理想。 此性能级别可能无法长期维持,并且可能只有在其他平台组件处于特定状态时才能实现; 例如,它可能需要其他处理器处于空闲状态。 这将等同于处理器支持的最高频率。

标称(保证)性能 (RO)

这是处理器在理想运行条件下可以维持的最大持续性能水平。 在没有外部约束(功率、热量等)的情况下,预计处理器能够持续维持此性能水平。 预计所有内核/处理器都能够同时维持其标称性能状态。

最低非线性性能 (RO)

这是实现非线性节能的最低性能水平,例如,由于电压和频率调整的综合影响。 高于此阈值,较低的性能水平通常应比更高的性能水平更节能。 此寄存器有效地将最有效的性能水平传递给 amd-pstate

最低性能 (RO)

这是处理器的绝对最低性能水平。 选择低于最低非线性性能水平的性能水平可能会导致效率损失,但应降低处理器的瞬时功耗。

AMD CPPC 性能控制

amd-pstate 通过这些寄存器传递性能目标。 该寄存器驱动所需性能目标的行为。

最低请求性能 (RW)

amd-pstate 指定允许的最低性能水平。

最高请求性能 (RW)

amd-pstate 指定硬件预期提供的最大性能限制。

所需性能目标 (RW)

amd-pstate 在 CPPC 性能范围内将所需目标指定为相对数字。 这可以用标称性能(基础设施最大值)的百分比表示。 低于标称持续性能水平时,所需性能表示处理器受到硬件影响的平均性能水平。 高于标称性能水平时,处理器必须至少提供请求的标称性能,并在当前运行条件允许的情况下更高。

能量性能偏好 (EPP) (RW)

如果软件希望偏向性能 (0x0) 或能源效率 (0xff),则此属性向硬件提供提示。

主要调速器支持

amd-pstate 可以与 sysfs 中的 scaling_available_governors 策略属性列出的所有(通用)调整调速器一起使用。 然后,它负责配置对应于 CPU 的策略对象,并为 CPUFreq 核心(以及附加到策略对象的调整调速器)提供有关硬件支持的最大和最小运行频率的准确信息。 用户可以检查来自 CPUFreq 核心的 scaling_cur_freq 信息。

amd-pstate 主要支持 schedutilondemand 以进行动态频率控制。 它是为了在 amd-pstate 上微调处理器配置到带有 CPU CFS 调度器的 schedutilamd-pstate 注册 adjust_perf 回调以实现类似于 CPPC 的性能更新行为。 它由 sugov_start 初始化,然后填充 CPU 的 update_util_data 指针以将 sugov_update_single_perf 分配为 CPU 调度器中的利用率更新回调函数。 CPU 调度器将调用 cpufreq_update_util 并根据利用率更新所属的 struct sugov_cpu 分配目标性能。 然后,amd-pstate 根据 CPU 调度器分配的更新所需性能。

处理器支持

如果在检测到的处理器中的 ACPI SBIOS 中不存在 _CPC 条目,则 amd-pstate 初始化将失败。 它使用 acpi_cpc_valid 检查 _CPC 的存在。 所有基于 Zen 的处理器都支持传统的 ACPI 硬件 P 状态功能,因此当 amd-pstate 初始化失败时,内核将回退以初始化 acpi-cpufreq 驱动程序。

对于 amd-pstate,有两种类型的硬件实现:一种是 完全 MSR 支持,另一种是 共享内存支持。 它可以使用 X86_FEATURE_CPPC 功能标志来指示不同的类型。 (有关详细信息,请参阅 AMD Family 19h Model 51h, Revision A1 处理器的处理器编程参考 (PPR) [3]。)amd-pstate 旨为不同的硬件实现注册不同的 static_call 实例。

目前,某些 Zen2 和 Zen3 处理器支持 amd-pstate。 将来,它将受到越来越多的 AMD 处理器的支持。

完全 MSR 支持

一些新的 Zen3 处理器(例如 Cezanne)直接提供 MSR 寄存器,同时设置 X86_FEATURE_CPPC CPU 功能标志。 amd-pstate 可以处理 MSR 寄存器以在 CPUFreq 中实现快速切换功能,从而可以减少中断上下文中频率控制的延迟。 具有 pstate_xxx 前缀的函数表示对 MSR 寄存器的操作。

共享内存支持

如果未设置 X86_FEATURE_CPPC CPU 功能标志,则处理器支持共享内存解决方案。 在这种情况下,amd-pstate 使用 cppc_acpi 辅助方法来实现在 static_call 上定义的回调函数。 带有 cppc_xxx 前缀的函数表示用于共享内存解决方案的 ACPI CPPC 辅助操作。

AMD P-States 和 ACPI 硬件 P-States 始终可以在一个处理器中得到支持。 但是 AMD P-States 具有更高的优先级,如果使用 MSR_AMD_CPPC_ENABLEcppc_set_enable 启用,它将响应来自 AMD P-States 的请求。

sysfs 中的用户空间接口 - 策略控制

amd-pstatesysfs 中公开了多个全局属性(文件)以控制其系统级功能。 它们位于 /sys/devices/system/cpu/cpufreq/policyX/ 目录中,并影响所有 CPU。

root@hr-test1:/home/ray# ls /sys/devices/system/cpu/cpufreq/policy0/*amd*
/sys/devices/system/cpu/cpufreq/policy0/amd_pstate_highest_perf
/sys/devices/system/cpu/cpufreq/policy0/amd_pstate_lowest_nonlinear_freq
/sys/devices/system/cpu/cpufreq/policy0/amd_pstate_max_freq

amd_pstate_highest_perf / amd_pstate_max_freq

驱动程序允许设置的最大 CPPC 性能和 CPU 频率,以支持的最大 CPPC 性能水平的百分比表示(AMD CPPC 性能能力中支持的最高性能)。 在某些 ASIC 中,最高的 CPPC 性能不是 _CPC 表中的性能,因此我们需要将其公开给 sysfs。 如果 boost 未激活但仍受支持,则此最大频率将大于 cpuinfo 中的频率。 此属性是只读的。

amd_pstate_lowest_nonlinear_freq

驱动程序允许设置的最低非线性 CPPC CPU 频率,以支持的最大 CPPC 性能水平的百分比表示。 (请参阅 AMD CPPC 性能能力中的最低非线性性能。)此属性是只读的。

amd_pstate_hw_prefcore

平台是否支持首选核心功能以及是否已启用该功能。 此属性是只读的。

amd_pstate_prefcore_ranking

核心的性能排名。 此数字没有任何单位,但在读取时,较大的数字是首选。 这可以根据平台条件在运行时更改。 此属性是只读的。

energy_performance_available_preferences

可用于此系统上的 energy_performance_preference 的所有受支持的 EPP 偏好的列表。 这些配置文件表示提供给底层固件的有关用户所需的能量与效率权衡的不同提示。 default 表示 epp 值由平台固件设置。 此属性是只读的。

energy_performance_preference

可以从此属性读取当前的能量性能偏好。 用户可以根据能量或性能需求更改当前偏好。 请从 energy_performance_available_preferences 属性获取所有支持的配置文件列表,当平台固件启用 EPP 功能时,所有配置文件都是定义在 0 到 255 之间的整数值,如果 EPP 功能被禁用,驱动程序将忽略写入的值。 此属性是读写的。

boost boost sysfs 属性提供对 CPU 核心性能提升的控制,允许用户管理 CPU 的最大频率限制。 此属性可用于启用或禁用各个 CPU 上的提升功能。

启用提升功能后,CPU 可以动态地将其频率提高到基本频率以上,从而为要求苛刻的工作负载提供增强的性能。 另一方面,禁用提升功能会将 CPU 限制为以基本频率运行,这在某些情况下可能需要优先考虑电源效率或管理温度。

要操作 boost 属性,用户可以写入值 0 以禁用提升或 1 以启用它,对于使用 sysfs 路径 /sys/devices/system/cpu/cpuX/cpufreq/boost 的相应 CPU,其中 X 表示 CPU 编号。

可以从 /sys/devices/system/cpu/cpuX/acpi_cppc/ 读取其他性能和频率值,请参阅 CPPC

amd-pstate vs acpi-cpufreq

acpi-cpufreq 支持的大多数 AMD 平台上,平台固件提供的 ACPI 表用于 CPU 性能调整,但在 AMD 处理器上仅提供 3 个 P 状态。 但是,在现代 AMD APU 和 CPU 系列上,硬件根据 ACPI 协议提供协作处理器性能控制,并针对 AMD 平台对其进行自定义。 也就是说,精细和连续的频率范围,而不是传统的硬件 P 状态。 amd-pstate 是内核模块,它在大多数未来的 AMD 平台上支持新的 AMD P-States 机制。 AMD P-States 机制是在 AMD 处理器上提高性能和能源效率的频率管理方法。

amd-pstate 驱动程序操作模式

amd_pstate CPPC 具有 3 种操作模式:自主(主动)模式、非自主(被动)模式和引导自主(引导)模式。 可以通过不同的内核参数选择主动/被动/引导模式。

  • 在自主模式下,平台忽略所需的性能级别请求,并且仅考虑设置为最小、最大和能量性能偏好寄存器的值。

  • 在非自主模式下,平台直接通过所需的性能寄存器从操作系统获取所需的性能级别。

  • 在引导自主模式下,平台根据当前工作负载自主设置运行性能级别,并且在操作系统通过最小和最大性能寄存器设置的限制范围内。

主动模式

amd_pstate=active

这是由 amd_pstate_epp 驱动程序实现的底层固件控制模式,并将 amd_pstate=active 传递给命令行中的内核。 在此模式下,如果软件希望偏向性能 (0x0) 或能源效率 (0xff),则 amd_pstate_epp 驱动程序会向 CPPC 固件提供提示。 然后 CPPC 电源算法将计算运行时工作负载,并根据电源和热量、核心电压以及其他一些硬件条件来调整实时核心频率。

被动模式

amd_pstate=passive

如果将 amd_pstate=passive 传递给命令行中的内核,则将启用它。 在此模式下,amd_pstate 驱动程序软件在 CPPC 性能范围内将所需的 QoS 目标指定为相对数字。 这可以用标称性能(基础设施最大值)的百分比表示。 低于标称持续性能水平时,所需性能表示处理器受到性能降低容差寄存器影响的平均性能水平。 高于标称性能水平时,处理器必须至少提供请求的标称性能,并在当前运行条件允许的情况下更高。

引导模式

amd_pstate=guided

如果将 amd_pstate=guided 传递给内核命令行选项,则此模式将被激活。 在此模式下,驱动程序请求最小和最大性能级别,并且平台自主地在此范围内选择适合当前工作负载的性能级别。

amd-pstate 首选核心

核心频率受半导体工艺变化的影响。 并非所有核心都能够在遵守基础设施限制的情况下达到最大频率。 因此,AMD 重新定义了部件的最大频率概念。 这意味着一小部分核心可以达到最大频率。 为了找到给定场景的最佳进程调度策略,操作系统需要知道平台通过 CPPC 接口的最高性能能力寄存器通知的核心顺序。

amd-pstate 首选核心使调度程序更喜欢在可以用较低电压实现更高频率的核心上进行调度。 首选核心排名可以根据工作负载、平台条件、热量和老化情况动态变化。

优先级度量将由 amd-pstate 驱动程序初始化。 amd-pstate 驱动程序还将确定平台是否支持 amd-pstate 首选核心。

amd-pstate 驱动程序将在系统启动时提供初始核心排序。 平台使用 CPPC 接口将核心排名传递给操作系统和调度程序,以确保操作系统首先选择具有最高性能的核心来调度进程。 当 amd-pstate 驱动程序收到带有最高性能更改的消息时,它将更新核心排名并设置 CPU 的优先级。

amd-pstate 首选核心开关

内核参数

amd-pstate peferred core`` 具有两种状态:启用和禁用。 可以通过不同的内核参数选择启用/禁用状态。 默认启用 amd-pstate 首选核心。

amd_prefcore=disable

对于支持 amd-pstate 首选核心的系统,核心排名将始终由平台通告。 但是操作系统可以选择通过内核参数 amd_prefcore=disable 忽略该排名。

sysfs 中的用户空间接口 - 常规

全局属性

amd-pstatesysfs 中公开了多个全局属性(文件)以控制其系统级功能。 它们位于 /sys/devices/system/cpu/amd_pstate/ 目录中,并影响所有 CPU。

状态

驱动程序的操作模式:“active”、“passive”、“guided” 或 “disable”。

“active”

驱动程序功能正常,并且处于 active mode

“passive”

驱动程序功能正常,并且处于 passive mode

“guided”

驱动程序功能正常,并且处于 guided mode

“disable”

驱动程序已取消注册,现在无法正常工作。

可以写入此属性以更改驱动程序的操作模式或取消注册它。 写入它的字符串必须是它的可能值之一,如果成功,将这些值之一写入 sysfs 文件将导致驱动程序切换到由该字符串表示的操作模式 - 或者在 “disable” 情况下取消注册。

prefcore

驱动程序的首选核心状态:“enabled” 或 “disabled”。

“enabled”

启用 amd-pstate 首选核心。

“disabled”

禁用 amd-pstate 首选核心

此属性是只读的,用于检查由内核参数设置的首选核心的状态。

cpupower 工具对 amd-pstate 的支持

amd-pstate 受到 cpupower 工具的支持,该工具可用于转储频率信息。正在开发中,以支持使用此工具对新的 amd-pstate 模块进行越来越多的操作。

root@hr-test1:/home/ray# cpupower frequency-info
analyzing CPU 0:
  driver: amd-pstate
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency: 131 us
  hardware limits: 400 MHz - 4.68 GHz
  available cpufreq governors: ondemand conservative powersave userspace performance schedutil
  current policy: frequency should be within 400 MHz and 4.68 GHz.
                  The governor "schedutil" may decide which speed to use
                  within this range.
  current CPU frequency: Unable to call hardware
  current CPU frequency: 4.02 GHz (asserted by call to kernel)
  boost state support:
    Supported: yes
    Active: yes
    AMD PSTATE Highest Performance: 166. Maximum Frequency: 4.68 GHz.
    AMD PSTATE Nominal Performance: 117. Nominal Frequency: 3.30 GHz.
    AMD PSTATE Lowest Non-linear Performance: 39. Lowest Non-linear Frequency: 1.10 GHz.
    AMD PSTATE Lowest Performance: 15. Lowest Frequency: 400 MHz.

诊断和调整

跟踪事件

有两个静态跟踪事件可用于 amd-pstate 诊断。其中一个是通常由 CPUFreq 使用的 cpu_frequency 跟踪事件,另一个是特定于 amd-pstateamd_pstate_perf 跟踪事件。以下 shell 命令序列可用于启用它们并查看其输出(如果内核配置为支持事件跟踪)。

root@hr-test1:/home/ray# cd /sys/kernel/tracing/
root@hr-test1:/sys/kernel/tracing# echo 1 > events/amd_cpu/enable
root@hr-test1:/sys/kernel/tracing# cat trace
# tracer: nop
#
# entries-in-buffer/entries-written: 47827/42233061   #P:2
#
#                                _-----=> irqs-off
#                               / _----=> need-resched
#                              | / _---=> hardirq/softirq
#                              || / _--=> preempt-depth
#                              ||| /     delay
#           TASK-PID     CPU#  ||||   TIMESTAMP  FUNCTION
#              | |         |   ||||      |         |
         <idle>-0       [015] dN...  4995.979886: amd_pstate_perf: amd_min_perf=85 amd_des_perf=85 amd_max_perf=166 cpu_id=15 changed=false fast_switch=true
         <idle>-0       [007] d.h..  4995.979893: amd_pstate_perf: amd_min_perf=85 amd_des_perf=85 amd_max_perf=166 cpu_id=7 changed=false fast_switch=true
            cat-2161    [000] d....  4995.980841: amd_pstate_perf: amd_min_perf=85 amd_des_perf=85 amd_max_perf=166 cpu_id=0 changed=false fast_switch=true
           sshd-2125    [004] d.s..  4995.980968: amd_pstate_perf: amd_min_perf=85 amd_des_perf=85 amd_max_perf=166 cpu_id=4 changed=false fast_switch=true
         <idle>-0       [007] d.s..  4995.980968: amd_pstate_perf: amd_min_perf=85 amd_des_perf=85 amd_max_perf=166 cpu_id=7 changed=false fast_switch=true
         <idle>-0       [003] d.s..  4995.980971: amd_pstate_perf: amd_min_perf=85 amd_des_perf=85 amd_max_perf=166 cpu_id=3 changed=false fast_switch=true
         <idle>-0       [011] d.s..  4995.980996: amd_pstate_perf: amd_min_perf=85 amd_des_perf=85 amd_max_perf=166 cpu_id=11 changed=false fast_switch=true

cpu_frequency 跟踪事件将由 schedutil 缩放调控器(对于它附加的策略)或由 CPUFreq 核心(对于具有其他缩放调控器的策略)触发。

Tracer 工具

amd_pstate_tracer.py 可以记录和解析 amd-pstate 跟踪日志,然后生成性能图。此实用程序可用于调试和调整 amd-pstate 驱动程序的性能。tracer 工具需要导入 intel pstate tracer。

Tracer 工具位于 linux/tools/power/x86/amd_pstate_tracer 中。 它可以通过两种方式使用。如果跟踪文件可用,则使用命令直接解析该文件

./amd_pstate_trace.py [-c cpus] -t <trace_file> -n <test_name>

或使用 root 权限生成跟踪文件,然后使用命令解析和绘制

sudo ./amd_pstate_trace.py [-c cpus] -n <test_name> -i <interval> [-m kbytes]

测试结果可以在 results/test_name 中找到。以下是关于部分输出的示例。

common_cpu  common_secs  common_usecs  min_perf  des_perf  max_perf  freq    mperf   apef    tsc       load   duration_ms  sample_num  elapsed_time  common_comm
CPU_005     712          116384        39        49        166       0.7565  9645075 2214891 38431470  25.1   11.646       469         2.496         kworker/5:0-40
CPU_006     712          116408        39        49        166       0.6769  8950227 1839034 37192089  24.06  11.272       470         2.496         kworker/6:0-1264

amd-pstate 的单元测试

amd-pstate-ut 是用于测试 amd-pstate 驱动程序的测试模块。

  • 它可以帮助所有用户验证其处理器支持(SBIOS/固件或硬件)。

  • 内核可以进行基本的功能测试,以避免内核在更新期间发生回归。

  • 我们可以引入更多的功能或性能测试来对齐结果,这将有利于功耗和性能规模的优化。

  1. 测试用例描述

    1). 基本测试

    测试 amd-pstate 驱动程序的前提条件和基本功能。

    索引

    函数

    描述

    1

    amd_pstate_ut_acpi_cpc_valid

    检查 _CPC 对象是否存在于 SBIOS 中。

    详细信息请参考 处理器支持

    2

    amd_pstate_ut_check_enabled

    检查是否启用了 AMD P-State。

    AMD P-States 和 ACPI 硬件 P-States 始终可以在一个处理器中得到支持。 但是 AMD P-States 具有更高的优先级,如果使用 MSR_AMD_CPPC_ENABLEcppc_set_enable 启用,它将响应来自 AMD P-States 的请求。

    3

    amd_pstate_ut_check_perf

    检查每个性能值是否合理。
    highest_perf >= nominal_perf > lowest_nonlinear_perf > lowest_perf > 0。

    4

    amd_pstate_ut_check_freq

    检查每个频率值以及设置支持 boost 模式时的最大频率是否合理。
    max_freq >= nominal_freq > lowest_nonlinear_freq > min_freq > 0
    如果 boost 未激活但受支持,则此最大频率将大于 cpuinfo 中的频率。

    2). Tbench 测试

    在指定的调控器下运行 tbench 基准测试时,测试和监控 cpu 的变化。 这些变化包括期望的性能、频率、负载、性能、能量等。 指定的调控器是 ondemand 或 schedutil。 也可以在 acpi-cpufreq 内核驱动程序上测试 Tbench 以进行比较。

    3). Gitsource 测试

    在指定的调控器下运行 gitsource 基准测试时,测试和监控 cpu 的变化。 这些变化包括期望的性能、频率、负载、时间、能量等。 指定的调控器是 ondemand 或 schedutil。 也可以在 acpi-cpufreq 内核驱动程序上测试 Gitsource 以进行比较。

  2. 如何执行测试

    我们使用 kselftest 框架中的测试模块来实现它。 我们创建 amd-pstate-ut 模块并将其绑定到 kselftest。(有关详细信息,请参阅 Linux Kernel Selftests [4])。

    1). 构建

    • 打开 CONFIG_X86_AMD_PSTATE 配置选项。

    • CONFIG_X86_AMD_PSTATE_UT 配置选项设置为 M。

    • make project

    • make selftest

      $ cd linux
      $ make -C tools/testing/selftests
      
    • make perf

      $ cd tools/perf/
      $ make
      

    2). 安装和步骤

    $ make -C tools/testing/selftests install INSTALL_PATH=~/kselftest
    $ cp tools/perf/perf /usr/bin/perf
    $ sudo ./kselftest/run_kselftest.sh -c amd-pstate
    

    3). 指定的测试用例

    $ cd ~/kselftest/amd-pstate
    $ sudo ./run.sh -t basic
    $ sudo ./run.sh -t tbench
    $ sudo ./run.sh -t tbench -m acpi-cpufreq
    $ sudo ./run.sh -t gitsource
    $ sudo ./run.sh -t gitsource -m acpi-cpufreq
    $ ./run.sh --help
    ./run.sh: illegal option -- -
    Usage: ./run.sh [OPTION...]
            [-h <help>]
            [-o <output-file-for-dump>]
            [-c <all: All testing,
                 basic: Basic testing,
                 tbench: Tbench testing,
                 gitsource: Gitsource testing.>]
            [-t <tbench time limit>]
            [-p <tbench process number>]
            [-l <loop times for tbench>]
            [-i <amd tracer interval>]
            [-m <comparative test: acpi-cpufreq>]
    

    4). 结果

    • basic

    完成测试后,您将获得以下日志信息

    $ dmesg | grep "amd_pstate_ut" | tee log.txt
    [12977.570663] amd_pstate_ut: 1    amd_pstate_ut_acpi_cpc_valid  success!
    [12977.570673] amd_pstate_ut: 2    amd_pstate_ut_check_enabled   success!
    [12977.571207] amd_pstate_ut: 3    amd_pstate_ut_check_perf      success!
    [12977.571212] amd_pstate_ut: 4    amd_pstate_ut_check_freq      success!
    
    • tbench

    完成测试后,您将获得 selftest.tbench.csv 和 png 图像。 selftest.tbench.csv 文件包含原始数据和比较测试的下降。 png 图像显示了每个测试的性能、能量和每瓦性能。 打开 selftest.tbench.csv

    调控器

    轮数

    期望性能

    频率

    负载

    性能

    能量

    每瓦性能

    单位

    GHz

    MB/s

    J

    MB/J

    amd-pstate-ondemand

    1

    2504.05

    1563.67

    158.5378

    amd-pstate-ondemand

    2

    2243.64

    1430.32

    155.2941

    amd-pstate-ondemand

    3

    2183.88

    1401.32

    154.2860

    amd-pstate-ondemand

    平均

    2310.52

    1465.1

    156.1268

    amd-pstate-schedutil

    1

    165.329

    1.62257

    99.798

    2136.54

    1395.26

    151.5971

    amd-pstate-schedutil

    2

    166

    1.49761

    99.9993

    2100.56

    1380.5

    150.6377

    amd-pstate-schedutil

    3

    166

    1.47806

    99.9993

    2084.12

    1375.76

    149.9737

    amd-pstate-schedutil

    平均

    165.776

    1.53275

    99.9322

    2107.07

    1383.84

    150.7399

    acpi-cpufreq-ondemand

    1

    2529.9

    1564.4

    160.0997

    acpi-cpufreq-ondemand

    2

    2249.76

    1432.97

    155.4297

    acpi-cpufreq-ondemand

    3

    2181.46

    1406.88

    153.5060

    acpi-cpufreq-ondemand

    平均

    2320.37

    1468.08

    156.4741

    acpi-cpufreq-schedutil

    1

    2137.64

    1385.24

    152.7723

    acpi-cpufreq-schedutil

    2

    2107.05

    1372.23

    152.0138

    acpi-cpufreq-schedutil

    3

    2085.86

    1365.35

    151.2433

    acpi-cpufreq-schedutil

    平均

    2110.18

    1374.27

    152.0136

    acpi-cpufreq-ondemand VS acpi-cpufreq-schedutil

    比较(%)

    -9.0584

    -6.3899

    -2.8506

    amd-pstate-ondemand VS amd-pstate-schedutil

    比较(%)

    8.8053

    -5.5463

    -3.4503

    acpi-cpufreq-ondemand VS amd-pstate-ondemand

    比较(%)

    -0.4245

    -0.2029

    -0.2219

    acpi-cpufreq-schedutil VS amd-pstate-schedutil

    比较(%)

    -0.1473

    0.6963

    -0.8378

    • gitsource

    完成测试后,您将获得 selftest.gitsource.csv 和 png 图像。 selftest.gitsource.csv 文件包含原始数据和比较测试的下降。 png 图像显示了每个测试的性能、能量和每瓦性能。 打开 selftest.gitsource.csv

    调控器

    轮数

    期望性能

    频率

    负载

    时间

    能量

    每瓦性能

    单位

    GHz

    J

    1/J

    amd-pstate-ondemand

    1

    50.119

    2.10509

    23.3076

    475.69

    865.78

    0.001155027

    amd-pstate-ondemand

    2

    94.8006

    1.98771

    56.6533

    467.1

    839.67

    0.001190944

    amd-pstate-ondemand

    3

    76.6091

    2.53251

    43.7791

    467.69

    855.85

    0.001168429

    amd-pstate-ondemand

    平均

    73.8429

    2.20844

    41.2467

    470.16

    853.767

    0.001171279

    amd-pstate-schedutil

    1

    165.919

    1.62319

    98.3868

    464.17

    866.8

    0.001153668

    amd-pstate-schedutil

    2

    165.97

    1.31309

    99.5712

    480.15

    880.4

    0.001135847

    amd-pstate-schedutil

    3

    165.973

    1.28448

    99.9252

    481.79

    867.02

    0.001153375

    amd-pstate-schedutil

    平均

    165.954

    1.40692

    99.2944

    475.37

    871.407

    0.001147569

    acpi-cpufreq-ondemand

    1

    2379.62

    742.96

    0.001345967

    acpi-cpufreq-ondemand

    2

    441.74

    817.49

    0.001223256

    acpi-cpufreq-ondemand

    3

    455.48

    820.01

    0.001219497

    acpi-cpufreq-ondemand

    平均

    425.613

    793.487

    0.001260260

    acpi-cpufreq-schedutil

    1

    459.69

    838.54

    0.001192548

    acpi-cpufreq-schedutil

    2

    466.55

    830.89

    0.001203528

    acpi-cpufreq-schedutil

    3

    470.38

    837.32

    0.001194286

    acpi-cpufreq-schedutil

    平均

    465.54

    835.583

    0.001196769

    acpi-cpufreq-ondemand VS acpi-cpufreq-schedutil

    比较(%)

    9.3810

    5.3051

    -5.0379

    amd-pstate-ondemand VS amd-pstate-schedutil

    比较(%)

    124.7392

    -36.2934

    140.7329

    1.1081

    2.0661

    -2.0242

    acpi-cpufreq-ondemand VS amd-pstate-ondemand

    比较(%)

    10.4665

    7.5968

    -7.0605

    acpi-cpufreq-schedutil VS amd-pstate-schedutil

    比较(%)

    2.1115

    4.2873

    -4.1110

参考