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 :-) Eric ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ Freedos-user mailing list Freedos-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/freedos-user