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

Answer from kemotep on Stack Exchange
🌐
Reddit
reddit.com › r/linux_gaming › undervolting and other tweaks amd
r/linux_gaming on Reddit: Undervolting and other tweaks AMD
March 5, 2025 -

Hi all, on my windows install I run my 7900XT with an automatic undervolt. Helps with temps and doesn't hurt performance. How do I achieve this in Linux (currently running Nobara).

I also have the weird issue where I get sick from FPS above 100. As I only play single player games I am not an FPS fiend and 90 is fine for me. On Windows I use Adrenaline Chill to enforce it on all games. How do I do that in Linux? And how can I limit my FPS also on desktop? Card churns out max frames when I really don't need that on Desktop. I would rather have it "chill" a bit to draw less power.

So far experience on Linux has been great but these are my 2 current issues. I have been told MangoHud helps with the FPS limiting but I can't find how to use it with non steam games or the desktop.

🌐
Linus Tech Tips
linustechtips.com › computer hardware › graphics cards
Linux: Debian, Ubuntu, Fedora etc. - power limits, underclock/undervolt (nvidia or amd) gpu? - Graphics Cards - Linus Tech Tips
September 6, 2023 - Sorry for the long title. I was going to ask - just about nvidia gpus - I thought it might be easier to underclock/undervolt a nvidia gpu - but, after some reading, I'm not too sure. There's CLI and GreenWithEnvy - I dunno about any other methods to modify hardware settings - it would be a bonus ...
🌐
LinuxReviews
linuxreviews.org › HOWTO_undervolt_the_AMD_RX_4XX_and_RX_5XX_GPUs
HOWTO undervolt the AMD RX 4XX and RX 5XX GPUs - LinuxReviews
Undervolting and testing again it was set my desired range (1080) for State 7 max clock. ... with "0xfffd7fff" & after adjusting the fan speed at (in my case..."/sys/class/drm/card2/device/hwmon/hwmon2/pwm1" it reverts back to default after 5 minutes or so of mining, "0xffffffff" is fine, just throwing this out there ... I tried the instructions using Ubuntu 22.04 HWE and the latest AMD driver and everything works with 0xffffffff.
🌐
ArchWiki
wiki.archlinux.org › title › Undervolting_CPU
Undervolting CPU - ArchWiki
The CPU can degrade with time and ... applied undervolting. Therefore it is crucial to always remember to revert to original settings in case of regular computer freeze. On Intel CPUs you can separately control the core, cache, System Agent (also known as NB/SOC/Uncore) and the integrated GPU voltages. If there is integrated analog I/O you can control that part's voltage too. The core and the cache are self-explanatory. The System Agent includes the memory controller. On Zen-based AMD CPUs you can ...
🌐
Reddit
reddit.com › r/linux_gaming › is there any undervolting software for linux?
r/linux_gaming on Reddit: Is there any undervolting software for Linux?
March 1, 2024 - For tweaking your amd cpu and/or gpu you will want the awesome CoreCtrl. Personally, I use it mostly for the gpu, since the motherboard bios already allows all the cpu tweaks I want. ... CoreCtrl for your GPU, and PBO2 in your BIOS for your CPU. Manual overclocking and undervolting the CPU doesn't really lead to anything except if you're trying to do extreme overclocking.
🌐
Manjaro Linux
forum.manjaro.org › support › gaming
Undervolting AMD GPU (RX 6000) - Gaming - Manjaro Linux Forum
January 24, 2021 - Is there a Tool, GUI or command Line, that lets me undervolt my AMD RX6800? I already Googled this, but all I could find seems to be dedicated to rather old GPUs, if at all. With AMD CPU and the newest BIOS this is pre…
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.

🌐
Lightwo
blog.lightwo.net › undervolting-underclocking-amd-gpu-linux.html
Undervolting/underclocking AMD GPU (Linux) - lightwo's Blog
Adjust core voltage offset (e.g. -50 mV for undervolting): # echo "vo -50" > /sys/class/drm/<card>/device/pp_od_clk_voltage · Adjust maximum core clock (MHz, e.g. from specs for non-OC model): # echo "s 1 2582" > /sys/class/drm/<card>/device/pp_od_clk_voltage ... As an example, here is my script with configuration tweaked for my GPU model.
Find elsewhere
🌐
Level1Techs
forum.level1techs.com › operating systems & open source › linux
GPU under-volting and performance governors - AMD - Linux - Level1Techs Forums
November 15, 2018 - Using Ubuntu 18.04. I’m new to Linux so still learning. My R9 290 isn’t giving me the performance I need compared to when I used windows - after asking here it seems to be an issue with drivers. So I have decided to go…
🌐
GitHub
github.com › NVIDIA › open-gpu-kernel-modules › discussions › 236
Undervolting support · NVIDIA/open-gpu-kernel-modules · Discussion #236
On Windows it is possible to use third party utilities like MSI Afterburner to undervolt GPUs, on Linux this functionality does not exist, even through nvidia-smi and nvidia-settings after being removed.
Author   NVIDIA
🌐
Reddit
reddit.com › r/linux_gaming › anyway to overclock/undervolt gpu and cpu (amd)
r/linux_gaming on Reddit: Anyway to Overclock/Undervolt GPU and CPU (AMD)
April 7, 2022 -

Hey all, new to Linux, been using Pop_OS the past week. Ran into some issues, particularly when it comes to gaming, but I fixed them eventually with the help of the Linux community.

However on Windows 10 I used tools like Ryzen Master to tweak the settings of my AMD CPU and MSI Afterburner/Radeon software for my GPU (setting custom fan curves, core clock, voltage, etc).

Are there any alternatives on Linux, and if so where can i install them? Thanks in advance

🌐
GamingOnLinux
gamingonlinux.com › forum › topic › 4255
Overlocking / Undervolting AMD GPU (and maybe CPU)
February 2, 2020 - Support us on Patreon to keep GamingOnLinux alive. This ensures all of our main content remains free for everyone. Just good, fresh content! Alternatively, you can donate through PayPal. You can also buy games using our partner links for GOG and Humble Store · You do not have permission to ...
🌐
Reddit
reddit.com › r/amdhelp › 9070xt undervolting in linux
r/AMDHelp on Reddit: 9070XT Undervolting In Linux
February 20, 2026 -

Hi everyone! I recently had the idea of switching to Linux via CachyOS distro, I know amd gpus will run on the Mesa stack and I want to know how I can undervolt my gpu like I used to via adrenaline software in windows, thanks for answering in advance.

Computer Type: Desktop

GPU: AMD Radeon RX 9070 XT (Sapphire)

CPU: AMD Ryzen 7 9800X3D 8-Core 16-Threads

Motherboard: Gigabyte B650 AORUS ELITE AX V2

BIOS Version: F33

RAM: 32GB G.Skill Trident 6000mt/s Cl36

PSU: Deepcool 850w Gold-Rated

Case: Inplay Seaview 360

Operating System & Version: CachyOS (Arch Linux) / Kernel Version 6.19.2-2-cachyos

GPU Drivers: amdgpu (Kernel built-in) / Mesa Version 25.3.5

Chipset Drivers: Handled natively by Linux Kernel 6.19.2

🌐
Reddit
reddit.com › r/linux_gaming › i can't get amd gpu undervolting working with corectrl
r/linux_gaming on Reddit: I can't get AMD GPU undervolting working with CoreCtrl
April 14, 2023 -

I've followed CoreCtrl setup guide, and I've enabled the kernel parameter (with systemd):

$ cat /proc/cmdline
initrd=\67c32c173924478691e7d0938a00d7cf\6.2.10-zen1-1-zen\initrd nvme_load=YES rw root=UUID=cfbab63a-784f-49cf-97dd-62d53be1d608 rw root=UUID=cfbab63a-784f-49cf-97dd-62d53be1d608 systemd.machine_id=67c32c173924478691e7d0938a00d7cf clearcpuid=514 amdgpu.ppfeaturemask=0xffffffff

The pp_od_clk_voltage file exists, but it is empty.

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

The driver being used is amdgpu.

This is what it looks like in CoreCtrl: https://i.imgur.com/8UY3Mv4.png

Any idea what could be going wrong?

🌐
Phoronix
phoronix.com › home › forum › linux graphics drivers › radeon linux drivers
AMDGPU Linux Driver No Longer Lets You Have Unlimited Control To Lower Your Power Limit - Phoronix Forums
WTF is this in Linux land. "just make it like windows" ... ???? ... What the f is going on here? Driver is now adhering power limit minimum which afair is also defined in vbios. But the main issue is that RDNA3 cards/vbioses simply allow far less power limit reduction vs. older card gens. It is a general tendency of AMD totally screwing up user control over hardware more and more with each new hardware generation. It was a walk in the park to undervolt RDNA1 by adjusting only the second half of the curve, then RDNA2 introduced the idiotic offset to the whole clock/voltage curve with random instability after many hours of usage and RDNA3 finally even ignores higher clocks configured after a threshold like ~2.7GHz + new power constraints.
🌐
Linus Tech Tips
linustechtips.com › software › operating systems › linux, macos and everything not-windows
How do I undervolt? - Linux, macOS and Everything Not-Windows - Linus Tech Tips
January 10, 2022 - I have a Asus G14 as you might have guessed and also with it's small form factor many have reported hot temperatures however I still want great performance. I found a tool called amdctl however I don't know how to use it there aren't any comprehensive guides also if possible I want to under volt ...
🌐
Reddit
reddit.com › r/linux_gaming › i don't understand how undervolting my gpu on linux works.
r/linux_gaming on Reddit: I don't understand how undervolting my GPU on linux works.
August 16, 2025 -

So on Windows, my GPU (4090) is stable with 2580mhz@0.91v. (Stock is 2580mhz@1.01v)

I just don't really understand how to translate this into my file for Linux. I read on the Arch wiki I have to make a python script like this.

#!/usr/bin/env python

from pynvml import *

nvmlInit()

# This sets the GPU to adjust - if this gives you errors or you have multiple GPUs, set to 1 or try other values
myGPU = nvmlDeviceGetHandleByIndex(0)

# The GPU clock offset value should replace "000" in the line below.
nvmlDeviceSetGpcClkVfOffset(myGPU, 000)

# The memory clock offset should be **multiplied by 2** to replace the "000" below
# For example, an offset of 500 means inserting a value of 1000 in the next line
nvmlDeviceSetMemClkVfOffset(myGPU, 000)

# The power limit can be set below in mW - 216W becomes 216000, etc. Remove the below line if you don't want to adjust power limits.
nvmlDeviceSetPowerManagementLimit(myGPU, 000000)

So for the GPU clock offset, I have no clue what that would even be or how to determine it.

Can't change the 2nd value until I figure out my first one.

And for the power limit, I thought I could just convert my volts but honestly when I try to put it through a converter nothing I get makes sense.