The whirring fan noise from my headless linux server in my living room has been annoying. Most of the noise, in my case, comes from the graphics card cooling fan. I was curious if the GPU would overheat if I run the machine with the GPU fan unplugged. Below is a little expriment I did.
Reading GPU temperature
The lm_sensors linux package provides sensor reading functionality, including GPU tempeartures; a quick call of the
sensors comamnd shows my AMD Radeon HD 4350 running at +39.5°C:
$ sensors ... radeon-pci-0100 Adapter: PCI adapter temp1: +39.5°C (crit = +120.0°C, hyst = +90.0°C)
To continue with the expriment, I quickly hacked a bash one-liner that reads the GPU temperature and appends it to a text file every time it’s invoked. It also includes an epoch timestamp.
$ cat record_gpu_temp.sh sensors | grep -A 2 "radeon" | rg 'temp1:.*?\+(.*?)°C' -or '$1' | tr '\n' ' ' >> temps.txt && echo $EPOCHSECONDS >> temps.txt
I then used
watch to have the one-liner invoked automatically every one seconds:
watch -n 1 sh record_gpu_temp.sh
The text file would look like this after a few dozen runs:
50.5 1633325134 50.5 1633325135 50.5 1633325136 50.5 1633325137 50.5 1633325138 50.0 1633325139 51.0 1633325140 ...
Running the machine under a few different scenarios while tempratures are captured, plus a quick matploblib plot of the data yielded the following:
Test 0: Baseline
The first test is for when the graphics card is simply inserted on the motherboard, but no external display is connected; the GPU is basically a “dummy”. In my test, the GPU reached a equilibrium temperature of 54.5°C.
Test 1: HDMI plugged in, heavy console usage
The next test is for when the graphics card is powering an external display and is actively rendering. Running a
cat /dev/urandom can force the GPU to be constantly rendering characters to the video console. In my test, the temperature rose to the highest of the whole expriment at 67°C.
Test 2: HDMI plugged in, low workload
Next test is when the GPU is powering an external display but not doing externsive rendering on screen. As soon as the
cat /dev/urandom was terminated, the temperature drastically dropped to around 57°C.
Test 4: Unplugging HDMI
Once the HDMI cable was unplugged, the GPU temperature quickly dropped back down to its baseline temperature.
With my specific graphics card and setup, it seems I could get away with running the server without the GPU fan on. Though, it would still be nice to add some process to monitor the GPU temperature and alert if it exceeds critical temperature.
Why not just unplug the graphics card?
Ideally, the best solution would be to run the server without a graphics card at all. Sadly, though, the old motherboard I have happens to be one of those that requires a working video device during POST, and would refuse to boot in the absence of one (1 long, 2 short BIOS error beep code).