CPU temperatures can swing from 40C to 90C and back in a matter of seconds as loads come and go. Modern fan control algorithms have delays and smoothing for this reason.
If you had a steady state load so stable that you could tune around it, setting a fan curve is rather easy and PID is overkill. For normal use where you’re going between idle with the occasional spike and back, trying to PID target a specific temperature doesn’t really give you anything useful and could introduce unnecessary delays in cooling if tuned incorrectly.
Something that would help is multiple fans being adjusted by the same PID controller. It's not a problem if they're spinning too fast, but if you need more cooling the controller needs to increase air flow at the fastest rate which means turning up multiple fans.
Some sort of smoothing plus a conservative base rate might be more tolerable.
Do you use windows?
I find that with windows the fan is always spinning, even if at low speed. While with linux most of the times it is not spinning at all.
I had to throttle my CPU in my macbook or it would shutdown for overheating while compiling.
I don't consider that a feature.
ASUS motherboard Noctua fans if that makes a difference.
In a desktop the motherboard controls the fans unless you have an alternative like fan control installed, so not windows.
In a laptop it's either still the motherboard, or a specific chip used to manage the fans and other peripherals (ie for Dell/XPS it's locked out of bios control and you need to use Dell's special software to adjust it; Fuck You, Dell!), so still not Windows.
This reflects in the CPU being hotter, which reflects in the fan spinning more.
You quickly stop hearing a fan constantly running at 50%, but a fan randomly switching between 10% and 100% gets on your nerves extremely quickly.
I suppose the best way would be to try, but my current computers have no (or very unstable) interfaces for fan control.
They have very little thermal mass and if too much energy is in them the liquid all evaporates.
When the liquid evaporates their performance falls off a cliff.
They actually exist (such as ARCTIC F12 TC) but not very common. Separate controllers such as Adafruit EMC2101 are also available.
You can verify that in the datasheet of EMC2101, and in the case of F12 TC in product descriptions (..The fan responses to the rise in temperature swiftly within a critical 6°C range, the rpm of the ARCTIC F Pro TC fan increases from around 500 to its maximum of 2,000 rpm (the steep curve in the chart).)
There's pretty much a 1:1 link between CPU load and CPU temperature, so relying on temperature probes is good enough for almost all situations.
That’s why I didn’t talk about user software and was focusing more on mobo (since it knows the current state of all usage and is not os-dependent) or low-level OS hooks which can have battle-tested processes to make sure that the fans are not left uncontrolled. I appreciate you bringing up the point though, it’s vital to make sure the chips don’t fry.
> There's pretty much a 1:1 link between CPU load and CPU temperature
Yes agreed, but there’s a lag time between the two
But even if you just forced all of your fans to run at 0% (or physically removed them) I would expect the CPU to trigger PROCHOT and throttle it's performance, hard crashing if it has to.
If the OS can't keep up with the fan speed update schedule, go into your failsafe mode.
If you cross that maximum temperature while being commanded by the OS to run at maximum speed, then that's presumably not an OS bug. If otherwise, treat it as an OS bug and put the OS back into diapers, to re-try the big kid underwear on the next restart.
And many desktop motherboards manage to screw up even the basic fan curve, offering users control of only two points within strict bounds, no piecewise linear curves or hysteresis settings.
I started a fan controller project some 4 years ago and it's now sadly in limbo, waiting for me to solve power filtering issues for the makeshift power supply it grew into. Maybe I should just limit myself to 4-pin fans...