After playing around with fan curves on my ASRock DeskMini X300 based home server, I noticed one interesting thing. At least it was interesting to me.

image

Background

I had one goal: to try to see if I could turn it into a semi-passive PC by only turning the fan on when the PC was under load while keeping it off for as long as possible. Running the fan only when necessary means less noise and less dust accumulating on the heat sink. No dust, no maintenance required.

The cooling solution used is the Noctua NH-L9a, a low-profile CPU cooler. The two main selling points for me were that it was small enough to fit into the DeskMini, and it is much quieter than the stock AMD Ryzen Stealth cooler.

I started with something reasonable: only kick the fan on when the CPU is over 55°C. This did end up with the fan occasionally turning off, but after around 10-15 seconds it would kick on again. With time, I bumped this limit up by 5-10 degrees each time and ended up with the current configuration. The fan now turns on after 80°C and starts spinning at a modest level at over 90°C.

By turning this limit up, I noticed that the PC could be run in a fanless mode for much longer. This meant that the PC was also much hotter itself and was warm to touch, but nothing extreme or concerning.

Results

I added a couple of lines to my fan control script to track the CPU temperatures and the fan speeds, here are the results:

CPU temperatures over a 19 hour period.
CPU temperatures over a 19 hour period.

Based on the data I gathered, the CPU fan was off for 90.7% of the time during this test period. The temperature in the apartment was around 26-30°C, which is pretty much the worst case scenario in my region.

My running theory is that a hotter heat sink is able to dissipate more heat passively. The motherboard and the metal case may also be small contributors to cooling the PC this way. The PC is also acting as a 24/7 home server, which means a lot of idle time that’s interrupted by occasional short-term load. Heat from those bursty loads can be stored in the heat sink relatively easily without it heating up enough to trigger the fan.

This approach will likely not work that well if your workloads are more demanding and result in a higher continuous loads on the system.

Yes, I’m aware that running a PC like this may have negative consequences. I ran the server like this for about a week and while I liked it being a semi-passively cooled server, but decided to go back to the old behaviour.

While there are plenty of fanless designs out there that run hot by design, I decided that I don’t want to take this risk with the DeskMini. It would be a cool experiment, but my main server is probably not the best candidate for it. The CPU could handle it without breaking a sweat, but I’m more concerned about the rest of the components, especially the motherboard. The stickers on the DRAM modules were already warped due to the heat, I prefer not to damage anything else.

For those who want to try something similar (and at your own risk, of course), here’s my fan control script. Just make sure to install lm-sensors first and run sudo sensors-detect so that the controls are exposed by your system. The exact paths and values may be something you need to change to match your system.

#!/bin/bash

set -e

# /sys/devices/platform/nct6775.656/hwmon/hwmon3

echo 1 >/sys/devices/platform/nct6775.656/hwmon/hwmon3/pwm2_enable

while true; do

  temp=$(cat /sys/class/hwmon/hwmon4/temp1_input)

  if ((temp > 94000)); then
    echo 120 >/sys/devices/platform/nct6775.656/hwmon/hwmon3/pwm2
  elif ((temp > 80000)); then
    echo 70 >/sys/devices/platform/nct6775.656/hwmon/hwmon3/pwm2
  else
    echo 0 >/sys/devices/platform/nct6775.656/hwmon/hwmon3/pwm2
  fi

  sleep 5
done

Honorable mentions

I’m not the only one who likes to experiment with the ASRock DeskMini X300. This all started with an idea of fitting a passive cooler into the DeskMini and me discovering that it was already done.

More fun ideas: