Rem0o / FanControl.Releases

This is the release repository for Fan Control, a highly customizable fan controlling software for Windows.
Other
13.89k stars 440 forks source link

[Feature Request]: Ability to use data from sensors other than temperature to control fan speed #1527

Open brentward opened 1 year ago

brentward commented 1 year ago

This feature would allow using data from sensors other than temperature to control fan speed. For example, CPU Package Power or GPU Power in watts, or CPU Core Utility or GPU Core Load in percentage. Allowing non-temperature sensors to be used for control of fans would allow more sophisticated control. For example, fan speed could be increased when GPU Power is over a certain threshold before temperature goes up in order to keep the GPU temperature under control.

The feature should default to not showing non-temperature sensor data so as to not clutter the interface with a lot of irrelevant data. A simple checkbox to allow all sensors to be used would be adequate or alternatively an interface to select which non-temperature sensors can be added to the sensors available for controlling fans would possibly lead to a cleaner interface in normal usage.

I'm using the Rem0o/FanControl.HWInfo plugin to make more data available and when I add and then remove non-temperature sensors I can see in the error log that the non-temperature sensors are being detected by FanControl but they still are not available to use to control fans so I'm hoping that this isn't a difficult change to implement.

Rem0o commented 1 year ago

My main gripe with this is that every place which consumes sensor data right now expects degrees, so the ranges, visual, units, validation and everything just works with that unit. Allowing let say power, usage % and frequencies, would add a layer of complexity which multiplies by the number of supported units for every element that consumes these sensors, like the graph display, the fan curves, the mix sensors ( you can't mix a power sensor and a temp sensor...), the tray icons.....

also... and this is a matter of opinion, I know, I would argue temperature is the only real sensor you need to effectively cool your computer.

fan speed could be increased when GPU Power is over a certain threshold before temperature goes up

That premise is kinda wrong (IMO). You can't dissipate heat that doesn't exists yet. This will "maybe" slow down the component reaching it's eventual max temperature. but it will get there anyway. Most of the time when a load hits a CPU or GPU, the temperature pretty much jumps instantly, to a certain point, then slowly rises to its eventual peak. Temperature based control will catch that jump, and start cooling more when the component actually needs it: when the temp actually rises.

TLDR: Effort is relatively high, complexity is high, bug potential is high, and the potential benefits (imo) are more theoretical than practical.

Byleth-Eisner commented 1 year ago

@Rem0o I understand your explanations regarding the challenges behind implementing sensors that read anything other than temperature; I do however dispute that being able to control fans with readouts other than temperature can be useful.

I'm running a Corsair AIO for my CPU. I use FanControl to control one of the case intake fans. The main purpose of said intake fan is to feed fresh air to my radiator fans, which uses air from within the case. In short, the case intake fan in question doesn't need to spin up if the radiator fans run at low rev.

The radiator fans are controlled by iCue which, like in any water-cooling system, runs of the coolant temp instead of CPU temp. Sometimes my CPU temp spikes for like 10 seconds, like from 35 to 75 or something. No biggie. Heat spikes of the sort are absorbed by the high specific heat capacity of water, and the radiator fans don't need to spin up at all for these spikes, and therefore the case intake fan also doesn't need to respond to these spikes. The radiator fans, and by extension the case intake fan, only need to work hard during a prolonged heavy load that causes the coolant temp to gradually rise.

Ideally I would have the case intake fan to run off the same sensor as that of my radiator fans, viz. the coolant temp, but right now that's not possible if I need iCue running. So I'm left with the CPU temp, but it's difficult to filter out the temp spikes from that of the prolonged load just by CPU temp even with the Average Sensor with a long duration. Attempting to establish a link that is accurately in-phase between coolant and CPU temps with the Average Sensor is very ineffective due to their vastly different responsiveness.

The power usage sensor reading from the CPU though, can be a good alternative metric for the coolant temp. All I need to do is run Average Sensor of the power usage with something like a 5-second duration and it should be very effective in filtering out the spikes and give in-phase approximation of my coolant temp. The reason power usage is a worthy alternative is because it's a reading that doesn't involve iCue and is accessible by something like LibreHardwareMonitor.

The above's my reasoning why FanControl having the ability to use power usage as a sensor can be a desirable feature. I understand my argument doesn't negate the difficulties behind its implementation; all I'm saying is why this can be very desirable.

vertigo220 commented 2 months ago

As I mentioned in #1951 (https://github.com/Rem0o/FanControl.Releases/issues/1951#issuecomment-2198342598), I have a use case where controlling based on RPM (I know, it sounds very backwards) would be useful. I also realize this could get very messy, as adjusting the speed based on RPM could trigger an adjustment in speed based on RPM, ad infinitum, so it would have to use precautions, such as narrow ranges and only adjust once per x seconds/minutes.