Hi everybody,

I have started to play around with Cool n Quiet on
Athlon64 a bit. In Linux, the corresponding kernel
module would be called powernow-k8. In either case,
the general idea is simple: If your CPU supports
FID and VID (frequency and voltage ID) control,
and if you know how to write to that control, then
you can save energy by reducing frequency, voltage
or both :-). In particular, you only have to write
to some MSR in the CPU for Athlon64 family CPUs.

There are more  CPU  energy saving methods which
work on the same PC: I can use FDAPM APMDOS to
halt (HLT) the CPU while DOS is bored, and I can
use FDAPM SPEEDn to halt the CPU for n of each 8
hardware time slices. The latter can be useful
if you get "runtime error 200" because your CPU
is too fast. For me, SPEED1 and SPEED2 are okay
for that. You can also use for example SPEED4 to
limit the available computing power if you know
that your CPU is fast enough at 50% throttle and
if you use apps for which APMDOS cannot detect
well when they are idle. Last but not least, you
can program the nForce2 PLL clock generator (see
Linux nforce2 cpufreq kernel module). While my
BIOS only supports overclocking to 200-400 MHz
FSB, the docs say you can also "underclock" to
at least 50 MHz below default (here: 150 MHz).

I noticed that reducing RAM clock and HT clock
can save a few Watts, too: Reducing HT from 1000
to 400 MHz saves 3 Watts for me while it causes
only minor PCIe 3d graphics bandwidth reductions.
Disks, USB, sound and network only use relatively
low bandwidth anyway. Disabling onboard devices
does not seem to make much difference except for
when you disable unused LAN chips.

Of course to get a really energy saving computer,
you have to select energy saving components :-).
My silent GeForce7600 is okay but an onboard
GeForce7050 is much better (nForce630a) and it
still can do dual head (VGA plus DVI). Similar:
Using Athlon64 BE (45 Watt) is better than using
Athlon64 while the speed is very similar.

What I am using is an Athlon64 x2 EE 3800+. This
is dual core, 2 GHz, with slightly reduced cache
bandwidth and reduced power consumption of 65 W.

After figuring out the MSRs for Athlon64 by reading
the Linux powernow-k8 sources, and reading which
choices are used by Linux (dmesg | grep powernow),
I started trying what you can do beyond that :-).

Here are my results, wattage is "incl TFT, whole PC".
All tests with FDAPM APMDOS. Linux differs a bit here:

Default in DOS: 1.20 V 2.0 GHz 121 Watt
(Linux idle:    1.10 V 1.0 GHz 113 Watt)
Official step:  1.15 V 1.8 GHz (did not test)
Official step:  1.10 V 1.0 GHz 116 Watt in DOS

Undervolting:   1.10 V 2.0 GHz 118 Watt
Undervolting:   1.00 V 2.0 GHz 117 Watt
(undervolting further at full speed: hangs...)
Undervolting:   1.00 V 1.0 GHz 114 Watt
(did not try to undervolt further here...)
Underclocking:  0.95 V 0.8 GHz 113 Watt
Underclocking:  0.85 V 0.8 GHz 112 Watt
Underclocking:  0.80 V 0.8 GHz 111 1/2 Watt

Those are the lowest possible values: Frequency can
be 0.8 to 5 GHz and voltage can be 0.8 to 1.55 Volt.
You can obviously use try to overclock here, too...

The CPU MSR tells me that the bootup speed and
voltage were 1.10 Volt and 1.0 GHz and maximum
speed and voltage are 2.0 GHz and 1.25 Volt.

I guess the idea is that I should not go below
the bootup speed and voltage, yet this gives me
only 5 of 10 possible Watts of idle saving :-p.

With my previous BIOS, the table for official steps
was in ACPI DSDT, now it moved to the ACPI SSDT.
It is tricky to find because CPU0 is aliased to P001
in DSDT and then the actual table is in SSDT :-p.

There are also TWO tables because this CPU is dual
core, but both tables are the same. I believe you
can just search for ANY table called _PSS, will be
good enough for DOS.

The table provided by the BIOS tells me that the CPU
is supposed to consume 65, 54 and 27 Watt max at the
three official steps. But you also save energy while
the CPU is idle, as you see :-). And of course, most
of the time you only select a low clock step when the
PC is not fully loaded. You usually have some driver
which keeps an eye on the system load and raises the
speed on demand and lowers it when the PC is idle.

Official style is to raise voltage step by step if
needed, then jump to the new speed, then drop voltage
if possible. This way you can go both directions.

So... What do we do with those findings? I suggest
to make some user interface for the settings :-).
Let me know if you want to be a guinea pig. If you
have a Wattmeter, even better! I wonder whether it
is worth the effort to scan the ACPI tables if the
MSR already has the min and max values filled in
as bootup and max values when DOS boots anyway...?

Yet of course it makes sense to try with even lower
clocks and voltages, as you can see :-). If there
are daring people who can also test overclocking:
Cool, let me know :-). I think you just get a hang
if you go to far, and then you should reboot soon.

There could be separate command line options for
"enable overclocking/overvolting" and for "enable
underclocking/undervolting". Command line could
be like "powernow 1.05 Volt 1.0 GHz under" maybe?

Suggestions are welcome :-)


This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
Freedos-user mailing list

Reply via email to