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!