My goal is to get the optimal power management one gets on Windows. Meaning:

  • the GPU fans should not spin at low temperature (the hardware supports 0 RPM mode)
  • optimize power draw (on Windows it draws around 10W on idle, whereas on Ubuntu it draws 30W minimum)


Reading ArchWiki, Gentoo Wiki and the amdgpu driver docs, I have found something called dpm. I thought of changing power_dpm_state's value from performance to low. But I get the following error:

➜  ~ echo "low" | sudo tee /sys/class/drm/card0/device/power_dpm_state
tee: /sys/class/drm/card0/device/power_dpm_state: Invalid argument


What is causing that error? How can I successfully change the value?

Do you think I am on the right path to achieve my goal, or is this approach wrong?

System Info

➜  ~ uname -a
Linux hostname 5.3.0-46-generic #38~18.04.1-Ubuntu SMP Tue Mar 31 04:17:56 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
➜  ~ sudo lshw -c video
       description: VGA compatible controller
       product: Ellesmere [Radeon RX 470/480/570/570X/580/580X]
       vendor: Advanced Micro Devices, Inc. [AMD/ATI]
       physical id: 0
       bus info: pci@0000:26:00.0
       version: e7
       width: 64 bits
       clock: 33MHz
       capabilities: pm pciexpress msi vga_controller bus_master cap_list rom
       configuration: driver=amdgpu latency=0
       resources: irq:74 memory:e0000000-efffffff memory:f0000000-f01fffff ioport:e000(size=256) memory:fce00000-fce3ffff memory:c0000-dffff

1 Answer 1


It is totaly normal.
You approach is OK, but you misunderstood the wiki as the following explains

The power_dpm_state file is a legacy interface and is only provided for backwards compatibility. The amdgpu driver provides a sysfs API for adjusting certain power related parameters. The file power_dpm_state is used for this. It accepts the following arguments:

  • battery
  • balanced
  • performance

So you just can't send low to power_dpm_state file.

The amdgpu driver provides a sysfs API for adjusting certain power related parameters. The file power_dpm_force_performance_level is used for this. It accepts the following arguments:

  • auto
  • low
  • high
  • manual
  • profile_standard
  • profile_min_sclk
  • profile_min_mclk
  • profile_peak

to change the setting you have to use

echo "low" | sudo tee  /sys/class/drm/card0/device/power_dpm_force_performance_level
  • 1
    Thank you, that made sense. Unfortunately, even after setting power_dpm_force_performance_level to low, the fan still spins at the same speed and the power draw has not decreased.
    – psq
    Apr 23, 2020 at 0:02
  • Try changing the DPM as specified by the documentation through pp_dpm_sclk
    – Fractalyse
    Apr 23, 2020 at 1:58
  • That doesn't seem to change the fans and power draw behaviour. The conditions should permit it. The GPU is at 31 C, but the fans still spin at 1281 RPM. On Windows 10, the GPU has to reach 40 or 50 C before the fans switch back on from 0 RPM mode.
    – psq
    Apr 26, 2020 at 13:27
  • Gpus fans behavior is not the same as windows, afaik under linux, amd gpus fan's never stop even if you set the pwm to 0, couple years ago I saw a kernel patch to allow this feature. Some users report zero fan is working on some card, but lm-sensors is still reporting fan speed around 1300 rpm. Fan speed is VBIOS related, may it depends of which kernel and driver version you're running.
    – Fractalyse
    Apr 26, 2020 at 14:56
  • Ever found solutions for this, or any updates, PSQ? @psq I've found recently that there's a regression/bug in recent kernels, the problem lies inside the package linux-firmware, you have to roll back to versions previous or equal to 20201023 in order for the GPU to properly "rest" with lower clocks. It's so upsetting because on Linux (even going back to older kernel) the laptop is hotter, despite the fans spinning up all the time (which causes physical wear on the fan and will diminish its lifespan)
    – Winampah
    Feb 10, 2022 at 2:55

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .