Erleuchtung, Stromsparen, Undervolting PHC, TLP linrunnerscript. ____________ Lob für linrunner
Hi Stromsparer,
ich bin doch sehr überrascht.
Bei einem T61 Intel-Grafik ermittelt "powertop" bei Debian Squeeze KDE amd65 eine Leistungsaufnahme von 210 Watt.
Es wurde ein Grundinstallation verwandt.
Powertop: Stromverbrauch (ACPI-Schätzung): 213,3W (0,1 Std.)
Gleicher T61 bei Kubuntu Maverick mit PHC- und Linrunnerscript-Optimierung werden nur noch ca. 18 Watt verbraucht.
Powertop: Stromverbrauch (ACPI-Schätzung): 19,5W (0,9 Std.)
Die Dokumentation von linrunner ist hervorragend, wirklich super. Sehr professionell.
Danke linrunner.
Linrunner, jetzt verstehe ich den Namen, wenn alle anderen keinen Strom mehr haben, Linrunner läuft.
Könnt Ihr diese Erfahrungswerte bestätigen?
Habe ich etwas falsch gemacht?
Ein richtiger WOW-Efekt.
MfG
xsid
Anleitung PHC:
http://openmindedbrain.info/26/10/2010/undervolting-in-ubuntu-10-10-maverick/
Hi Stromsparer,
ich bin doch sehr überrascht.
Bei einem T61 Intel-Grafik ermittelt "powertop" bei Debian Squeeze KDE amd65 eine Leistungsaufnahme von 210 Watt.
Es wurde ein Grundinstallation verwandt.
Powertop: Stromverbrauch (ACPI-Schätzung): 213,3W (0,1 Std.)
Gleicher T61 bei Kubuntu Maverick mit PHC- und Linrunnerscript-Optimierung werden nur noch ca. 18 Watt verbraucht.
Powertop: Stromverbrauch (ACPI-Schätzung): 19,5W (0,9 Std.)
Die Dokumentation von linrunner ist hervorragend, wirklich super. Sehr professionell.
Danke linrunner.
Linrunner, jetzt verstehe ich den Namen, wenn alle anderen keinen Strom mehr haben, Linrunner läuft.
Könnt Ihr diese Erfahrungswerte bestätigen?
Habe ich etwas falsch gemacht?
Ein richtiger WOW-Efekt.
MfG
xsid
Anleitung PHC:
http://openmindedbrain.info/26/10/2010/undervolting-in-ubuntu-10-10-maverick/
And what are the negative aspects of Undervolting? Well actually taking some voltage from the CPU could bring in computational problems, basically when taking too much of it the CPU could start mixing 1's and 0's which can crash the entire system (reset needed) or bring in data loss/corruption. Not so good eh? So how is that people manage to do it without causing those side effects?
It depends on every CPU. Because it is not possible to create two CPU's 100% alike in the factory, tests are made to ensure all CPU's sold can work with the voltages specified under all circumstances. The fact is that some of the CPU's can work with voltages many times inferior than others that came from same factory/same box. The trick is to discover the limits of your CPU and set the voltage just a little above this limit and you are good to go.
WARNING because of the negative aspects shown above, by following the steps given below, I am not under any circumstances responsible for any data loss or corruption, damage to the CPU/PC. Those next steps were proven to work for many people around the world, but no guarantee is given that it would work for you without possible side effects. Just make sure that at least you have an updated backup of the data before continuing.
Ok, so now that you accept full responsibilities for the steps below, let's get going. I actually did this several years ago under other version of Ubuntu (using a single core Pentium M CPU back then) and it worked alright, but many things changed since then, we've got multi core CPU's everywhere and the way the undervolting issue is handled in Linux is very different also.
So what do we need? A single or multi core Intel Mobile/Laptop CPU and Ubuntu 10.10 installed on it and some time because it will take a little before having everything configured. Here are the complete steps that worked for me:
As we are going to use a custom kernel, we need to add the linux-phc PPA repository, so just open a terminal and execute: 1 $ sudo add-apt-repository ppa:linux-phc/ppa
2 $ sudo apt-get update
1 $ sudo add-apt-repository ppa:linux-phc/ppa
2 $ sudo apt-get update
Basically they provide the same kernel as the Ubuntu one but with the patch that is capable for Undervolting.
Next we need to install the phc kernel, with headers: 1 $ sudo apt-get install linux-generic-phc linux-headers-generic-phc
1 $ sudo apt-get install linux-generic-phc linux-headers-generic-phc
Ok, now we need to restart and use the installed phc kernel when booting. After restarting, you can check if you are using the phc kernel by using 1 $ uname -r
2 2.6.35-22-generic-phc
1 $ uname -r
2 2.6.35-22-generic-phc
If no "phc" appears, then you have to configure grub2 to allow you to chose boot options and select the phc kernel at boot time. This can be done many ways one would be: 1 sudo update-grub
1 sudo update-grub
and count the number of lines that says "Found linux image" (first one is 0) and, when you found the phc one, do: 1 sudo gedit /etc/default/grub
1 sudo gedit /etc/default/grub
then just change the "GRUB_DEFAULT=0" to the number of the entry you found that has phc. Save the file and do a update-grub command again like in the first step. Now you can reboot into the phc kernel.
Great, we are using a phc kernel, now we need to add the actual undervolt module, as the kernel comes only with support for it, not the actual module. First we need to download phc-intel offtree module from here. Right now they do not have a compatible version for the 2.6.35 kernel, but give the link a try, maybe by the time you read this post there is already a module that can be used in 2.6.35 kernels. Meanwhile there was a kind user on linux-phc forum that managed to create a module for the 2.6.35 and 2.6.36 kernels. Topic about it here. Direct link to the tar.gz file he kindly shared to the rest of us here. So download and unpack the files anywhere and point the terminal to the directory where you extracted the files and do: 1 $ make prepare
2 $ make
3 $ sudo make install
1 $ make prepare
2 $ make
3 $ sudo make install
Right now you should have the module installed, check if everything worked by typing: 1 $ cat /sys/devices/system/cpu/cpu0/cpufreq/phc_default_vids
2 40 34 31 27 23 15
1 $ cat /sys/devices/system/cpu/cpu0/cpufreq/phc_default_vids
2 40 34 31 27 23 15
If everything worked, you should see some numbers (the ones above are the default ones for my CPU). If not, you may try to restart and check back to see if it works.
So right now we are set, the only thing we have to do is... undervolt the CPU.
Now we have to discover the limits of the CPU by lowering it's current voltage one step at a time and set the voltage 4 steps above the critical limit (where the cpu starts to give wrong calculations or the PC simply crashes).
Why four? Well the recommendation was 2 steps above, but with this limit the PC crashed in the same day hours later, so I made it 3 steps, then some days after it crashed again. So I think 4 steps should actually do it. If not, you may increase this value until it suits you.
Ok great now how to find the actual critical limit? There exists a script, created by the community, but it's old and it does not work for multi core CPU's and also in my particular case it sets the voltage directly below this critical limit so the PC crashes instantly.
I updated this script and made it work on multi core CPU's (hopefully it will work for you too), so you just have to download the script, then give it execution permissions and execute it and follow on-screen indications: 1 $ chmod +x intel-phc-undervolt.bash
2 $ ./intel-phc-undervolt.bash
1 $ chmod +x intel-phc-undervolt.bash
2 $ ./intel-phc-undervolt.bash
Oh and make sure you close as many applications as possible when executing the script as the system may actually turn instable (it is intended actually) just to prevent any data loss. The script treats all CPU's cores with the same voltages, so if one of them is weaker than the other (does not support such a aggressive undervolting) is this the critical value that the script uses for all of the others, even if they could possibly use a even lower value.
After you finished with the script, now you should have a "phc_tweaked_vids" file, containing the acceptable steps for your CPU. Now you only have to make changes permanent (load them at every boot of the pc) by editing /etc/rc.local file: 1 $ sudo gedit /etc/rc.local
1 $ sudo gedit /etc/rc.local
and adding one entry for every core you have, something like: 1 echo "23 20 4 4 4 4" > /sys/devices/system/cpu/cpu0/cpufreq/phc_vids
2 echo "23 20 4 4 4 4" > /sys/devices/system/cpu/cpu1/cpufreq/phc_vids
3 .
4 .
5 .
6 echo "23 20 4 4 4 4" > /sys/devices/system/cpu/cpu8/cpufreq/phc_vids
1 echo "23 20 4 4 4 4" > /sys/devices/system/cpu/cpu0/cpufreq/phc_vids
2 echo "23 20 4 4 4 4" > /sys/devices/system/cpu/cpu1/cpufreq/phc_vids
3 .
4 .
5 .
6 echo "23 20 4 4 4 4" > /sys/devices/system/cpu/cpu8/cpufreq/phc_vids
just before the "exit 0". Note that "23 20 4 4 4 4" are my values, you have to replace the above with your values, that came from the "phc_tweaked_vids" file. So that's about it. Not too easy, not too complicated.
So... is it worth it? I have done some tests to see if the above actually works as said, so first I tested to see if on battery using powertop application and the CPU temperature I could see any differences. None actually, if the CPU is in idle state, there is no actual gain using undervolting, be it battery or temperature.
But when I've done the test under full load (using 2 burnMMX instances, one for every core) and with the CPU set at it's maximum 2.4Ghz I could see a very very noticeable difference.
First let's see the power drain of the battery in Watts, as indicated by powertop application (with the PC disconnected from the charger, of course):






