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

參考