Undervolting/Underclocking an Athlon XP for energy savings

Over the last few years I’ve set up a few MythTV systems and in general these systems tend to stay switched on 24/7 all year long. This comes to be a problem when you consider the cost of electricity these days. The obvious solution is to make the MythTV backend server use less energy.

Speculatively, I’ve been looking at an old AMD Athlon 2500 XP Barton which I’ve had knocking around here for who knows how long. The system was well specced as a desktop in it’s day with an Abit NF-7 (non SATA) motherboard, 1 gigabyte of OCZ PC3200 RAM, a DVD/RW, a Seagate Barracuda and a GeForce 6800 AGP with 128MB RAM.

The power supply was a high-end (at the time) Antec True-control 550.

Abit NF7 motherboard

Abit NF7 motherboard

Just briefly going off my own topic: The NF7 had/has a minor ‘overheating’ problem. In the middle of the CPU socket, there is a temperature sensor. If it does not make physical contact with the underside of the CPU die, the BIOS thinks the CPU is overheating and shuts the machine down. The simple remedy is to carefully bend the sensor upwards until it stands just fractionally proud of the socket, thus ensuring good thermal contact when the processor is installed.

Also present due to past presentation were a Pinnacle TV encoder card and a PCI Firewire card.

To kick off the experiment, the BIOS settings were set to their defaults which saw the system drawing about 138 watts idle and 150 watts under load (not taxing the video card). I used burnK7 from the package ‘cpuburn‘ to apply a load to the processor. Cpuburn is also available for Windows. I metered the current drawn using my handy digital plug-in meter (Kill-a-watt style device)

Initial BIOS config giving 138 Watts idle / 150 Watts load

  • External Clock       166Mhz
  • CPU multiplier       x11
  • FSB                             333Mhz
  • CPU Core volts      1.65v
  • RAM volts               2.6v
  • Chipset volts          1.6v

Not one to mess around, I quickly worked out the lowest speed I could run the CPU at on the principal that lower clock speeds would draw less power and also allow me to run lower voltages. My Barton core was a non-mobile post week-40 chip so it was hard-locked at 11x multiplier. Therefore I had just the FSB to play with. Happily, reducing the FSB to just 100Mhz gave a CPU speed of 1100Mhz.

I then hunted around for the lowest stable voltages for each of the CPU core, Northbridge and RAM power options.

As it happens, the RAM is specced for 2.6v and the BIOS did not offer any options for going lower than this so the RAM voltage was duly ignored. Next up, the Northbridge power allowed settings down to 1.4v and that is where it went. The CPU took a little more figuring out and thus far, it has been stable at 1.15 volts. A significant drop from the stock 1.65 volts.

This configuration gave an impressive power consumption reduction; about 80W at idle and 90-95W under full load (excluding graphics load)

BIOS config giving 80 Watts idle / 95 Watts load

  • External Clock       100Mhz
  • CPU multiplier       x11
  • FSB                             200Mhz
  • CPU Core volts      1.15v
  • RAM volts               2.6v
  • Chipset volts          1.4v

Still, there was quite a bit plugged into the system itself so I went hunting for more power savings. I couldn’t ignore the fact that there was a hulking great Nvidia Geforce 6800 in the AGP slot, presumably taking up lots of power. There was also an old encoder card and the firewire card in there.

I managed to root out an old PCI ATI Rage Pro card with a stonking 8Mb of video ram so out came the Geforce and in went the card from the ark. The encoder card, firewire card and DVD/RW drive came out too and the system was rebooted. In it’s new, leaner configuration, I was pulling about 20 Watts less, 64 Watts at idle and 75 Watts under full load.

Ati Rage Pro - Note the memory module taking it from 4Mb version to 8Mb!

Ati Rage Pro - Note the memory module taking it from 4Mb version to 8Mb!

By this point, I was already using lm_sensors to monitor the system temperatures and voltages. I was pleased to see that, when idling, the CPU temperature was a trivial 28’C and even under full-load this was only rising to 33’C 🙂 A note here: The cpu was fitted with a huge slab of copper and aluminium pretending to be a heatsink with a noisy (at 3000RPM) or ear-splitting (at 5000RPM) fan.

A quick tip: To see the output of the ‘sensors’ tool in real-time, use the ‘watch’ command ie: watch sensors

Being a bit of an adventurer, I decided to disconnect the case fan and the cpu fan and boot the system to see if it fried.

Inside the box showing the cooling arrangements (or lack thereof)

Inside the box showing the cooling arrangements (or lack thereof) Note the big copper slab and attached prongs over the CPU socket 😉

Happily, it didn’t fry. In fact, the idle temperature only rose to 38’C with passive cooling. There was still a bit of airflow afforded by the power-supply fan. However, running cpuburn for 20 minutes or so saw the temperature rise to over 65’C which I considered was pushing it a bit. I think that the CPU would be fine with one of those slim/low noise 80mm fans attached in place of the high-speed monster which it currently wears.

Checking the power meter, I now had just 58 watts idle / 70 watts under load. Interesting that the fan wanted so much current but like I say, it’s hardly an ordinary fan.

I also made a quick experiment in putting the hard drive into ‘suspend’ mode using hdparm -y /dev/hda1 this produced a further 4 Watt drop in current draw 🙂

Bits removed to save energy, DVD/RW, GeForce 6800, Firewire and TV cards

Bits removed to save energy, DVD/RW, GeForce 6800, Firewire and TV cards

Of course, it wouldn’t be much use as a MythTV backend server without any encoder cards so there would be three going into the PCI slots. I’ve previously tested some Hauppauge WinTV Nova-T cards and they seem to draw about 9 Watts each in almost all conditions. With three cards in and a smaller CPU fan installed, I’d expect a further 28 Watts of power draw bringing me up to about 86 Watts idle and ~96 Watts load.

Although the only DVB encoders I have to hand are Nova-Ts, I’d like to see what the current draw is on one of the Nova-T 500 twin encoders and if any savings can be made by employing one of those instead of two of the single encoder versions.

All in all, I’m quite happy with the energy saving. It actually draws less power than my old laptop although I do conceed that the laptop has an integrated display to power.