Não é possível alterar os relógios e tensões da AMD GPU e Mem no Ubuntu 20.04

Não é possível alterar os relógios e tensões da AMD GPU e Mem no Ubuntu 20.04

Depois de atualizar para o Ubuntu 20.04 LTS do Ubuntu 18.04 LTS, não consegui mais ajustar minhas configurações de relógio e voltagem para meu Sapphire Radeon RX 580 Pulse ou para meu Sapphire Radeon RX 580 Nitro + SE. A alteração do ventilador e do limite de potência não apresenta problema. Estou usando o driver AMDGPU 20.30-1109583. Tentei usar o driver amdgpu 20.20, mas encontrei os mesmos problemas.

Tentei fazer manualmente, com um script Bash, com Wattman_GTK, com amdgpu-clocks, e tentei usar CoreCtrl (que trava).

Eu mudei /etc/default/grub para incluir:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash amdgpu.ppfeaturemask=0xffffffff"

e também tentei

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash radeon.si_support=0 amdgpu.si_support=1 amdgpu.dpm=1 amdgpu.ppfeaturemask=0xffffffff"

Aqui está meu script Bash:

#!/bin/bash
# Get path for card 1
card_path=`readlink -f /sys/class/drm/card1/device`

echo "Path for card: $card_path"
echo "Initial values for card:"
echo "Power limit: $(cat $card_path/hwmon/hwmon2/power1_cap)"
echo "Fan settings: $(cat $card_path/hwmon/hwmon2/pwm1)"
pwm1_max=`cat $card_path/hwmon/hwmon2/pwm1_max`
echo "pwm1_max: $pwm1_max"
echo "GPU and memory clocks and voltages"
echo "$(cat $card_path/power_dpm_force_performance_level)"
echo "$(cat $card_path/pp_od_clk_voltage)"
echo " "

# Set power limit

echo "Setting card power limit:"
echo 101000000 > $card_path/hwmon/hwmon2/power1_cap

echo " "

# Set GPU and mem clocks and voltages

echo "Setting GPU and Mem clocks and voltages:"
echo manual > $card_path/power_dpm_force_performance_level

echo 's 0 300 750' > $card_path/pp_od_clk_voltage
echo 's 1 751 793' > $card_path/pp_od_clk_voltage
echo 's 2 848 806' > $card_path/pp_od_clk_voltage
echo 's 3 858 812' > $card_path/pp_od_clk_voltage
echo 's 4 900 820' > $card_path/pp_od_clk_voltage
echo 's 5 1059 840' > $card_path/pp_od_clk_voltage
echo 's 6 1194 880' > $card_path/pp_od_clk_voltage
echo 's 7 1280 890' > $card_path/pp_od_clk_voltage

echo 'm 0 300 750' > $card_path/pp_od_clk_voltage
echo 'm 1 1000 800' > $card_path/pp_od_clk_voltage
echo 'm 2 2215 895' > $card_path/pp_od_clk_voltage

echo c > $card_path/pp_od_clk_voltage

# Set Fan
echo " "
echo "Setting Fan:"
echo 1 > $card_path/hwmon/hwmon2/pwm1_enable
pwr_prc=$((pwm1_max * 7/10))
echo "$pwr_prc"
echo $pwr_prc > $card_path/hwmon/hwmon2/pwm1



# Check values 

echo " "
echo "Check settings"
echo "Power limit: $(cat $card_path/hwmon/hwmon2/power1_cap)"
echo " "
echo "Fan settings: $(cat $card_path/hwmon/hwmon2/pwm1)"
echo " "
echo "Clocks and voltages: "
echo "$(cat $card_path/power_dpm_force_performance_level)"
echo "$(cat $card_path/pp_od_clk_voltage)"

Executando o script usando

sudo sh -c ./card1.sh

rendimentos:

Initial values for card:
Power limit: 101000000
Fan settings: 173
pwm1_max: 255
GPU and memory clocks and voltages
manual
OD_SCLK:
0:        300MHz        750mV
1:        751MHz        793mV
2:       1048MHz       1006mV
3:       1158MHz       1112mV
4:       1240MHz       1150mV
5:       1309MHz       1150mV
6:       1364MHz       1150mV
7:       1430MHz       1150mV
OD_MCLK:
0:        300MHz        750mV
1:       1000MHz        800mV
2:       2100MHz        950mV
OD_RANGE:
SCLK:     300MHz       2000MHz
MCLK:     300MHz       2250MHz
VDDC:     750mV        1200mV
 
Setting card power limit:
 
Setting GPU and Mem clocks and voltages:
./card1.sh: line 28: echo: write error: Invalid argument
./card1.sh: line 29: echo: write error: Invalid argument
./card1.sh: line 30: echo: write error: Invalid argument
./card1.sh: line 31: echo: write error: Invalid argument
./card1.sh: line 32: echo: write error: Invalid argument
./card1.sh: line 33: echo: write error: Invalid argument
./card1.sh: line 34: echo: write error: Invalid argument
./card1.sh: line 35: echo: write error: Invalid argument
./card1.sh: line 37: echo: write error: Invalid argument
./card1.sh: line 38: echo: write error: Invalid argument
./card1.sh: line 39: echo: write error: Invalid argument
./card1.sh: line 41: echo: write error: Invalid argument
 
Setting Fan:
178
 
Check settings
Power limit: 101000000
 
Fan settings: 173
 
Clocks and voltages: 
manual
OD_SCLK:
0:        300MHz        750mV
1:        751MHz        793mV
2:       1048MHz       1006mV
3:       1158MHz       1112mV
4:       1240MHz       1150mV
5:       1309MHz       1150mV
6:       1364MHz       1150mV
7:       1430MHz       1150mV
OD_MCLK:
0:        300MHz        750mV
1:       1000MHz        800mV
2:       2100MHz        950mV
OD_RANGE:
SCLK:     300MHz       2000MHz
MCLK:     300MHz       2250MHz
VDDC:     750mV        1200mV

Wattman_GTK e amdgpu-clocks também geraram o erro:

write error: Invalid argument

Executando o script usando

$sudo sh card1.sh

dá, em vez de "echo: erro de gravação: argumento inválido",

echo: echo: I/O error

Isso também acontece quando tento alterar relógios e tensões na linha de comando:

$sudo echo 's 7 1280 895' > /sys/devices/pci0000:00/0000:00:1c.7/0000:0d:00.0/pp_od_clk_voltage

que produz:

-bash: /sys/devices/pci0000:00/0000:00:1c.7/0000:0d:00.0/pp_od_clk_voltage: Permission denied

Responder1

Eu tive o mesmo problema com o kernel padrão (5.4). Depois de atualizar o kernel para o Edge (linux-generic-hwe-20.04-edge), o problema desapareceu.

Responder2

Isso funciona para mim na Radeon VII com 20.04 e driver 20.45

Para todas as alterações nos níveis de clock principais:

echo 's 0 300 750' > $card_path/pp_od_clk_voltage

para:

echo 'vc 0 300 750' > $card_path/pp_od_clk_voltage

e os níveis de memória recebem apenas uma configuração para frequência máxima, então exclua:

echo 'm 0 300 750' > $card_path/pp_od_clk_voltage
echo 'm 1 1000 800' > $card_path/pp_od_clk_voltage

e mude:

echo 'm 2 2215 895' > $card_path/pp_od_clk_voltage

para:

echo 'm 1 2215' > $card_path/pp_od_clk_voltage

Responder3

Eu tive o mesmo problema, apenas mudei aspas duplas (") para aspas simples (') e funcionou bem

Mudança no IE:

echo "s 0 300 750" > /sys/class/drm/card0/device/pp_od_clk_voltage

para:

echo 's 0 300 750' > /sys/class/drm/card0/device/pp_od_clk_voltage

Espero que isto ajude.

informação relacionada