GPU 功耗/散熱控制和監控¶
HWMON 介面¶
amdgpu 驅動程式公開了以下感測器介面
GPU 溫度(透過片上感測器)
GPU 電壓
北橋電壓(僅限 APU)
GPU 功耗
GPU 風扇
GPU gfx/計算引擎時鐘
GPU 記憶體時鐘(僅限 dGPU)
GPU 溫度的 hwmon 介面
temp[1-3]_input:片上 GPU 溫度,單位為千分之一攝氏度 - 只有 SOC15 dGPU 支援 temp2_input 和 temp3_input
temp[1-3]_label:溫度通道標籤 - 只有 SOC15 dGPU 支援 temp2_label 和 temp3_label
temp[1-3]_crit:溫度臨界最大值,單位為千分之一攝氏度 - 只有 SOC15 dGPU 支援 temp2_crit 和 temp3_crit
temp[1-3]_crit_hyst:臨界限制的溫度滯後,單位為千分之一攝氏度 - 只有 SOC15 dGPU 支援 temp2_crit_hyst 和 temp3_crit_hyst
temp[1-3]_emergency:溫度緊急最大值(ASIC 關機),單位為千分之一攝氏度 - 只有 SOC15 dGPU 支援這些值
GPU 電壓的 hwmon 介面
in0_input:GPU 上的電壓,單位為毫伏
in1_input:北橋上的電壓,單位為毫伏
GPU 功耗的 hwmon 介面
power1_average:SoC 使用的平均功耗,單位為微瓦。 在 APU 上,這包括 CPU。
power1_input:SoC 使用的瞬時功耗,單位為微瓦。 在 APU 上,這包括 CPU。
power1_cap_min:支援的最小上限,單位為微瓦
power1_cap_max:支援的最大上限,單位為微瓦
power1_cap:選定的功耗上限,單位為微瓦
GPU 風扇的 hwmon 介面
pwm1:脈衝寬度調製風扇級別 (0-255)
pwm1_enable:脈衝寬度調製風扇控制方法(0:無風扇速度控制,1:使用 pwm 介面手動風扇速度控制,2:自動風扇速度控制)
pwm1_min:脈衝寬度調製風扇控制最低級別 (0)
pwm1_max:脈衝寬度調製風扇控制最高級別 (255)
fan1_min:最小值,單位:轉/分鐘 (RPM)
fan1_max:最大值,單位:轉/分鐘 (RPM)
fan1_input:風扇轉速,單位為 RPM
fan[1-*]_target:所需風扇轉速,單位:轉/分鐘 (RPM)
fan[1-*]_enable:啟用或停用感測器。1:啟用 0:停用
- 注意:請勿同時透過“pwm1”和“fan[1-*]_target”介面設定風扇速度。
這將導致前者被覆蓋。
GPU 時鐘的 hwmon 介面
freq1_input:gfx/計算時鐘,單位為赫茲
freq2_input:記憶體時鐘,單位為赫茲
您可以使用像 sensors 這樣的 hwmon 工具來檢視系統上的此資訊。
GPU sysfs 電源狀態介面¶
GPU 電源控制透過 sysfs 檔案公開。
power_dpm_state¶
power_dpm_state 檔案是一個遺留介面,僅用於向後相容。 amdgpu 驅動程式提供了一個 sysfs API,用於調整某些與電源相關的引數。 power_dpm_state 檔案用於此目的。 它接受以下引數
battery (電池)
balanced (平衡)
performance (效能)
battery (電池)
在較舊的 GPU 上,vbios 為電池操作提供了一個特殊的電源狀態。 選擇電池切換到此狀態。 較新的 GPU 不再提供此功能,因此該選項在這種情況下不起作用。
balanced (平衡)
在較舊的 GPU 上,vbios 為平衡操作提供了一個特殊的電源狀態。 選擇平衡切換到此狀態。 較新的 GPU 不再提供此功能,因此該選項在這種情況下不起作用。
performance (效能)
在較舊的 GPU 上,vbios 為效能操作提供了一個特殊的電源狀態。 選擇效能切換到此狀態。 較新的 GPU 不再提供此功能,因此該選項在這種情況下不起作用。
power_dpm_force_performance_level¶
amdgpu 驅動程式提供了一個 sysfs API,用於調整某些與電源相關的引數。 power_dpm_force_performance_level 檔案用於此目的。 它接受以下引數
auto (自動)
low (低)
high (高)
manual (手動)
profile_standard (標準配置檔案)
profile_min_sclk (最小 sclk 配置檔案)
profile_min_mclk (最小 mclk 配置檔案)
profile_peak (峰值配置檔案)
auto (自動)
選擇 auto 時,驅動程式將嘗試動態選擇驅動程式中當前狀況的最佳功耗配置檔案。
low (低)
選擇 low 時,時鐘將被強制設定為最低功耗狀態。
high (高)
選擇 high 時,時鐘將被強制設定為最高功耗狀態。
manual (手動)
選擇 manual 時,使用者可以透過 sysfs pp_dpm_mclk、pp_dpm_sclk 和 pp_dpm_pcie 檔案手動調整每個時鐘域啟用的電源狀態,並透過 pp_power_profile_mode sysfs 檔案調整電源狀態轉換啟發法。
profile_standard profile_min_sclk profile_min_mclk profile_peak
選擇分析模式時,時鐘和功耗門控將被停用,並且時鐘將設定為不同的分析案例。 建議使用此模式來分析特定的工作負載,在這種情況下,您不希望時鐘或功耗門控的時鐘波動干擾您的結果。 profile_standard 將時鐘設定為一個固定的時鐘級別,該級別因 ASIC 而異。 profile_min_sclk 強制 sclk 達到最低級別。 profile_min_mclk 強制 mclk 達到最低級別。 profile_peak 將所有時鐘(mclk、sclk、pcie)設定為最高級別。
pp_table¶
amdgpu 驅動程式提供了一個 sysfs API,用於上傳新的 powerplay 表。 pp_table 檔案用於此目的。 讀取該檔案將轉儲當前的 power play 表。 寫入該檔案將嘗試上傳一個新的 powerplay 表,並使用該新表重新初始化 powerplay。
pp_od_clk_voltage¶
amdgpu 驅動程式提供了一個 sysfs API,用於調整電源狀態中每個功率級別的時鐘和電壓。 pp_od_clk_voltage 用於此目的。
請注意,實際公開的是記憶體控制器時鐘頻率,而不是 DRAM 的有效記憶體時鐘頻率。 要轉換它,請使用以下公式
時鐘轉換 (Mhz)
HBM:effective_memory_clock = memory_controller_clock * 1
G5:effective_memory_clock = memory_controller_clock * 1
G6:effective_memory_clock = memory_controller_clock * 2
DRAM 資料速率 (MT/s)
HBM:effective_memory_clock * 2 = data_rate
G5:effective_memory_clock * 4 = data_rate
G6:effective_memory_clock * 8 = data_rate
頻寬 (MB/s)
data_rate * vram_bit_width / 8 = memory_bandwidth
一些例子
RX460 上的 G5
memory_controller_clock = 1750 Mhz
effective_memory_clock = 1750 Mhz * 1 = 1750 Mhz
資料速率 = 1750 * 4 = 7000 MT/s
記憶體頻寬 = 7000 * 128 位 / 8 = 112000 MB/s
RX5700 上的 G6
memory_controller_clock = 875 Mhz
effective_memory_clock = 875 Mhz * 2 = 1750 Mhz
資料速率 = 1750 * 8 = 14000 MT/s
記憶體頻寬 = 14000 * 256 位 / 8 = 448000 MB/s
< 對於 Vega10 和以前的 ASIC >
讀取該檔案將顯示
引擎時鐘級別和電壓列表,標記為 OD_SCLK
記憶體時鐘級別和電壓列表,標記為 OD_MCLK
sclk、mclk 和電壓的有效範圍列表,標記為 OD_RANGE
要手動調整這些設定,首先使用 power_dpm_force_performance_level 選擇手動模式。 透過向檔案寫入包含“s/m level clock voltage”的字串,為每個級別輸入一個新值。 例如,“s 1 500 820”會將 sclk 級別 1 更新為 500 MHz,電壓為 820 mV; “m 0 350 810”會將 mclk 級別 0 更新為 350 MHz,電壓為 810 mV。 在根據需要編輯了所有狀態後,向該檔案寫入“c”(提交)以提交您的更改。 如果您想重置為預設的功率級別,請向該檔案寫入“r”(重置)以重置它們。
< 對於 Vega20 和更新的 ASIC >
讀取該檔案將顯示
標記為 OD_SCLK 的最小和最大引擎時鐘
標記為 OD_MCLK 的最小(Vega20 和 Navi1x 不可用)和最大記憶體時鐘
標記為 OD_VDDC_CURVE 的三個 <頻率,電壓> 點。 它們可用於校準 sclk 電壓曲線。 這適用於 Vega20 和 NV1X。
應用於目標電壓計算的電壓偏移(以 mV 為單位)。 這適用於 Sienna Cichlid、Navy Flounder、Dimgrey Cavefish 和一些後來的 SMU13 ASIC。 對於這些 ASIC,目標電壓計算可以透過“電壓 = 根據 v/f 曲線計算的電壓 + 過驅動 vddgfx 偏移”來說明
sclk、mclk、電壓曲線點或電壓偏移的有效範圍列表,標記為 OD_RANGE
< 對於 APU >
讀取該檔案將顯示
標記為 OD_SCLK 的最小和最大引擎時鐘
標記為 OD_RANGE 的 sclk 的有效範圍列表
< 對於 VanGogh >
讀取該檔案將顯示
標記為 OD_SCLK 的最小和最大引擎時鐘
標記為 OD_CCLK 的最小和最大核心時鐘
標記為 OD_RANGE 的 sclk 和 cclk 的有效範圍列表
要手動調整這些設定
首先使用 power_dpm_force_performance_level 選擇手動模式
對於時鐘頻率設定,透過向檔案寫入包含“s/m index clock”的字串來輸入新值。 如果要設定最小時鐘,則索引應為 0。 如果要設定最大時鐘,則索引應為 1。 例如,“s 0 500”會將最小 sclk 更新為 500 MHz。 “m 1 800”會將最大 mclk 更新為 800Mhz。 對於 VanGogh 上的核心時鐘,該字串包含“p core index clock”。 例如,“p 2 0 800”會將核心 2 上的最小核心時鐘設定為 800Mhz。
對於 Vega20 和 NV1X 支援的 sclk 電壓曲線,透過向檔案寫入包含“vc point clock voltage”的字串來輸入新值。 這些點由 0、1 和 2 索引。 例如,“vc 0 300 600”會將 point1 更新為時鐘設定為 300Mhz,電壓為 600mV。 “vc 2 1000 1000”會將 point3 更新為時鐘設定為 1000Mhz,電壓為 1000mV。
對於 Sienna Cichlid、Navy Flounder、Dimgrey Cavefish 和一些後來的 SMU13 ASIC 支援的電壓偏移,透過寫入包含“vo offset”的字串來輸入新值。 例如,“vo -10”會將應用於整個 v/f 曲線線的額外電壓偏移更新為 -10mv。
在根據需要編輯了所有狀態後,向該檔案寫入“c”(提交)以提交您的更改
如果您想重置為預設的功率級別,請向該檔案寫入“r”(重置)以重置它們
pp_dpm_*¶
amdgpu 驅動程式提供了一個 sysfs API,用於調整給定電源狀態啟用的功率級別。 檔案 pp_dpm_sclk、pp_dpm_mclk、pp_dpm_socclk、pp_dpm_fclk、pp_dpm_dcefclk 和 pp_dpm_pcie 用於此目的。
pp_dpm_socclk 和 pp_dpm_dcefclk 介面僅適用於 Vega10 和更新的 ASIC。 pp_dpm_fclk 介面僅適用於 Vega20 和更新的 ASIC。
讀取檔案將顯示電源狀態中可用的功率級別以及這些級別的時鐘資訊。 如果深度睡眠應用於時鐘,則該級別將用特殊級別“S:”表示。 例如,
S: 19Mhz *
0: 615Mhz
1: 800Mhz
2: 888Mhz
3: 1000Mhz
要手動調整這些狀態,首先使用 power_dpm_force_performance_level 選擇手動模式。 其次,透過輸入包含“echo xx xx xx > pp_dpm_sclk/mclk/pcie”的字串來為每個級別輸入一個新值。 例如,
echo "4 5 6" > pp_dpm_sclk
將啟用 sclk 級別 4、5 和 6。
注意:現在不支援更改為 dcefclk 最大 dpm 級別
pp_power_profile_mode¶
amdgpu 驅動程式提供了一個 sysfs API,用於調整與電源狀態中電源級別之間切換相關的啟發法。 pp_power_profile_mode 檔案用於此目的。
讀取此檔案會輸出所有預定義的功率配置檔案以及該配置檔案的相關啟發法設定的列表。
要選擇一個配置檔案或建立一個自定義配置檔案,首先使用 power_dpm_force_performance_level 選擇手動模式。 將預定義配置檔案的編號寫入 pp_power_profile_mode 將啟用這些啟發法。 要建立一組自定義啟發法,請向該檔案寫入一個以自定義配置檔案編號開頭的數字字串,以及每個啟發法引數的設定。 由於 ASIC 系列之間的差異,啟發法引數因系列而異。 此外,您可以將自定義啟發法應用於不同的時鐘域。 每個時鐘域都被視為一個不同的操作,因此如果您修改了 gfxclk 啟發法,然後又修改了 memclk 啟發法,則所有自定義啟發法都將被保留,直到您切換到另一個配置檔案為止。
pm_policy¶
某些 SOC 可以支援不同的電源策略來最佳化應用程式效能。 但是,此策略僅在 SOC 級別提供,而不是在每個程序級別提供。 這在整個 SOC 用於專用工作負載時尤其有用。
amdgpu 驅動程式提供了一個 sysfs API,用於選擇策略。 目前,此介面僅支援兩種型別的策略。
Pstate 策略選擇 - 這是為了選擇不同的 Pstate 配置檔案,這些配置檔案決定了時鐘/節流首選項。
XGMI PLPD 策略選擇 - 當多個裝置透過 XGMI 連線時,這有助於選擇應用於每個鏈路斷電的策略。
可用的策略和策略級別因 SOC 而異。 它們可以在 pm_policy 節點目錄下檢視。 如果 SOC 不支援任何策略,則此節點將不可用。 支援的不同策略將作為 pm_policy 下的單獨節點提供。
cat /sys/bus/pci/devices/.../pm_policy/<policy_type>
讀取策略檔案會顯示支援的不同級別。 當前應用的級別用 *(星號)表示。 例如,
cat /sys/bus/pci/devices/.../pm_policy/soc_pstate
0 : soc_pstate_default
1 : soc_pstate_0
2 : soc_pstate_1*
3 : soc_pstate_2
cat /sys/bus/pci/devices/.../pm_policy/xgmi_plpd
0 : plpd_disallow
1 : plpd_default
2 : plpd_optimized*
要應用特定的策略
“echo <level> > /sys/bus/pci/devices/.../pm_policy/<policy_type>”
對於上面示例中列出的級別,要為 XGMI 選擇“plpd_optimized”,為 soc pstate 策略選擇“soc_pstate_2” -
echo "2" > /sys/bus/pci/devices/.../pm_policy/xgmi_plpd
echo "3" > /sys/bus/pci/devices/.../pm_policy/soc_pstate
*_busy_percent¶
amdgpu 驅動程式提供了一個 sysfs API,用於讀取 GPU 的繁忙程度(以百分比表示)。 gpu_busy_percent 檔案用於此目的。 SMU 韌體基於 IP 核心中的聚合活動級別來計算負載百分比。
amdgpu 驅動程式提供了一個 sysfs API,用於讀取 VRAM 的繁忙程度(以百分比表示)。 mem_busy_percent 檔案用於此目的。 SMU 韌體基於 IP 核心中的聚合活動級別來計算負載百分比。
gpu_metrics¶
amdgpu 驅動程式提供了一個 sysfs API,用於檢索當前的 gpu 指標資料。 gpu_metrics 檔案用於此目的。 讀取該檔案將轉儲所有當前的 gpu 指標資料。
這些資料包括溫度、頻率、引擎利用率、功耗、節流器狀態、風扇轉速和 cpu 核心統計資訊(僅適用於 APU)。 也就是說,它將同時提供所有感測器的快照。
fan_curve¶
amdgpu 驅動程式提供了一個 sysfs API,用於檢查和調整風扇控制曲線線。
讀回該檔案會顯示應用於曲線線上每個錨點的當前設定(以攝氏度為單位的溫度和以 pwm 為單位的風扇速度)以及它們的可更改的允許範圍(如果可更改)。
透過將所需的字串(格式如“anchor_point_index temperature fan_speed_in_pwm”)寫入該檔案,相應地更改特定錨點的設定。
完成編輯後,向該檔案寫入“c”(提交)以提交您的更改。
如果您想重置為預設值,請向該檔案寫入“r”(重置)以重置它們
支援兩種風扇控制模式:自動和手動。 在自動模式下,PMFW 處理風扇速度控制(風扇速度如何響應 ASIC 溫度)。 在手動模式下,使用者可以設定自己的風扇曲線線,如本文所述。 通常,ASIC 以自動模式啟動。 透過此介面進行的任何設定都將隱式地將風扇控制切換到手動模式。
acoustic_limit_rpm_threshold¶
amdgpu 驅動程式提供了一個 sysfs API,用於檢查和調整風扇控制的 RPM 聲學限制。
讀回該檔案會顯示當前的設定以及可更改的允許範圍(如果可更改)。
透過向該檔案寫入一個整數,相應地更改該設定。
完成編輯後,向該檔案寫入“c”(提交)以提交您的更改。
如果您想重置為預設值,請向該檔案寫入“r”(重置)以重置它們
此設定僅在自動風扇控制模式下有效。 它調整 PMFW 關於風扇可以旋轉的最大 RPM 速度的行為。 透過此介面進行的設定將隱式地將風扇控制切換到自動模式。
acoustic_target_rpm_threshold¶
amdgpu 驅動程式提供了一個 sysfs API,用於檢查和調整風扇控制的 RPM 聲學目標。
讀回該檔案會顯示當前的設定以及可更改的允許範圍(如果可更改)。
透過向該檔案寫入一個整數,相應地更改該設定。
完成編輯後,向該檔案寫入“c”(提交)以提交您的更改。
如果您想重置為預設值,請向該檔案寫入“r”(重置)以重置它們
此設定僅在自動風扇控制模式下有效。 它可以與其他也可以在自動模式下工作的設定共存。 它調整 PMFW 關於當 ASIC 溫度不高於目標溫度時風扇可以旋轉的最大 RPM 速度的行為。 透過此介面進行的設定將隱式地將風扇控制切換到自動模式。
fan_target_temperature¶
amdgpu 驅動程式提供了一個 sysfs API,用於檢查和調整風扇控制的目標溫度(以攝氏度為單位)。
讀回該檔案會顯示當前的設定以及可更改的允許範圍(如果可更改)。
透過向該檔案寫入一個整數,相應地更改該設定。
完成編輯後,向該檔案寫入“c”(提交)以提交您的更改。
如果您想重置為預設值,請向該檔案寫入“r”(重置)以重置它們
此設定僅在自動風扇控制模式下有效。 它可以與其他也可以在自動模式下工作的設定共存。 與 acoustic_target_rpm_threshold 設定配對,它們定義了當 ASIC 溫度不高於目標溫度時風扇可以旋轉的最大 RPM 速度。 透過此介面進行的設定將隱式地將風扇控制切換到自動模式。
fan_minimum_pwm¶
amdgpu 驅動程式提供了一個 sysfs API,用於檢查和調整 PWM 中的最小風扇速度。
讀回該檔案會顯示當前的設定以及可更改的允許範圍(如果可更改)。
透過向該檔案寫入一個整數,相應地更改該設定。
完成編輯後,向該檔案寫入“c”(提交)以提交您的更改。
如果您想重置為預設值,請向該檔案寫入“r”(重置)以重置它們
此設定僅在自動風扇控制模式下有效。 它可以與其他也可以在自動模式下工作的設定共存。 它調整 PMFW 關於風扇應旋轉的 PWM 中的最小風扇速度的行為。 透過此介面進行的設定將隱式地將風扇控制切換到自動模式。
fan_zero_rpm_enable¶
amdgpu 驅動程式提供了一個 sysfs API,用於檢查和調整零 RPM 功能。
讀回該檔案會顯示當前的設定以及可更改的允許範圍(如果可更改)。
透過向該檔案寫入一個整數,相應地更改該設定。
完成編輯後,向該檔案寫入“c”(提交)以提交您的更改。
如果您想重置為預設值,請向該檔案寫入“r”(重置)以重置它們。
fan_zero_rpm_stop_temperature¶
amdgpu 驅動程式提供了一個 sysfs API,用於檢查和調整零 RPM 停止溫度功能。
讀回該檔案會顯示當前的設定以及可更改的允許範圍(如果可更改)。
透過向該檔案寫入一個整數,相應地更改該設定。
完成編輯後,向該檔案寫入“c”(提交)以提交您的更改。
如果您想重置為預設值,請向該檔案寫入“r”(重置)以重置它們。
此設定僅在啟用零 RPM 設定時有效。 它調整風扇可以停止的最低溫度。
GFXOFF¶
GFXOFF 是大多數最新 GPU 中發現的一項功能,可在執行時節省電量。 當 gfx 或計算管道上沒有工作負載時,該卡的 RLC(執行列表控制器)韌體會動態關閉 gfx 引擎。 在受支援的 GPU 上,預設情況下 GFXOFF 處於啟用狀態。
使用者空間可以透過 debugfs 介面與 GFXOFF 互動(所有值均為 uint32_t,除非另有說明)
amdgpu_gfxoff¶
使用它來啟用/停用 GFXOFF,並檢查它當前是否啟用/停用
$ xxd -l1 -p /sys/kernel/debug/dri/0/amdgpu_gfxoff
01
寫入 0 以停用它,寫入 1 以啟用它。
讀取 0 表示它已停用,1 表示它已啟用。
如果已啟用,則表示 GPU 可以根據需要自由進入 GFXOFF 模式。 停用表示它永遠不會進入 GFXOFF 模式。
amdgpu_gfxoff_status¶
讀取它以檢查 GPU 的當前 GFXOFF 狀態
$ xxd -l1 -p /sys/kernel/debug/dri/0/amdgpu_gfxoff_status
02
0:GPU 處於 GFXOFF 狀態,gfx 引擎已斷電。
1:退出 GFXOFF 狀態
2:不在 GFXOFF 狀態
3:進入 GFXOFF 狀態
如果啟用了 GFXOFF,則該值將在 [0, 3] 範圍內轉換,儘可能進入 0。 停用時,它始終為 2。 如果不支援,則返回 -EINVAL。
amdgpu_gfxoff_count¶
讀取它以獲取自系統啟動以來查詢時 GFXOFF 進入的總計數。 該值是 uint64_t 型別,但是,由於韌體的限制,它當前可以作為 uint32_t 溢位。 *僅在 vangogh 中受支援*
amdgpu_gfxoff_residency¶
寫入 1 到 amdgpu_gfxoff_residency 以開始記錄,寫入 0 以停止。讀取它可以獲得上一個記錄間隔期間 GFXOFF 駐留百分比的平均值乘以 100。例如,7854 的值表示在上一個記錄間隔期間,GPU 有 78.54% 的時間處於 GFXOFF 模式。僅在 vangogh 中支援