› Foros › PC › Software libre
# Configuracion de primera tarjeta AMD RX580 de 8Gb
#!/bin/bash
echo “manual” > /sys/class/drm/card1/device/power_dpm_force_performance_level
echo “s 0 300 750” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “s 1 600 769” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “s 2 918 875” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “s 3 1145 880” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “s 4 1160 885” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “s 5 1180 890” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “s 6 1200 900” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “s 7 1245 900” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “m 0 300 750” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “m 1 1000 800” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “m 2 1900 875” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “c” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “1” > /sys/class/drm/card1/device/hwmon/hwmon2/pwm1_enable
echo “128” > /sys/class/drm/card1/device/hwmon/hwmon2/pwm1
# Configuración de segunda tarjeta AMD RX580 de 8Gb
echo “manual” > /sys/class/drm/card2/device/power_dpm_force_performance_level
echo “s 0 300 750” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “s 1 600 769” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “s 2 918 875” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “s 3 1145 880” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “s 4 1160 885” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “s 5 1180 890” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “s 6 1200 900” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “s 7 1245 900” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “m 0 300 750” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “m 1 1000 800” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “m 2 1900 875” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “c” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “1” > /sys/class/drm/card2/device/hwmon/hwmon3/pwm1_enable
echo “128” > /sys/class/drm/card2/device/hwmon/hwmon3/pwm1
Thulsa Doom escribió:Hola gracias por tu respuesta, ese programa no lo he probado,al final lo que hice es un poco más laborioso:
Lo primero que tenemos que hacer es descargar el driver oficial para ubuntu de la web de AMD, descomprimimos el archivo y desde consola nos vamos a la carpeta descomprimida y solo instalamos los driver libres, para eso usamos el comando.
./amdgpu-install -y --opencl=pal,legacy
Una vez terminemos el proceso, ahora tenemos que activar overdrive en el kernel, para ello abrimos el grub de linux con este comando:
sudo nano /etc/default/grub
Buscamos la línea donde diga:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
y lo editamos y lo dejamos así:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash amdgpu.ppfeaturemask=0xffffffff"
guardamos y recargamos el grub:
sudo update-grub
y reiniciamos el PC
con eso ya tenemos control sobre nuestras tarjetas AMD, yo uso dos RX580.
Ahora tenemos que averiguar como se llaman nuestras tarjetas dentro de ubuntu y para ello nos vamos a:
cd /sys/class/drm/
y ahí están todas las tarjetas incluida la de la placa base si tiene una, en mi caso aparece la card0, card1 y card2, donde card0 es la de la placa base y las otras dos son las RX580, ahora para configurarlas se hace en un archivo que ha generado el grub al reiniciar que se llama pp_od_clk_voltage ahí dentro estará la frecuencia y el voltaje.
en el caso de las RX580 tiene ocho niveles de frecuencia/voltaje y tres de frecuencia /voltaje de las memorias.
para editar la de la GPU se utiliza la s y para la memoria la m, el comando quedaría así:
echo “s 7 1209 900” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “m 2 1850 850” > /sys/class/drm/card1/device/pp_od_clk_voltage
donde el 7 es el nivel donde queremos ediar, 1209 es la frecuencia y 900 el voltaje en milivoltios que le quieres configurar en tu tarjeta, lo mismo para la memoria
una ves se hayan hecho los cambios los guardamos con este comando:
echo “c” > /sys/class/drm/card1/device/pp_od_clk_voltage
pero antes de nada tememos que pasar a manual el control de la tarjeta con este comando.
echo “manual” > /sys/class/drm/card1/device/power_dpm_force_performance_level
y para cambiar la velocidad de los ventiladores lo primero que hay que hacer es pasar a manual el control, para ello se edita
echo “1” > /sys/class/drm/card1/device/hwmon/hwmon2/pwm1_enable
en el modo automático el valor es 2, y el 1 es para manual así que lo dejamos en 1.
Ahora editamos el porcentaje de velocidad que le queremos dar al ventilador, eso van viendo ustedes cual es el mejor que les convenga yo he puesto este:
echo “128” > /sys/class/drm/card1/device/hwmon/hwmon2/pwm1
Y para hacerlo de manera automática y no estar metiendo los datos uno a uno me he creado un archivo en bash llamado StartGPU.sh donde lo hago todo de un golpe, configuro las dos tarjetas al mismo timpo, eso si, recuerden que cada vez que reinicien el PC estos valores se borran y tendrán que cargar de nuevo el archivo.
si no saben de linux para cargar este archivo desde una consola lo ejecutamos de esta manera:
sudo ./StartGPU.sh
También pueden crear un arranque automático del archivo al arrancar ubuntu pero eso ya no lo he probado así que no sé como es.
el archivo que he creado para el control de mis dos tarjetas es este:
# Configuracion de primera tarjeta AMD RX580 de 8Gb
#!/bin/bash
echo “manual” > /sys/class/drm/card1/device/power_dpm_force_performance_level
echo “s 0 300 750” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “s 1 600 769” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “s 2 918 875” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “s 3 1145 880” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “s 4 1160 885” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “s 5 1180 890” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “s 6 1200 900” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “s 7 1245 900” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “m 0 300 750” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “m 1 1000 800” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “m 2 1900 875” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “c” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “1” > /sys/class/drm/card1/device/hwmon/hwmon2/pwm1_enable
echo “128” > /sys/class/drm/card1/device/hwmon/hwmon2/pwm1
# Configuración de segunda tarjeta AMD RX580 de 8Gb
echo “manual” > /sys/class/drm/card2/device/power_dpm_force_performance_level
echo “s 0 300 750” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “s 1 600 769” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “s 2 918 875” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “s 3 1145 880” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “s 4 1160 885” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “s 5 1180 890” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “s 6 1200 900” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “s 7 1245 900” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “m 0 300 750” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “m 1 1000 800” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “m 2 1900 875” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “c” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “1” > /sys/class/drm/card2/device/hwmon/hwmon3/pwm1_enable
echo “128” > /sys/class/drm/card2/device/hwmon/hwmon3/pwm1
Tengo las tarjetas controladas con el software que he comentado más arriba donde los valores que me da de consumo es de unos 114w por tarjeta, una temperatura de unos 60ºC más o menos con una velocidad de 14,87Mh/s por tarjetas minando ravencoin.
Cito las fuentes de donde he sacado la información:
HOWTO_undervolt_the_AMD_RX_4XX_and_RX_5XX_GPUs
How to overclock your AMD GPU on Linux
El único problema que me queda por resolver que no he encontrado información al respecto, es que al reiniciar el equipo la gráfica integrada en placa cambia el nombre con la que lo identifica el sistema por una de las AMD, me explico, si de forma normal el nombre de la gráfica integrada es card0 y la primera AMD es card1, estas cambian el nombre una por la otra, pasándose a llamar la integrada card1 y la AMD card0, tengo que reinicar varias veces hasta que adquieren su nombre correcto.
sudo echo "s 7 1900 1000" > /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:00.0/0000:03:00.0/pp_od_clk_voltage
bash: /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:00.0/0000:03:00.0/pp_od_clk_voltage: Permiso denegado
cat /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:00.0/0000:03:00.0/power_dpm_force_performance_level
manual
# Configuracion de primera tarjeta AMD RX580 de 8Gb
#!/bin/bash
echo “manual” > /sys/class/drm/card1/device/power_dpm_force_performance_level
echo “s 0 300 750” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “s 1 600 769” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “s 2 918 875” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “s 3 1145 880” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “s 4 1160 885” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “s 5 1180 890” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “s 6 1200 900” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “s 7 1245 900” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “m 0 300 750” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “m 1 1000 800” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “m 2 1900 875” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “c” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “1” > /sys/class/drm/card1/device/hwmon/hwmon2/pwm1_enable
echo “128” > /sys/class/drm/card1/device/hwmon/hwmon2/pwm1
# Configuración de segunda tarjeta AMD RX580 de 8Gb
echo “manual” > /sys/class/drm/card2/device/power_dpm_force_performance_level
echo “s 0 300 750” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “s 1 600 769” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “s 2 918 875” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “s 3 1145 880” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “s 4 1160 885” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “s 5 1180 890” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “s 6 1200 900” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “s 7 1245 900” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “m 0 300 750” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “m 1 1000 800” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “m 2 1900 875” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “c” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “1” > /sys/class/drm/card2/device/hwmon/hwmon3/pwm1_enable
echo “128” > /sys/class/drm/card2/device/hwmon/hwmon3/pwm1
Thulsa Doom escribió:Hola, por lo que veo la ruta que utilizas para escribir en la tarjeta no es la indicada, utiliza la ruta que tengo yo en el archivo de configuración que he creado, eso si, siempre como root.# Configuracion de primera tarjeta AMD RX580 de 8Gb
#!/bin/bash
echo “manual” > /sys/class/drm/card1/device/power_dpm_force_performance_level
echo “s 0 300 750” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “s 1 600 769” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “s 2 918 875” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “s 3 1145 880” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “s 4 1160 885” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “s 5 1180 890” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “s 6 1200 900” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “s 7 1245 900” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “m 0 300 750” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “m 1 1000 800” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “m 2 1900 875” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “c” > /sys/class/drm/card1/device/pp_od_clk_voltage
echo “1” > /sys/class/drm/card1/device/hwmon/hwmon2/pwm1_enable
echo “128” > /sys/class/drm/card1/device/hwmon/hwmon2/pwm1
# Configuración de segunda tarjeta AMD RX580 de 8Gb
echo “manual” > /sys/class/drm/card2/device/power_dpm_force_performance_level
echo “s 0 300 750” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “s 1 600 769” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “s 2 918 875” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “s 3 1145 880” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “s 4 1160 885” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “s 5 1180 890” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “s 6 1200 900” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “s 7 1245 900” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “m 0 300 750” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “m 1 1000 800” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “m 2 1900 875” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “c” > /sys/class/drm/card2/device/pp_od_clk_voltage
echo “1” > /sys/class/drm/card2/device/hwmon/hwmon3/pwm1_enable
echo “128” > /sys/class/drm/card2/device/hwmon/hwmon3/pwm1
Ve a esas rutas /sys/class/drm/ y mira como tu sistema llama a las tarjetas y haces las modificaciones pertinentes
mekadragon@mekalinux /sys/class/drm/card0/device $ sudo echo “s 7 1900 1000” > pp_od_clk_voltage
bash: pp_od_clk_voltage: Permiso denegado
mekadragon@mekalinux /sys/class/drm $ ls
card0 card0-DP-2 card0-HDMI-A-1 ttm
card0-DP-1 card0-DP-3 renderD128 version
Thulsa Doom escribió:Hola, en principio debería de funcionar,
Al ir a la ruta de /sys/class/drm/ ahí tendría que aparecer todas las tarjetas que tengas en el sistema, ya sea la de la placa base, una Nvidia o lo que sea, al arrancar el sistema las irá llamando según le vaya asignando un nombre.
Por ejemplo en mi caso la tarjeta integrada la ha llama card0, y como tengo 1 Nvidia 1050ti, la ha llamado card2 y tres AMD RX580 a las que ha renombrado como card1, card3 y card4.
Desde la terminal como root, si te vas a la ruta de donde están todas las tarjetas que es /sys/class/drm/ debes de ver todas las tarjetas que el sistema ha añadido, en mi caso una AMD tendría este aspecto:
Lo que buscamos es el directorio donde podemos cambiar el voltaje y la frecuencia, este directorio se encuentra en /card1/device
Si entras ahí y hacer un ls -la te va a decir todos los directorios que tiene y si la instalación del driver ha ido bien te tendrá que aparecer el directorio /pp_od_clk_voltage, ahí es donde modificamos el voltaje y frecuencias de las memorias y el GPU.
Para modificar la velocidad de los ventiladores es otro directorio, la ruta es:
/sys/class/drm/card1/device/hwmon/hwmon1/
Con esta ruta hay que ver bien como tu sistema la ha llamado ya que en el mío según le de cambia el nombre del directorio hwmon1 y aveces lo llama hwmon3 y cuando usas el archivo bash que he creado para hacer el undervolt no encuentra la ruta y tengo que ir a ver como ha llamado al directorio y editarlo en el bash
mekadragon@mekalinux /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:00.0/0000:03:00.0/drm/card0/device $ ls
aer_dev_correctable device i2c-3 mem_info_vis_vram_used pp_cur_state pp_power_profile_mode revision
aer_dev_fatal dev_rescan i2c-5 mem_info_vram_total pp_dpm_dcefclk pp_sclk_od rom
aer_dev_nonfatal dma_mask_bits i2c-7 mem_info_vram_used pp_dpm_fclk pp_table subsystem
ari_enabled driver irq modalias pp_dpm_mclk remove subsystem_device
boot_vga driver_override local_cpulist msi_bus pp_dpm_pcie reset subsystem_vendor
broken_parity_status drm local_cpus msi_irqs pp_dpm_sclk resource uevent
class enable max_link_speed numa_node pp_dpm_socclk resource0 vbios_version
config fw_version max_link_width pcie_bw pp_features resource0_wc vendor
consistent_dma_mask_bits gpu_busy_percent mem_busy_percent pcie_replay_count pp_force_state resource2
current_link_speed graphics mem_info_gtt_total power pp_mclk_od resource2_wc
current_link_width hwmon mem_info_gtt_used power_dpm_force_performance_level pp_num_states resource4
d3cold_allowed i2c-1 mem_info_vis_vram_total power_dpm_state pp_od_clk_voltage resource5
mekadragon@mekalinux /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:00.0/0000:03:00.0/drm/card0/device $ cat pp_num_states
states: 1
0 default
mekadragon@mekalinux /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:00.0/0000:03:00.0/drm/card0/device $ cat pp_od_clk_voltage