My RX 580 has been giving me trouble recently. There is now an audible clicking when its fans spin up from zero RPM, and unfortunately, this happens a lot in desktop use.
Not wanting to invest in an aftermarket fan just yet, I looked for ways to manage the fan RPM curves while overriding the GPU BIOS and I found amdgpu-fan.
I prefer this to the other solutions out there for a few reasons:
- Doesn’t need (or even have) a GUI
- It’s just a small Python script
- The config file format uses nice human-readable numbers (percentages, not absolute values)
- The file’s a simple bit of YAML
- The tool seems to rather smoothly calculate curves between the stop points you configure
To prevent the clicking noise when the fan engages, I set it to run at 35% RPM even as a baseline, and not ramp up until the GPU hits 60 degrees. At this setting, I can’t hear the fans during desktop use; goal accomplished.
My config for an XFX Radeon RX 580 GTS XXX Edition looks like this:
speed_matrix:
- [0, 35]
- [30, 35]
- [45, 35]
- [50, 35]
- [60, 40]
- [70, 45]
- [75, 52]
- [80, 78]
- [92, 100]
I also slapped a systemd service into /etc/systemd/system/amdgpu-fan.service to activate on boot:
[Unit]
Description=amdgpu fan controller
[Service]
ExecStart=/usr/local/bin/amdgpu-fan
Restart=always
[Install]
WantedBy=default.target
So far, I’m happy!