How to lock fan speed for amd gpu in Ubuntu 20.04?
Solution 1
In case anyone is interested the solution I made and the corresponding systemd
service is here: redfan
https://github.com/nmtitov/redfan
So far my best guess is to write the following script and keep it always running in the background:
while sleep 1; do echo 0 > /sys/class/drm/card1/device/hwmon/hwmon1/pwm1_enable; done
Every second I "disable" pwm
and make fans running at max speed. The driver (or something else) restores the value, but the next second I immediately disable it again.
Solution 2
I wanted to lock fans at 80% but in a slightly different manner. I've changed nothing in /sys/class/drm/. Just
readlink -f /sys/class/drm/card1/device
, where card1 is my amd videocard.
Thus I know the path to the file I want to change.
And after that:
sudo sh -c "echo '1' > /sys/devices/pci0000:00/0000:00:03.0/0000:06:00.0/hwmon/hwmon1/pwm1_enable"
sudo sh -c "echo '200' > /sys/devices/pci0000:00/0000:00:03.0/0000:06:00.0/hwmon/hwmon1/pwm1"
Works! Ubuntu kernel 5.4
Solution 3
My config is
sinix@sinix-garage:~$ lspci -v | grep VGA
lspci: Unable to load libkmod resources: error -12
Flags: bus master, VGA palette snoop, 66MHz, medium devsel, latency 64, NUMA node 0
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Hawaii XT / Grenada XT [Radeon R9 290X/390X] (prog-if 00 [VGA controller])
04:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] (rev e7) (prog-if 00 [VGA controller])
06:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Baffin [Radeon RX 550 640SP / RX 560/560X] (rev cf) (prog-if 00 [VGA controller])
I setup Hawai & Baffin to work with amdgpu-fan
, and Ellesmere only work with redfan
. That is not solution because I can't setup pwm on Ellesmere. So PC constantly frozen with this solution. I know that is problem on relation between amdgpu-20.45
and kernel 5.4.65.
So I decide to experiment with diferent kernels, and I find the right one.
https://kernel.ubuntu.com/~kernel-ppa/mainline/v4.19.180/
After install 4.19, Ellesmere boot with pwm1_enable=2
but finaly they listen "echo" to 1, and all other daemons work, like amdgpu-fan
.
So "matrix" in /etc/amdgpu-fan-config.yaml
work the job.
GPU0 t=66°C fan 67% power 134.09W, GPU1 t=54°C fan 56% power 104.09W, GPU2 t=51°C fan 53% power 47.23W. Total power: 285.41W
Related videos on Youtube
Nik
Updated on September 18, 2022Comments
-
Nik over 1 year
I'm trying to lock RPM of my AMD Radeon videocard fans at the full speed:
echo 1 > /sys/class/hwmon/hwmon1/pwm1_enable echo 255 > /sys/class/hwmon/hwmon1/pwm1
What I have tried so far
Obviously, it doesn't work due to missing permissions (even with
sudo
/root
) because it is/sys
:$ sudo su $ echo 255 > /sys/class/drm/card1/device/hwmon/hwmon1/pwm1 bash: echo: write error: Invalid argument
I have also tried
sysfs
config to edit these params but it didn't work:$ cat /etc/sysfs.conf class/drm/card1/device/hwmon/hwmon1/pwm1 = 255 class/drm/card1/device/hwmon/hwmon1/pwm1_enable = 1
echo 5 | sudo tee ...
also doesn't work.Neither does
sudo sh -c
:sudo sh -c 'echo 225 > /sys/class/drm/card1/device/hwmon/hwmon1/pwm1' sh: 1: echo: echo: I/O error
Archilinux Wiki states it should be possible though https://wiki.archlinux.org/index.php/fan_speed_control#Configuration_of_manual_control They edit values directly with
echo
and looks like it works for them.Another guide also recommends configuring fans this way https://linuxconfig.org/overclock-your-radeon-gpu-with-amdgpu
Python
amdgpu-fan
package also doesn't work for me.sudo fancontrol
doesn't work as well:$ sudo fancontrol Loading configuration from /etc/fancontrol ... Common settings: INTERVAL=10 Settings for hwmon1/pwm1: Depends on hwmon1/temp1_input Controls MINTEMP=10 MAXTEMP=60 MINSTART=50 MINSTOP=0 MINPWM=0 MAXPWM=255 AVERAGE=1 Enabling PWM on fans... Starting automatic fan control... /usr/sbin/fancontrol: line 649: echo: write error: Invalid argument Error writing PWM value to /sys/class/hwmon/hwmon1/pwm1 Aborting, restoring fans... Verify fans have returned to full speed
Daemon (service) also doesn't work:
fancontrol[1877]: MAXPWM=255 fancontrol[1877]: AVERAGE=1 fancontrol[1877]: Enabling PWM on fans... fancontrol[1877]: Starting automatic fan control... fancontrol[1877]: /usr/sbin/fancontrol: line 649: echo: write error: Invalid argument fancontrol[1877]: Error writing PWM value to /sys/class/hwmon/hwmon1/pwm1 fancontrol[1877]: Aborting, restoring fans... fancontrol[1877]: Verify fans have returned to full speed systemd[1]: fancontrol.service: Main process exited, code=exited, status=1/FAILURE systemd[1]: fancontrol.service: Failed with result 'exit-code'.
To sum up: seems that I can't edit /sys/ amdgpu-related entries at all
Part 2
It seems that there has to be another way around, like some
amdgpu
config or something like that. Maybe override kernel-defined values during boot?In Windows, it's possible to tune fans directly from the AMD Radeon driver GUI app.
I don't want fancy curves, I'm simply trying to force lock static RPM (full-on mode). I'm using
amdgpu-pro
drivers, Ubuntu 20.04. I'd like to avoid using scripts likefancontrol
The question itself
I wonder if that's possible just to set
pwm1_enable
to1
andpwm1
to255
? Looks like the suggested method should be working, but Ubuntu 20.04 security limitations are more restrictive than other distros' ones.update This thing works! But only for 1-2 seconds, after that, fans go back to system-defined speed
https://github.com/DominiLux/amdgpu-pro-fans/blob/master/amdgpu-pro-fans.sh
update 2
Disabling pwm works for about 1-2 seconds.
echo 0 > /sys/class/hwmon/hwmon1/pwm1_enable
But after that, some daemon reverts this value back to 2. How could I prevent it from changing by other users except me? E.g. prevent it from changing by the system?
-
Nik almost 3 yearsSounds like a good option, unfortunately, I don't have an Ubuntu system anymore to test it.
-
Nicolas Molano over 2 yearswhere can I find info about pwm1_enable and pwm1 and the available values options and their meaning? For example my current values in the correspondingly files are 2 and 43. I would guess that 1 for pwm1_enable is set to manual and 200 pwm1 is the fan speed? how 200 maps to 80% fan speed?
-
user986730 over 2 years@NicolasMolano apparently those sysfs files follow the "hwmon" kernel interface. The amdgpu driver documentation has some more information on it, but I still find all these references to be a bit lacking.