A radiator only cares about the temperature of incoming air

2026-06-23 #cooling #hardware

Back in late 2022 when I built my current desktop computer, I opted for a mini-ITX case rather than the typical huge ATX case. I’d been interested in liquid cooling for a long time, and for such a small case, it seemed like the best fit. Liquid cooling promises superior cooling performance, quieter operation, and is better suited for compact builds which lack space for high air flow rate.

Things didn’t work out that well: my PC has been quite noisy, and I had suspicions of thermal throttling, but never made the time to properly gather data and study the situation. Until today.

While I built this setup, I carried over a lot of my knowledge in building air-cooled systems. The water block’s radiator sat at the front of the case, the fans immediately behind it pushing air forward, with the intent of pushing out hot air through the front (and pulling air in through the back) and ensuring good air flow through the radiator.

Gathering data

I collected data using watch sensors to follow the current CPU temperature, and watch liquidctl -m NZXT status for the current coolant temperature and pump duty.

The CPU quickly spikes to nearly 100°, and the coolant temperature also increases consistently. After a couple of minutes, the coolant was at 45°, and then 55°.

It wasn’t obvious to me, but it turns out that this indicates two things: (1) the dissipation block is well attached to the CPU and there’s good thermal conductivity, and (2) the radiator block can’t cool coolant fast enough. I.e.: don’t even bother checking thermal paste, it’s fine and it’s not the issue.

I also discovered that, while fan speed is auto-regulated, the coolant pump always runs at a fixed speed unless told otherwise. I set the pump to run at 100% with liquidctl -m NZXT set pump speed 100, but that yielded no change whatsoever.

I used turbostat --show PkgWatt,PkgTmp --interval 5 to monitor power consumption. Within minutes, power usage drops to under 50% as temperature goes up, indicating massive thermal throttling.

Cooling a radiator

Without finding any useful insight online and lacking a clear direction, I threw all the data I had to an LLM and requested suggestions. The first suggestions was to flip fan direction: pull fresh air from outside through the radiator and into the case. This didn’t sound right to me; the air would be warmed by the radiator and then flow into the case.

I discussed the topic with my dad for about an hour, and I gradually became convinced of the suggestion, despite him not being aligned: The CPU dissipates into the coolant block, so hotter air doesn’t affect it as much as warm coolant. The priority is cooling the radiator, not the air inside. Pushing air inside the case also increases pressure, forcing continuous air flow. And the air from the radiator won’t be any hotter than the coolant (e.g.: 30–40°), so still much cooler than the CPU itself.

I dismantled the case and changed the direction of the fans.

The results were extremely impressive.

As I ran the initial tests, it was immediately obvious that the fans weren’t as loud during a stress test. This might have simply been due to airflow direction, but checking the PkgWatt,PkgTmp parameters as before indicates insignificant thermal throttling, although the CPU temperature was still near 100°.

I maxed the pump speed with liquidctl -m NZXT set pump speed 100, and this time there was a very obvious effect. CPU and coolant temperature both remained much lower (the CPU not even reaching 90° any more). The limiting factor was no longer the radiator, and increasing pump duty now does have an effect.

I dislike the idea of running the pump at 100% permanently, so did some extra stress tests with various values, and found a set of values that keep pump duty low while avoiding ever going near 90°:

liquidctl -m NZXT set pump speed 20 30 28 60 33 100

These are pairs of values:

These values are converted into a linear series, so 30° is some value between 60% and 100%.

liquidctl doesn’t run in the background: it configures the pump to react to these values and quits. Ideally, the pump would be adjusted based on CPU temperature too, but that would require implementing some (not very complicated) code. I might do this eventually. Honestly, these values might need review. A hot summer day when it’s 33° might affect force the pump to run higher than necessary, but that’s only twice or thrice a year here in the Netherlands anyway.

The values sent to the pump by liquidctl are lost when the system is power cycled, the pump returning to its default 30% afterwards. I configured a system service that runs that command again at start-up.

Conclusion

I’m delighted with the dramatically reduced noise level. Even some games that used to pin the fans at max speed now don’t even trigger them!

Don’t assume that experience in air cooling translates clearly to liquid cooling. Don’t procrastinate gathering data and analysing it. Use the tools mentioned above as a great starting point!

And, most important of all, remember that a radiator only cares about the temperature of the air flowing through it.

Have comments or want to discuss this topic?
Send an email to my public inbox: ~whynothugo/public-inbox@lists.sr.ht.
Reply privately by email: hugo@whynothugo.nl.

— § —