如何在 amdgpu 中使用“自定义”PowerPlay 电源配置文件?

如何在 amdgpu 中使用“自定义”PowerPlay 电源配置文件?

我的笔记本电脑上有一个 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

我认为参数是(按顺序):

  1. NUM模式选择,用于6自定义。

  2. ENABLE_SCLK是否应应用此处设置的核心时钟参数。

  3. SCLK_UP_HYST核心时钟上升之前的延迟(以毫秒为单位)。

  4. SCLK_DOWN_HYST核心时钟下降之前的延迟(以毫秒为单位)。

  5. SCLK_ACTIVE_LEVEL增加核心时钟所需的核心负载。

  6. ENABLE_MCLK是否应应用此处设置的内存时钟参数。

  7. MCLK_UP_HYST内存时钟上升之前的延迟(以毫秒为单位)。

  8. MCLK_DOWN_HYST内存时钟下降之前的延迟(以毫秒为单位)。

  9. MCLK_ACTIVE_LEVEL增加内存时钟所需的内存负载。

参数ENABLE2 和 6 可以是1(启用)或0(禁用)。参数HYST3、4、7 和 8 可以为0ms254255(无穷大)。这些ACTIVE_LEVEL参数可以是0活动100级别(负载)的百分比。

默认3D_FULL_SCREEN配置文件具有核心设置0 100 30和内存设置0 100 10。我的目标是在玩游戏时获得高性能,但在不玩游戏时获得低功耗。因此,我设置了一个上升速度较慢、下降速度较慢的核心时钟,但对核心负载更敏感 ( 0 100 3050 250 20)。我设置了一个缓慢上升和下降的内存时钟,并且对内存负载不太敏感(0 100 10250 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

然而,这些值对我来说仍然是个谜意思是...

相关内容