我的笔记本电脑上有一个 AMD RX 580,运行 Manjaro,使用 amdgpu 和 mesa 20.3.1。如果我cat /sys/class/drm/card0/device/pp_power_profile_mode
在终端中运行,我会得到以下输出:
NUM MODE_NAME SCLK_UP_HYST SCLK_DOWN_HYST SCLK_ACTIVE_LEVEL MCLK_UP_HYST MCLK_DOWN_HYST MCLK_ACTIVE_LEVEL
0 BOOTUP_DEFAULT: - - - - - -
1 3D_FULL_SCREEN: 0 100 30 0 100 10
2 POWER_SAVING *: 10 0 30 0 100 10
3 VIDEO: - - - 10 16 31
4 VR: 0 11 50 0 100 10
5 COMPUTE: 0 5 30 - - -
6 CUSTOM: - - - - - -
显示了各种预定义模式,但还有一种未设置值的“自定义”模式。
我发现https://dri.freedesktop.org/docs/drm/gpu/amdgpu.html#pp-power-profile-mode其中对此有以下说明:
要选择配置文件或创建自定义配置文件,请首先使用 power_dpm_force_performance_level 选择手动。将预定义配置文件的编号写入 pp_power_profile_mode 将启用这些启发式方法。要创建一组自定义启发式方法,请将一串数字写入文件,以自定义配置文件的编号以及每个启发式参数的设置开头。由于 asic 系列之间存在差异,启发式参数因系列而异。
我可以运行echo "2" > /sys/class/drm/card0/device/pp_power_profile_mode
将当前模式更改为“POWER_SAVING”,但是通过阅读该文档,我相信我应该能够运行echo "6 10 0 30 0 100 10" > /sys/class/drm/card0/device/pp_power_profile_mode
以设置“CUSTOM”模式?然而我只是得到bash: echo: write error: Invalid argument
回报。
是否可以在这里重新定义“CUSTOM”模式?
答案1
我pp_power_profile_mode
的 RX 470 似乎与您的 RX 580(都是 Polaris 卡)相同,我可以CUSTOM
通过执行以下操作来更改和启用配置文件:
echo "6 1 50 250 20 1 250 250 20" > /sys/class/drm/card0/device/pp_power_profile_mode
我认为参数是(按顺序):
NUM
模式选择,用于6
自定义。ENABLE_SCLK
是否应应用此处设置的核心时钟参数。SCLK_UP_HYST
核心时钟上升之前的延迟(以毫秒为单位)。SCLK_DOWN_HYST
核心时钟下降之前的延迟(以毫秒为单位)。SCLK_ACTIVE_LEVEL
增加核心时钟所需的核心负载。ENABLE_MCLK
是否应应用此处设置的内存时钟参数。MCLK_UP_HYST
内存时钟上升之前的延迟(以毫秒为单位)。MCLK_DOWN_HYST
内存时钟下降之前的延迟(以毫秒为单位)。MCLK_ACTIVE_LEVEL
增加内存时钟所需的内存负载。
参数ENABLE
2 和 6 可以是1
(启用)或0
(禁用)。参数HYST
3、4、7 和 8 可以为0
ms254
或255
(无穷大)。这些ACTIVE_LEVEL
参数可以是0
活动100
级别(负载)的百分比。
默认3D_FULL_SCREEN
配置文件具有核心设置0 100 30
和内存设置0 100 10
。我的目标是在玩游戏时获得高性能,但在不玩游戏时获得低功耗。因此,我设置了一个上升速度较慢、下降速度较慢的核心时钟,但对核心负载更敏感 ( 0 100 30
→ 50 250 20
)。我设置了一个缓慢上升和下降的内存时钟,并且对内存负载不太敏感(0 100 10
→ 250 250 20
),因此电压不会一直从 800 mV 跳到 1000+ mV(当内存时钟增加时会发生这种情况,即使如果核心时钟只有 300 MHz)。
答案2
对于我的 5700XT,我的/sys/class/drm/card0/device/pp_power_profile_mode
外观如下:
PROFILE_INDEX(NAME) CLOCK_TYPE(NAME) FPS MinFreqType MinActiveFreqType MinActiveFreq BoosterFreqType BoosterFreq PD_Data_limit_c PD_Data_error_coeff PD_Data_error_rate_coeff
0 BOOTUP_DEFAULT :
0( GFXCLK) 0 5 1 0 4 800 4587520 -65536 0
1( SOCCLK) 0 5 1 0 3 800 1310720 -6553 0
2( MEMLK) 0 5 1 0 4 800 327680 -65536 0
1 3D_FULL_SCREEN :
0( GFXCLK) 0 5 1 0 4 650 3932160 -6553 -65536
1( SOCCLK) 0 5 1 850 4 800 1310720 -6553 0
2( MEMLK) 0 5 4 850 4 800 327680 -65536 0
2 POWER_SAVING*:
0( GFXCLK) 0 5 1 0 3 0 5898240 -65536 0
1( SOCCLK) 0 5 1 0 3 0 1310720 -6553 0
2( MEMLK) 0 5 1 0 3 0 1966080 -65536 0
3 VIDEO :
0( GFXCLK) 0 5 1 0 4 500 4587520 -65536 0
1( SOCCLK) 0 5 1 0 4 500 1310720 -6553 0
2( MEMLK) 0 5 1 0 4 500 1966080 -65536 0
4 VR :
0( GFXCLK) 0 5 4 1000 4 800 4587520 -65536 0
1( SOCCLK) 0 5 1 0 4 800 327680 -65536 0
2( MEMLK) 0 5 1 0 4 800 327680 -65536 0
5 COMPUTE :
0( GFXCLK) 0 5 4 1000 3 0 3932160 -65536 -65536
1( SOCCLK) 0 5 4 850 3 0 327680 -65536 -32768
2( MEMLK) 0 5 4 850 3 0 327680 -65536 -32768
6 CUSTOM :
0( GFXCLK) 0 5 1 0 4 800 4587520 -65536 0
1( SOCCLK) 0 5 1 0 3 800 1310720 -6553 0
2( MEMLK) 0 5 1 0 4 800 327680 -65536 0
它包含仅当以下情况时才更改功率级别(可以在 中设置pp_od_clk_voltage
)的启发式方法:manual
模式已选择在power_dpm_force_performance_level
根据文档。
CUSTOM
我可以为配置文件(idx 6)和组件(GFXCLK
= 0、SOCCLK
= 1、 = 2)设置自定义值,MEMLK
如下所示:
echo '6 0 1 2 3 4 5 6 7 8 9' | sudo tee /sys/class/drm/card0/device/pp_power_profile_mode
该文件然后包含:
6 CUSTOM*:
0( GFXCLK) 1 2 3 4 5 6 7 8 9
1( SOCCLK) 0 5 1 0 3 800 1310720 -6553 0
2( MEMLK) 0 5 1 0 4 800 327680 -65536 0
然而,这些值对我来说仍然是个谜意思是...