Underclocking My Video Card

I’ve been considering switching my desktop “Production PC” from XP to Linux. One of the blockers, the lack of a driver for the GL824 sound card, is now largely solved. Another blocker was the lack of hardware zoom under Linux, something I enjoyed with a Matrox Parhelia under XP. My solution was to buy an NVidia 7600GT video card which then worked nice with Compiz Fusion, which has an excellent zoom.

After installing the video card, I was quite shocked by how hot it ran, even when in console/text mode. If I did not start a graphical window manager (be it WinXP or X), the card would heat up to 85C.

I installed the NVidia overclocking tools, both under Linux and XP, and used them to underclock the card. This didn’t help when I wasn’t booted to a graphical environment though.

Doing some reading, I found that there were tools to customise the card’s video BIOS, enabling me to set not only the default clock rates that a driver will ues, but also the clock rate used when the system boots – exactly what I was after.

The tool I found is called NiBiTor v4.0, a Windows application that reads the BIOS from the card and enables clock frequencies, voltages, temperature thresholds, RAM tinings and even the boot time OEM string to be customised. Misused, it can easily trash a card.

I used NiBiTor to set the GPU clock to 150MHz and the RAM clock to 100MHz, way down from the defaults. The next problem was writing the BIOS back to the card, which NiBiTor doesn’t do. I found the nvFlash utility but it needed DOS.

Without a floppy drive handy, I burned the BIOS file and nvFlash to a CD-RW and booted to a DOS session using DUCD.

When I attempted to flash the card, nvFlash complained that the BIOS file was for the wrong PCI subdevice, which was strange given I’d dumped the card’s BIOS to start with. Given it even complained about a fresh video BIOS dump that it just took, I figured that it was an nvFlash bug and decided to tempt fate. I used nvFlash’s “-5” option to make it ignore the mismatch and it proceeded OK.

Upon reboot, the card came up with my customised OEM string and now runs cooler, hitting only 70C or so instead of 85C. I can use the NVidia tools to raise the clockrate when I want to play a game but otherwise the card is plenty fast for 2D work, mainly running VMWare, and I dont have to worry about it whilst I’m booted at a console under Linux.

Interestingly, using nvFlash again with the newly updated card and the BIOS file I just flashed gave that subdevice ID error again, confirming it was a validation bug in nvFlash.

Apart from the heat and wasted power, one of the big motivators for doing this update was that I found that when the card was in its default state, it generated a very irritating high pitch whine. I’d had similar noises with the Parhelia but nowhere near that bad. The NVidia was so bad it game me tinnitus. This has only been an issue since I moved to the P5Pe-VM motherboard so I’m guessing it is to blame, it has some out-of-spec timings to support a Core2 processor, as I’ve written before. The noise is much less with the card underclocked.

This update has made the machine a lot more bearable to install and reconfigure, however I still haven’t ruled out putting the Matrox Parhelia back in and sticking to XP for the host OS.

I’ll make that decision once I try the release of Ubuntu 8.04.