Underclocking NVIDIA
Recently my desktop has become a little noisier than usual (it is pretty quiet).
After some investigation I found that the cause was the fan on the graphics card.
Using nvclock you can find out (retrospectively only AFAICT) the fan speed, let’s reduce it to 40%:
sudo nvclock -f -F 40 Current fanspeed: 1612 RPM PWM duty cycle: 60.0% Changing duty cycle from 60.0 to 40.0 Fanspeed: 1612 RPM New PWM duty cycle: 60.0
Here we are dropping it from 60% (1612 rpm) to 40%, a bit later we rerun the command and see:
Current fanspeed: 853 RPM PWM duty cycle: 40.0% Changing duty cycle from 40.0 to 40.0 Fanspeed: 853 RPM New PWM duty cycle: 40.0
Great. Now let’s add this to /etc/rc.local and it will work on boot. Rats, it speeds up on resume from suspend, first I tried adding it to /etc/acpi/resume.d, this had no effect - the correct location is in /etc/pm/sleep.d/nvclock (nice name eh?)
#!/bin/sh # Action script to slow down Nvidia fan to make less noise if [ ! -x /usr/bin/nvclock ]; then exit 0 fi FAN_SPEED=40 if [ "$1" = "resume" ]; then /usr/bin/nvclock -f -F $FAN_SPEED 2>&1 | tee /tmp/nv2 sleep 30 echo resumig fan >>/tmp/nv2 /usr/bin/nvclock -f -F $FAN_SPEED 2>&1 | tee /tmp/nv2 fi
Now run nvidia-settings and select GPU -> Thermal Monitor. My card was at 97°C - scorching! Fortunately we can do something about this too (at least if you are using the proprietary “nvidia” driver.
Firstly you’ll probably have to enable coolbits. Edit /etc/X11/xorg.conf and check you have a section like this:
Section "Device"
Identifier "Nvidia 8800GTS"
Driver "nvidia"
Option "OnDemandVBlankInterrupts" "True"
Option "Coolbits" "1"
...
EndSection
“OnDemandVBlankInterrupts” should result in some power savings.
If you aren’t playing games, you can drop the clock rates right down too - GPU -> Clock Frequencies - I’ve set mine all the way down to 128MHz (GPU) and 198MHz (memory). This dropped the temperature from 97°C to 88°C. If the graphics card is producing less heat the other fans in the system also slow down.
The only issue was how to run this on startup and/or resume. Since this talks to the Xserver, you can’t use rc.local and friends, I created a ~/bin/xstartup file instead:
#!/bin/sh # slow down gfx card: /usr/bin/nvidia-settings -a GPUOverclockingState=1 -a \ GPU2DClockFreqs=128,198 -a GPU3DClockFreqs=128,198
Then in Gnome, System -> Preferences -> Startup Applications -> Add (/home/fbloggs/bin/xstartup as the Command).
Thanks to aldeby for some of this info.
Posted: November 10th, 2009 under Linux, My setup.
Comments: none
Write a comment