How I Made My Desktop 6.839x Quieter

Posted on August 10, 2023

As a student, I’m a little bit short on space in my flat. This means that my desktop PC has to stay in my bedroom, which would be fine if I turned it off at night. I run several cronjobs overnight, and while the noise of the fans and hard drives stays at a constant volume, it’s a little louder than I’d want.

Finding Noise Sources

I used a sound meter app on my phoneThere’s plenty on the Play Store and I’d imagine just as many on the App Store; they all do roughly the same job, so there’s not much point in me recommending one. Pick one that has the least ads or something.

to measure the base noise level of my room. This came out to be 29.6dB, with all fans and computers turned off.

Next I had to identify all of the noise sources in my desktop. The primary disk is an NVMe SSD, and as such is fully silent. The only moving parts are the fans (for the CPU cooler, case, GPU, and PSU) and two SATA hard drives I use as large storage dumps.

I obviously still need the CPU cooler, GPU and PSU fans, but the case fans (which came with the case) probably aren’t the most efficient. I tested my temperatures with and without the case fans (through a benchmarking utility) and the difference was fairly minimal. I have a nice Noctua fan on the CPU, and it seems to deliver enough airflow on its own.

I could theoretically move the data from the hard drives onto an SSD, but that’s pretty pricey; there’s around 5TB of data stored between them! Their noise profile is narrow however, producing specific pitches, which makes the sound more obvious.

Measurement

I then set about measuring the noise levels after disconnecting the power to the fans and the HDDs. Here are the results I got::

Enabled devices Noise (dB) Ratio against baseline
All 50.5 11.092
Only case fans 48.6 8.913
Only HDDs 41.4 3.89
Neither fans nor HDDs 33.8 1.622
Baseline 29.6 1

Since decibels are on a logarithmic scale, an increase in 10dB is equivalent to ~3.162 times as much noise! So having a configuration that’s only 62% louder than the baseline noise of my room is very good. Bear in mind that I recorded these by putting my phone inside the case, so once the case is closed it’s even quieter to the ear.

The methodology here is perhaps flawed, as the fans are not that louder than the drives to my ear. I believe the air rushing past the microphone is causing the inflated values.

Reducing Noise

So now that we know where the noise is coming from, what can we do?

As mentioned above, the case fans have a negligible effect on temperatures, so I just left them unpowered completely. My motherboard isn’t capable of running them at 0 RPM, and I don’t want to buy a fan controller just for this.

For the CPU fan, I used my BIOS to adjust the fan profile. This lets me keep the fan at low speeds when the system isn’t under load; since it’s a Noctua fan, it’s effectively completely silent.

As for the hard drives, they’re a little more complicated. As mentioned, it’s not within my budget to replace them with SSDs currently (as much as I’d like to). Luckily, they’re used for bulk storage; which implies bulk reads/writes. The drives should be fully powered on and accessible when I need them, but the rest of the time should be powered down.

Luckily, Linux can do this for us! The amazing hdparm utility allows us to define the power management profile of each disk ourselves. We can choose a power profile that enables “spindown” and give it a fairly low timer to spin down. Then our disk is silent ~99% of the time.And since most of the data on these drives are media (games, films, music etc), most of the time when they’re active, I’m using headphones or speakers anyway!

Telling NixOS to configure the power management on startup is pretty simple. Something like this should work:

services.udev.extraRules = ''
  ACTION=="add", SUBSYSTEM=="block", KERNEL=="sda", RUN+="/usr/bin/hdparm -B 127 -S 2 /dev/sda"
'';

Obviously you should change the values here to suit your machine; don’t just copy and paste them. You can find detailed explanations of hdparm’s parameters here.

Conclusion and Further Steps

It took me around an hour (including testing and cleaning away a lot of dust!) to eventually remove two cables and add three lines to my Nix config. However, I’ve reduced my desktop’s noise levels by nearly 7x! I’d call that a success.

I suppose I could get even quieter by switching to a liquid cooling solution, for both the CPU and the GPU. The GPU fan (while usually pretty quiet) is small and can get loud when under load, so this should drastically lower noise. I’d also be able to use larger fans at a lower RPM on the water cooling radiator.