graphics driver for AMD GPUs on Linux
AMDGPU_boot_log_screenshot.png
AMDgpu is an open source device driver for the Linux operating system developed by AMD to support its Radeon lineup of graphics cards (GPUs). It was announced in 2014 as the successor … Wikipedia
Factsheet
Developer AMD
Release 1.0 / 20 April 2015; 11 years ago (2015-04-20)
Stable release 6.16
/ 4 August 2025; 10 months ago (2025-08-04)
Factsheet
Developer AMD
Release 1.0 / 20 April 2015; 11 years ago (2015-04-20)
Stable release 6.16
/ 4 August 2025; 10 months ago (2025-08-04)
🌐
GitHub
github.com › sibradzic › amdgpu-clocks
GitHub - sibradzic/amdgpu-clocks: Simple script to control power states of amdgpu driven GPUs · GitHub
This is a simple script that can be used to set custom power states for recent AMD GPUs that are driven by amdgpu Linux kernel driver. The script is able to set custom clocks, voltages and some other power states, assuming that Radeon OverDrive ...
Starred by 463 users
Forked by 45 users
Languages   Shell
🌐
GitHub
github.com › sibradzic › amdgpu-clocks › blob › master › amdgpu-clocks
amdgpu-clocks/amdgpu-clocks at master · sibradzic/amdgpu-clocks
Simple script to control power states of amdgpu driven GPUs - sibradzic/amdgpu-clocks
Author   sibradzic
Discussions

How to overclock your AMD GPU on Linux
Cool post. All of the stuff described here gets super simple with https://github.com/sibradzic/amdgpu-clocks , and easily applies to multiple GPUs. More on reddit.com
🌐 r/Amd
35
141
January 20, 2019
Radeon 6000
I can't get the script to work with an AMD 6900xt. The pp_od_clk_voltage file has a slightly different output than my Radeon VII did: OD_SCLK: 0: 500Mhz 1: 1200Mhz OD_MCLK: 0: 97Mhz 1: 1075MHz ... More on github.com
🌐 github.com
16
April 4, 2021
debian - Reduce AMD GPU Wattage - Unix & Linux Stack Exchange
Just set the value to low, or the ... memory clocks respectively to reduce power draw. If you require more fine grain control than the rest of this post should satisfy your needs. You will need to make sure you install a kernel that is version 4.17 or greater and the latest supported AMDGPU ... More on unix.stackexchange.com
🌐 unix.stackexchange.com
November 17, 2020
linux - Overview of amdgpu clock and temperature - Unix & Linux Stack Exchange
I remember there was some sysfs/procfs (or maybe debugfs?) file that provided formatted textual overview of GPU temperature, clock and some more information. I can't remember path to the file and I... More on unix.stackexchange.com
🌐 unix.stackexchange.com
October 17, 2021
🌐
GitHub
github.com › sibradzic › amdgpu-clocks › blob › master › README.md
amdgpu-clocks/README.md at master · sibradzic/amdgpu-clocks
This is a simple script that can be used to set custom power states for recent AMD GPUs that are driven by amdgpu Linux kernel driver. The script is able to set custom clocks, voltages and some other power states, assuming that Radeon OverDrive ...
Author   sibradzic
🌐
ArchWiki
wiki.archlinux.org › title › AMDGPU
AMDGPU - ArchWiki
May 28, 2026 - For in-depth information on all possible options, read the kernel documentation for amdgpu thermal control. To enable manual overclocking, select the manual performance level as described in #Performance levels. To set the GPU clock for the maximum P-state 7 on e.g.
🌐
Arch Linux
aur.archlinux.org › packages › amdgpu-clocks-git
AUR (en) - amdgpu-clocks-git
# Maintainer: Ranieri Althoff <ranisalt+aur at gmail dot com> pkgname=amdgpu-clocks-git pkgver=r24.00eb367 pkgrel=1 pkgdesc='Simple script to control power states of amdgpu driven GPUs' url='https://github.com/sibradzic/amdgpu-clocks' license=('GPL2') arch=('any') conflicts=(${pkgname%-git}) provides=(${pkgname%-git}) depends=('bash') source=("${pkgname}::git+${url}.git") sha512sums=('SKIP') pkgver() { cd "$pkgname" printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)" } prepare() { cd "$pkgname" sed -i 's/\/local//g' amdgpu-clocks.service } package() { cd "$pkgname" install -Dm755 amdgpu-clocks "$pkgdir/usr/bin/amdgpu-clocks" install -Dm644 amdgpu-clocks.service "$pkgdir/usr/lib/systemd/system/amdgpu-clocks.service" install -Dm755 amdgpu-clocks-resume "$pkgdir/usr/lib/systemd/system-sleep/amdgpu-clocks-resume" }
🌐
Reddit
reddit.com › r/amd › how to overclock your amd gpu on linux
r/Amd on Reddit: How to overclock your AMD GPU on Linux
January 20, 2019 -

One thing I missed from Windows after my transition to Linux was the ability to easily adjust my GPU's clock speeds and voltages. I went to the godly Arch Wiki and found there's a way to overclock AMD GPUs, but some steps are not very clear and I had to do some googling to get everything working.

EDIT: Vega GPU are not supported as of kernel 4.20.2! Here's a workaround by u/whatsaspecialusername.

First things first, your kernel has to be at least version 4.17 (you can check by running uname -a), although it's recommended to update it to the latest version for system stability, bug fixes and new features (for instance, Hawaii support for overclocking was introduced in 4.20). The driver should be amdgpu (not the proprietary amdgpu-pro). I suggest installing the latest mesa+amdgpu from this PPA for *buntu, but I don't know about other distros. It might not even be a necessary step.

You need to add the parameter amdgpu.ppfeaturemask=0xffffffff to your GRUB configuration. To do so, edit /etc/default/grub as root and add the parameter between the quotes of GRUB_CMDLINE_LINUX_DEFAULT. Save, then run sudo update-grub2 or sudo grub-mkconfig -o /boot/grub/grub.cfg, depending on your distro. Reboot. If you're running any bootloader other than GRUB, check this Arch Wiki page.

Now, we need to find the file with our GPU's clocks and voltages. In my case it was in /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/, but you can find the directory by running readlink -f /sys/class/drm/card0/device.

The file we want to work with is called pp_od_clk_voltage. Mine looked like the following (my card is a Sapphire RX 580 Nitro+ 4GB):

OD_SCLK:
0:        300MHz        750mV
1:        600MHz        769mV
2:        900MHz        887mV
3:       1145MHz       1100mV
4:       1215MHz       1181mV
5:       1257MHz       1150mV
6:       1300MHz       1150mV
7:       1411MHz       1150mV
OD_MCLK:
0:        300MHz        750mV
1:       1000MHz        800mV
2:       1750MHz        950mV
OD_RANGE:
SCLK:     300MHz       2000MHz
MCLK:     300MHz       2250MHz
VDDC:     750mV        1200mV

We want to edit the P-state #7 for the core and #2 for the VRAM, as those are the values that our GPU is going to run at while under load. On Windows, my optimal values were 1450MHz for core and 2065MHz for memory, so I'm going to edit the file as follows:

sudo sh -c "echo 's 7 1450 1150' > /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/pp_od_clk_voltage"

Where "s" means we're editing the core's values, 7 is the seventh P-state, 1450 is the speed we want in MHz, 1150 is the voltage in mV. Note that I didn't run sudo echo "s 7 1450 1150" > /sys/class/drm/card0/device/pp_od_clk_voltage like the Arch Wiki states, because it would throw an error and not apply the changes (this might have worked without "sudo" if we logged in as root with sudo su, but it's best not to do so for safety reasons). See here.

Same with the VRAM: sudo sh -c "echo 'm 2 2065 950' > /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/pp_od_clk_voltage"

After these two commands the file is going to be the same except for the two lines of the P-states we just edited. We can check by running cat /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/pp_od_clk_voltage.

I didn't mess with voltages because I'm already satisfied with my results and I'm very paranoid about damaging my GPU. If you really want to, please be really careful as you might cause fatal damage to your card!

Once we are done, running sudo sh -c "echo 'c' > /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/pp_od_clk_voltage" will apply the changes and the GPU will start running at those new frequencies when under load.

While I haven't found a way to actively monitor clock speeds à la MSI Afterburner (EDIT: there is actually! See this comment by u/AlienOverlordXenu), I could see a sudden increase in FPS in Heaven Benchmark as soon as I applied the new clocks. I set the camera to free mode (so that it stops moving) and after applying the FPS went from 55-56 to 60-61!

(The guide on ArchWiki also has a command to change the maximum power consumption in Watts: I didn't mess with it as I wasn't sure what was a safe value)

Now there's one problem: every time we reboot our PC the clocks are going to reset. So how do we make them stick?

Assuming your distro has systemd, we can create a service that runs the three commands that edit and apply the clocks at boot. If your distro doesn't have systemd, you can follow these steps.

First, we need to create a script. I named mine "overclock" and put it in /usr/bin/. It looks like this:

#!/bin/sh
sudo sh -c "echo 's 7 1450 1150' > /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/pp_od_clk_voltage"
sudo sh -c "echo 'm 2 2065 950' > /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/pp_od_clk_voltage"
sudo sh -c "echo 'c' > /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/pp_od_clk_voltage"

Then, we have to create a file in /etc/systemd/system/ with a .service extension. I named mine overclock.service:

[Unit]
Description=Increase GPU core and memory clocks

[Service]
Type=oneshot
ExecStart=/usr/bin/overclock

[Install]
WantedBy=multi-user.target

sudo systemctl enable overclock.service will enable our service. After rebooting it should automatically overclock the GPU. We can check if it did by running cat /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/pp_od_clk_voltage.

(It's not necessary, but I also made a script that sets the GPU back to the stock clock speeds. I didn't make a service for it, I just put it in my Documents folder.)

So that should be it! Keep in mind that it might not work on any AMD GPU, in fact I couldn't find a way to do it on my Ryzen+Vega laptop (something with power saving mode I'm guessing), but it's always worth a try. This is my first "real" guide so any feedback is very much appreciated.

Find elsewhere
🌐
Ecosyste.ms
awesome.ecosyste.ms › projects › github.com › sibradzic › amdgpu-clocks
https://github.com/sibradzic/amdgpu-clocks | Ecosyste.ms: Awesome
This is a simple script that can be used to set custom power states for recent AMD GPUs that are driven by **amdgpu** Linux kernel driver. The script is able to set custom clocks, voltages and some other power states, assuming that Radeon OverDrive is enabled in kernel boot opions.
🌐
GitHub
github.com › topics › amdgpu-clocks
amdgpu-clocks · GitHub Topics · GitHub
To associate your repository with the amdgpu-clocks topic, visit your repo's landing page and select "manage topics."
🌐
GitHub
github.com › sibradzic › amdgpu-clocks › issues › 32
Radeon 6000 · Issue #32 · sibradzic/amdgpu-clocks
April 4, 2021 - I can't get the script to work with an AMD 6900xt. The pp_od_clk_voltage file has a slightly different output than my Radeon VII did: OD_SCLK: 0: 500Mhz 1: 1200Mhz OD_MCLK: 0: 97Mhz 1: 1075MHz OD_VDDGFX_OFFSET: 0mV OD_RANGE: SCLK: 500Mhz...
Author   sibradzic
🌐
Linux Kernel
docs.kernel.org › gpu › amdgpu › thermal.html
GPU Power/Thermal Controls and Monitoring — The Linux Kernel documentation
This mode is recommended for profiling specific work loads where you do not want clock or power gating for clock fluctuation to interfere with your results. profile_standard sets the clocks to a fixed clock level which varies from asic to asic. profile_min_sclk forces the sclk to the lowest level. profile_min_mclk forces the mclk to the lowest level. profile_peak sets all clocks (mclk, sclk, pcie) to the highest levels. The amdgpu driver provides a sysfs API for uploading new powerplay tables.
Top answer
1 of 2
9

Introduction


To reduce power usage you will need to "undervolt", reducing the voltage of your GPU or limit the power states of the GPU.

Using a modern (4.17 or greater) kernel and the latest amdgpu driver with a Radeon GPU from 2015 or newer can allow you to overclock (and thus undervolt, reducing power usage (Watts)) you graphics card.

I will link to several resources that I have found on the subject but include snippets of the relevant information in this answer. The first section will assume you already have met the prerequistes and just want to get in and undervolt and move on. The rest of the answer will serve as a collection of AMD GPU tuning resources for those who need it.

As a forewarning, undervolting (or otherwise overclocking) the GPU can introduce stability issues. You will need to test your GPU for stability after changing any of the voltage and clock settings to make sure that it still operates in a "safe" manner (A tool like GpuTest using FurMark is a decent way to test performance and stability. Additionally there is the Phoronix Test Suite to benchmark your computer in Linux). The last thing you want to do in your efforts to reduce power draw is cause crashes, glitches, artifacts, or other degradations of performance.

Quick and Easy Undervolting


Following the Wiki guide on LinuxReviews.org you can change performance levels (and thus power usage) by doing the following:

The first thing you need to do before you can change anything is to set /sys/class/drm/card0/device/power_dpm_force_performance_level to manual to enable manual control. You will get write error: Invalid argument errors when writing clock values of you don't.

echo "manual" > /sys/class/drm/card0/device/power_dpm_force_performance_level

The available power_dpm_force_performance_level settings other than manual are:

auto Drivers chooses automatically low Forces the lowest possible clock and locks the GPU there high Forcest the highest possible clock and locks the GPU there
profile_standard
profile_min_sclk
profile_min_mclk
profile_peak "When the profiling modes are selected, clock and power gating are disabled and the clocks are set for different profiling cases. This mode is recommended for profiling specific work loads where you do not want clock or power gating for clock fluctuation to interfere with your results. profile_standard sets the clocks to a fixed clock level which varies from asic to asic. profile_min_sclk forces the sclk to the lowest level. profile_min_mclk forces the mclk to the lowest level. profile_peak sets all clocks (mclk, sclk, pcie) to the highest levels."

Just set the value to low, or the profile_min_sclk profile_min_mclk levels to reduce the core clock and memory clocks respectively to reduce power draw.

If you require more fine grain control than the rest of this post should satisfy your needs.

Prerequisites


You will need to make sure you install a kernel that is version 4.17 or greater and the latest supported AMDGPU driver. If necessary you will need to update your Debian install to Debian 10 (Buster) or add the buster-backports repository.

To add backports so you need to edit your /etc/apt/sources.list to include a line like this:

deb http://deb.debian.org/debian buster-backports 

and then run apt update to finalize the addition of the backports repository.

Install a new kernel by doing the following:

apt-cache search linux-image #Find the kernel and kernel headers available to you.
apt install linux-image-<flavor> #Use `apt-get -t buster-backports <package>` if necessary

Reboot and then install the xserver-xorg-video-amdgpu libgl1-mesa-dri libglx-mesa0 mesa-vulkan-drivers xserver-xorg-video-all packages.

If you need to enable to Southern Islands or Sea Islands support (GCN 1/GCN 2 AMD GPU), follow this ArchWiki page.

Lastly, it is required to unlock access to adjust clocks and voltages in sysfs by appending the Kernel parameter amdgpu.ppfeaturemask=0xffffffff (Note: this value could be different at the end based on testing and specific changes, this one is simply unlocking the card completely).

Edit the line following line in /etc/default/grub to:

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

Then run sudo update-grub.

Verify the current featuremask after reboot by checking here:

printf "0x%08x\n" $(cat /sys/module/amdgpu/parameters/ppfeaturemask)

Overclocking/Undervolting


Warning: Double check the entered values, as mistakes might instantly cause fatal hardware damage!

With everything set up, you can adjust clocks and voltages two ways, manually or tool assisted.

Manually

Reddit user Pannuba outlines how to overclock your AMD GPU in this post.

You need to edit the contents of /sys/class/drm/card0/device/pp_od_clk_voltage

Find the location to edit using readlink -f /sys/class/drm/card0/device

We want to edit the P-state #7 for the core and #2 for the VRAM, as those are the values that our GPU is going to run at while under load.

sudo sh -c "echo 's 7 1450 1150' > /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/pp_od_clk_voltage"
sudo sh -c "echo 'm 2 2065 950' > /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/pp_od_clk_voltage"

Note that the file path is for their GPU. Use the previous command to discover the path for yours. The values you want for your clock speeds and voltages will also be different. To undervolt, change each P-State voltage for core and VRAM to be less than the default values. You might be able to keep the clock speeds the same but in some cases you will have to also reduce these values. This is where stability testing and benchmarking your GPU comes into play

As outlined in the ArchWiki, you can run the following to apply, verify, force certain P-states, and reset:

To apply, run

echo "c" > /sys/class/drm/card0/device/pp_od_clk_voltage

To check if it worked out, read out clocks and voltage under 3D load:

watch -n 0.5  cat /sys/kernel/debug/dri/0/amdgpu_pm_info

You can reset to the default values using this:

echo "r" > /sys/class/drm/card0/device/pp_od_clk_voltage

It is also possible to forbid the driver so switch to certain P-states, e.g. to workaround problems with deep powersaving P-states like flickering artifacts or stutter. To force the highest VRAM P-state on a Polaris RX 5xx card, while still allowing the GPU itself to run with lower clocks, run:

echo "manual" > /sys/class/drm/card0/device/power_dpm_force_performance_level
echo "2" >  /sys/class/drm/card0/device/pp_dpm_mclk

Allow only the three highest GPU P-states:

echo "5 6 7" >  /sys/class/drm/card0/device/pp_dpm_sclk

To set the allowed maximum power consumption of the GPU to e.g. 50 Watts, run

echo 50000000 > /sys/class/drm/card0/device/hwmon/hwmon0/power1_cap

Until Linux kernel 4.20, it will only be possible to decrease the value, not increase.

To enable these changes to carry over across boots you will need to create a script and systemd service. Your script should use the values you have tested to work and the file path to your GPU.

Save this script in /usr/bin/ or a safe place for systemwide scripts:

#!/bin/sh
sudo sh -c "echo 's 7 <Your desired values here>' > /sys/devices/Your/Path/Here/pp_od_clk_voltage"
sudo sh -c "echo 'm 2 <Your desired values here' > /sys/devices/Your/Path/Here/pp_od_clk_voltage"
sudo sh -c "echo 'c' > /sys/devices/Your/Path/Here/pp_od_clk_voltage"

Create a file in /etc/systemd/system/ like undervolt.service with the following contents:

[Unit]
Description=Undervolting GPU

[Service]
Type=oneshot
ExecStart=/Path/To/Script.sh

[Install]
WantedBy=multi-user.target

Run sudo systemctl enable undervolt.service to enable. After rebooting, verify by running cat /sys/devices/Your/Path/Here/pp_od_clk_voltage.

User Pannuba also suggest making a script to revert things to default values. This does not have to be a SystemD service.

Tool Assisted

There exists several tools to assist in AMD GPU overclocking:

  • AMDGPU Clocks, a commandline tool.

  • CoreCtrl, GUI tool for total system tuning.

  • WattmanGTK, a GTK GUI recreating the functionality of Wattman on Linux.

  • TuxClocker, a Qt5 GUI overclocking tool for Nvidia and AMD GPUs on Linux.

Each one has specific prerequisites and settings that could be posts on their own. Please reference their guides on how to setup and tune your system.

Conclusion


As you can see, AMD GPU Linux tuning is becoming a first class experience. Many of the features available to Windows users is now available to Linux users, even using the open source driver too. There are many tweaks and options you can make. I will leave the specifics to you. If you want to reduce power usage, you reduce the voltages of the P-States and even limit the power of the card. Make sure you test the stability of the card and your computer after changing anything. Read more about Radeon open source driver features here.

Please comment if you have any questions or issues with this answer. I highly suggest you read through each link I have provided thoroughly before attempting the commands. I appreciate feedback to correct any misconceptions and to improve my posts. I can update my answer as needed.

Best of Luck!

Resources


  • ArchWiki

  • Reddit user Pannuba's post

  • Radeon Open Source Features

  • Linux Reviews

  • AMDGPU Clocks

  • CoreCtrl

  • WattmanGTK

  • TuxClocker

  • GPUTest

  • Phoronix Test Suite

2 of 2
5

I'm going to complement kemotep's answer, in connection with my observations.

A small preface: English is not my native language. Please ignore semantic, syntactical errors and incorrectly chosen words.

Firstly, to limit the maximum consumption level of the card, you need to change the power1_cap file located along the path /sys/class/drm/card0/device/hwmon/hwmon*/ where an asterisk is a number, usually from 0 to 9. In the same directory, you can adjust the voltage of the card, find out the maximum allowable consumption limit of the card, and much more.

More details can be found at the following link: https://docs.kernel.org/gpu/amdgpu/thermal.html

Secondly, to write values, it is better to use the following type of command:

echo "10000000" | sudo tee /sys/class/drm/card0/device/hwmon/hwmon*/power1_cap

Let me explain why I think so. When executing the following script:

sudo sh -c "{your_commands and/some/random/path*/}"

the asterisk will not be replaced by the missing part of the name, but will be treated as a directory name. The problem is that inside the first hwmon folder, the next nested folder has a random number in its name (example: hwmon0, hwmon3, and so on). So it's important that the asterisk works as a command, not text.

Thirdly, there is probably an error in the method of saving changes described by kemotep.

When running a systemd Unit with the options given in the example, the scripts were not executed. In my opinion, the scripts are triggered before the video adapter in the system is initialized, which is why the specified paths simply do not exist. Or, there is another irresistible force, because of which the scripts refuse to be executed, I'm not an expert.

I will give an example of my unit file, and then I will explain for the parameters:

[Unit]
Description=Limit GPU Wattage

[Service]
Type=idle
ExecStart=/usr/bin/my_script.sh
ExecStartPost=/usr/bin/my_another_script.sh
Restart=on-failure
RestartSec=5
TimeoutSec=300

[Install]
WantedBy=multi-user.target
  • The "idle" value of the Type parameter is as stated on the DigitalOcean site - https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files

The [Service] Section

The Type= directive can be one of the following:

... idle: This indicates that the service will not be run until all jobs are dispatched.

I understand it as "your Unit will be executed when all elements of the system are loaded". I may be wrong, but it works.

  • ExecStartPost - I added when I was looking into the cause of Unit execution errors. I split my script into two files, and here I have indicated the path to the second one. All commands can be placed in one script, but I decided to leave everything as it is.
  • Restart - responsible for restarting the script. Just in case I misunderstood the meaning of the "idle" parameter, this option should restart the Unit if it failed. It is possible to specify other restart conditions - read more at the link above.
  • RestartSec - this specifies the time to wait before performing a restart.
  • TimeoutSec - if I understand correctly, the unit's lifetime is indicated here. I specified 300 seconds. If it does not succeed within this time, the Unit's execution will abort.

Finally, I will describe what I did.

After setting up amdgpu.ppfeaturemask (more info can be found all over the internet), in the /usr/bin/ directory, I created two files:

my_script.sh

#!/bin/sh
sudo sh -c "echo 'low' > /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/power_dpm_force_performance_level"

my_another_script.sh

#!/bin/bash

echo "6000000" | sudo tee /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/hwmon/hwmon*/power1_cap

In the /etc/systemd/system/ directory, I created the my-gpu-setup.service file (the content was shown above).

Then, I started the service (only needs to be activated once) with the command:

sudo systemctl enable my-gpu-setup.service

And restarted the pc.

That's all.

To view information about the execution of a Unit, you can type the command:

sudo systemctl status my-gpu-setup.sevice

To roll back changes and disable the service:

  1. Type the command

    sudo systemctl disable my-gpu-setup.service

  2. Delete file from /etc/systemd/system/ directory (this action is optional).

  3. Restart a computer.

I don't see the point in creating a script to roll back the changes, since settings will be reset upon restart anyway, if you don't perform a new setup every time the system starts.

🌐
Ask Ubuntu
askubuntu.com › questions › 1272758 › unable-to-alter-amd-gpu-and-mem-clocks-and-voltages-in-ubuntu-20-04
drivers - Unable to alter amd GPU and Mem clocks and voltages in Ubuntu 20.04 - Ask Ubuntu
September 5, 2020 - 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 3
🌐
Reddit
reddit.com › r/linux_gaming › what actually determines amd gpu clock speeds?
r/linux_gaming on Reddit: What actually determines AMD GPU clock speeds?
May 3, 2022 -

Basically, I want to know, at a pretty low level, how are modern AMD cards deciding which clock speed and voltage to run at on Linux, because what I'm reading in the docs isn't lining up with my experience messing around with my GPU. I'd thought that the frequency was adjusted by the GPU changing its P-state, but my 6900XT only has the following 2, despite adjusting its clock speed in much finer increments:

# cat /sys/class/drm/card0/device/pp_od_clk_voltage

OD_SCLK:
0: 500Mhz
1: 2519Mhz
OD_MCLK:
0: 97Mhz
1: 1000MHz
OD_VDDGFX_OFFSET:
0mV
OD_RANGE:
SCLK:     500Mhz       3000Mhz
MCLK:     674Mhz       1075Mhz

In other examples, I've seen up to 7 P-states and each one has a corresponding voltage. Is there some new mechanism that AMD GPUs are now using to adjust themselves beyond P-states?

🌐
GitHub
github.com › joshlay › tuned-amdgpu
GitHub - joshlay/tuned-amdgpu: AMDGPU power/clock control with templated 'tuned' profiles · GitHub
; file: /etc/tuned/amdgpu-profile-vars.conf tuned_amdgpu_clock_min=500 tuned_amdgpu_clock_max=2715 tuned_amdgpu_memclock_static=1075 tuned_amdgpu_power_multi_def=0.869969040247678 tuned_amdgpu_power_multi_oc=1.0 tuned_amdgpu_mv_offset=+60
Author   joshlay
🌐
Dotlinux
dotlinux.net › blog › overclock-your-radeon-gpu-with-amdgpu
Overclock Your Radeon GPU With AMDGPU: A Comprehensive Guide
For AMD Radeon GPU owners, the **AMDGPU** driver—AMD’s open-source, Linux-focused graphics driver—offers powerful, flexible tools to tweak clock speeds, memory frequencies, and voltages. Unlike closed-source alternatives, AMDGPU provides granular control over your GPU’s behavior, all ...
🌐
LinuxReviews
linuxreviews.org › HOWTO_undervolt_the_AMD_RX_4XX_and_RX_5XX_GPUs
HOWTO undervolt the AMD RX 4XX and RX 5XX GPUs - LinuxReviews
Commands like: echo "0 1 2 3 4 ... have the amdgpu.ppfeaturemask=0xfffd7fff kernel parameter and you sent manual to /drm/card0/device/power_dpm_force_performance_level). The first thing you need to do before you can change anything is to set /sys/class/drm/card0/device/power_dpm_force_performance_level to manual to enable manual control. You will get write error: Invalid argument errors when writing clock values if ...
🌐
Fedora Discussion
discussion.fedoraproject.org › the water cooler
AMDGPU correct clock and power settings - Fedora Discussion
October 31, 2024 - So the AMDGPU driver has a problem: it sets clock speeds and power limits above what the GPUs actually support, causing unnecesary overclocking and system instability (https://gitlab.freedesktop.org/drm/amd/-/issues/3131). You can set limits by reviewing your card’s info online and using something like CoreCtrl to cap them, or manually as the Gentoo wiki says (AMDGPU - Gentoo wiki).