Feature Request: Better fan control from nvidia-settings GUI

I have an EVGA GTX 960 SSC. In the 900 series ACX 2.0, the default profile for the fans is stay OFF until the temperature reaches 65 °C. At 65 °C the fans are activated. This is great for normal use of the video card, but with hard usage like long renders in Blender 3D, although GPU temperature does not reach dangerous levels (no more than 70 °C in my case, 22 ºC in room, winter) but the backplate gets really hot, it burns when touched. So I fear for the health of other card components. Furthermore, the heat stays inside the case and is not well extracted out. The funny thing is that with the default hardware profile, I’ve never seen the fan to overcome more than 18% of speed.
This problem does not occur if from nvidia-settings (I have set “coolbits” option in xorg.conf) I choose in “Enable GPU fan settings” to 35%/40%. At that speed the GPU is kept really cold, the backplate is not so hot and the heat is extracted from the PC case better. But the problem is that in this way the fan is always ON.
So it would be nice to have more fan settings from the nvidia-settings GUI. For example be able to choose another temperature instead of those “65 °C” hardware factory, for example “50 °C”. So that way, the fans are activated at “50 ° C” and the fan speed is variable always trying to keep the temperature at 50 °C.

In short, incorporate features for better profiling the fans such as those Windows users can set through some applications, and Linux users can not use.
Thank you very much!

You’re welcome:

Adaptive FAN speed management for NVIDIA GPUs (GeForce GTX) on Linux

Run it in console. You can also remove echo at line 48 and run this script in background.

$ ./nvidia-fan.sh &

Well, this is f*cked up. The original message by YAFU (https://devtalk.nvidia.com/member/1912333/) disappeared:

Thank you birdie!
The script works great, but the fan is always on. Is it possible to make the fan remains off until 50 °C, and when overcomes this temperature the fan is turned on?
That is:

  • below 50 °C: Fan off
  • Overcoming 50 °C: Fans are turned on and the speed variable always trying to maintain a temperature of about 50 °C (maybe 55 °C)

At least with my card there’s some FAN speed value which makes it run at the lowest speed, vs. “0” which revs up the fan (it surely looks like a bug with NVIDIA drivers).

Before running my script, run the nvidia-settings applet and write down this value.

Then change the script accordingly, so dtemp[0] will be different (it won’t be “0”). Oh, I made a mistake in naming a variable, it should be fanspeed instead of dtemp. Sorry, I have a cold, I cannot think straight.

Hopefully it’ll work.

God, I’m absent-minded, sorry.

I’ll think about maintaining the temperature but that’s gonna be a different script altogether. BTW, my current one is capable of maintaining the given temp, you just need to tune the parameters (the array of temps and fan speed values).

At the moment such a script doesn’t seem easy to implement.

OK, here’s the script for you.

Adaptive fan speed management for NVIDIA GPUs on Linux to maintain the given temperature

I set the initial value to 60 not to fry your GPU if something suddenly goes wrong.

I’ve noticed that the fan does NOT always follow the specified speed. I’ve created a thread to discuss this problem.

Hi birdie, thanks.
With the second script the fan speed always attempts to match the temperature. That is, if the GPU had been working and the temperature is 65ºC when I start the script, then the fan speed starts at 65%. So the temperature starts to drop and fan speed is always tied with temperature matching the same value, then the temperature is stabilized at about 28°C with the fan running at 28%. So that where the fan speed always equals the temperature, is it what is called “adaptative”?

The way the script is working now will be useful to me when the GPU is used intensively, but I do not know if it is as you thought it should work. For example I do not understand:
fansmin=35 >> it is not met, if the temperature is 27°C then the fan speed is 27%
faninit=60 >> it is not met, for example if the script is started when temperature is 65°C, then fan start at 65%
Targett=50 >> I do not understand what the script should do with this value, the fan is always on

Sorry if I’m a little hard to understand things, but I have no idea about scripting. Also, English is not my language.