Als trotse bezitter van een Dell XPS 13 “Developer editon” was ik aangenaam verrast met een recent artikel op Web Upd8. In dat artikel wordt beschreven hoe je een laptop kan beschermen tegen oververhitting. Daarvoor worden 2 specifieke toepassingen gebruikt: intel p-state en thermald. Let op: dit geldt alleen vanaf Ubuntu 14.04 en niet voor alle Intel cpu’s!
Aangezien mijn XPS 13 (de 1e uitvoering van Dell, dus zonder touch scherm en met 3e generatie Intel® Core™ i7 processor) mij dierbaar is heb ik besloten om daar meteen gebruik van te maken. Niet alleen de bescherming voor eventuele oververhitting sprak mij aan. Vooral de mogelijkheid om met de Powersave Governor te kunnen werken klonk erg aantrekkelijk.
Dankzij deze specifieke instelling kan je namelijk veel langer op je acculading werken Dat gaat dan weliswaar ten koste van wat CPU power maar je kan heel eenvoudig tussen Powersave en Performance switchen.
Voorheen was ik gewend om vooral met de “Ondemand” Governor te werken. Maar deze instelling wordt niet meer aangeraden en wordt zelfs niet meer ondersteund door de nieuwste cpu’s. Zie bijvoorbeeld dit artikel op Phoronix.
By default the Linux kernel uses the “ondemand” CPU frequency governor for achieving maximum clock frequency when system load is high and a lower clock frequency when the system is idle. However, it turns out that for at least modern Intel CPUs, this is likely no longer the case. This default kernel choice may lead to poor battery life and performance for modern Linux systems.
Het hoeft dus geen betoog dat ik de procedure heb gevolgd. Een aantal zaken pakten echter anders uit en daarom vermeld ik hier de door mij gevolgde procedure. Ik sluit dan af met een vraag. Hopelijk kan iemand die voor mij beantwoorden.
sudo apt-get install linux-tools-common
gksudo gedit /etc/default/grub
Verander in grub de zin “GRUB_CMDLINE_LINUX_DEFAULT” in
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_pstate=enable"
Sla bestand op en sluit editor, vervolgens
sudo update-grub
Reboot en controleer daarna de output van:
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_driver
De output van dit commando moet zijn “intel_pstate”
So far, so good. Vervolgens:
cpupower frequency-info
En daar ging het mis, althans er kwamen berichten dat bepaalde kernel bestanden niet aanwezig waren. Die foutmelding heb ik gebruikt om die bestanden te installeren met:
sudo apt-get install linux-tools-generic linux-cloud-tools-generic linux-tools-3.13.0-23-generic linux-cloud-tools-3.13.0-23-generic
Daarna gaf het commando
cpupower frequency-info
de volgende informatie terug:
Nu zou je in staat moeten zijn om de Governor Powersave aan te zetten. Dat doe je met het commando:
sudo cpupower frequency-set -g powersave
En mocht je Performance willen gebruiken dan wordt het commando:
sudo cpupower frequency-set -g performance
Deze instellingen gaan verloren bij een reboot en om de gewenste instelling definitief te maken installeer je cpufrequtils met:
sudo apt-get install cpufrequtils
Door het volgende commando wordt dan de gewenste instelling vastgezet. Ik gebruik hier dus de Powersave instelling:
sudo sed -i 's/^GOVERNOR=.*/GOVERNOR="powersave"/' /etc/init.d/cpufrequtils
Je kan ook met je editor het configuratie bestand aanpassen met:
gksudo gedit /etc/init.d/cpufrequtils
Je kijkt dan specifiek naar dit onderdeel waarbij je achter GOVERNOR de gewenste waarde invult:
# Set ENABLE to “true” to let the script run at boot time.
#
# eg: ENABLE=”true”
# GOVERNOR=”ondemand”
# MAX_SPEED=1000
# MIN_SPEED=500
ENABLE=”true”
GOVERNOR=”powesave”
MAX_SPEED=”0″
MIN_SPEED=”0″
check_governor_avail() {
info=”/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors”
if [ -f $info ] && grep -q “\<$GOVERNOR\>” $info ; then
return 0;
Tot slot installeer je dan de daemon die zorgt voor de bewaking van je temperatuur met:
sudo apt-get install thermald
Als je nu reboot en weer kijkt naar de output van het commando:
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
dan zou de output (in mijn geval) 4 x powersave moeten opleveren (4 cores, dus 4 x output).
Vraag
Tot zover geen probleem. Als ik echter kijk naar de output van het bestand /etc/init.d/cpufrequtils dan kijk ik specifiek naar dit onderdeel:
ENABLE=”true”
GOVERNOR=”powesave”
MAX_SPEED=”0″
MIN_SPEED=”0″
Ik vraag mij echter af of die MAX-SPEED en MIN_SPEED op 0 moet staan als je kiest voor “powersave”. Wie dat weet reageert hopelijk even onder dit bericht. Het lijkt er wel op dat het werkt overigens. Ik heb overigens het pakket lm-sensors verwijderd want ik begreep dat die combinatie problemen kon opleveren.
Laat ik eens een poging doen om alles op te schrijven zoals ik denk dat het nu in elkaar steekt.
Intel processoren hebben P-states en C-states. We beginnen met de laatste. C-states geven aan wat er nog wakker is: bij C0 draait alles, bij C4 is alles zo’n beetje in slaap – maar kan meteen wakker gemaakt worden. (Niet te verwarren met suspend en hibernation, dat zijn S-states, dan slaapt alles écht). De C states worden gemanaged door de cpuidle governors. De laatste paar jaar (sinds 2.6.21) is er veel gewerkt aan de C states, want langer slapen is meer energie besparen. Manieren om langer te slapen zijn onder andere zorgen dat er minder interrupts nodig zijn (de NO_HZ optie in de kernel zorgt ervoor dat er geen vaste timer ticks meer zijn). Afhankelijk van hoe lang er verwacht wordt geslapen te kunnen worden (microsecondes? milisecondes? secondes?) worden verschillende C-states aangenomen.
P-states zijn een combinatie van een klokfrequentie en een voltage. In tegenstelling tot bijvoorbeeld de Qualcomm processors in mobieltjes, moeten bij intel alle cores dezelfde frequentie draaien – of ze staan uit (dat mag ook en scheelt natuurlijk energie). Tussen P-states schakelen kan tegenwoordig razendsnel. De cpufreq governors kiezen in principe voor verschillende P-states, waarbij de powersave altijd de laagste kiest, performance altijd de hoogste kiest en ondemand omhoog schakelt als er een CPU meer dan 80% belast wordt en omlaag schakelt als een CPU minder dan 20% belast wordt. Wat er nu nieuw is aan deze Intel P-state driver in de 3.9/3.10 kernel, is dat deze door uitgekiendere algoritmes (die Intel-specifiek zijn) intelligenter zijn P-states kan kiezen. Waardoor er meer geslapen kan worden en minder geswitcht wordt. Dat scheelt energie.
Een groot deel van de discussies op de fora en LKML gaat over waarom Intel deze kennis buiten het bestaande cpufreq model wil houden en dus eigenlijk een privé driver introduceert. Het antwoord is simpel: zij kunnen het beter dan cpufreq door specifiek capaciteiten van de diverse processoren mee te nemen.
Indrukwekkende reactie. Dank je wel daarvoor. Je bent duidelijk erg op de hoogte van dit soort zaken.
Ik begreep dat intel _pstate default niet aan staat onder Ubuntu. Om gebruik te kunnen maken van die specifieke mogelijkheden is dus die extra instelling noodzakelijk.
Er blijven wel een paar vragen over bij mij. Er wordt gesproken over het niet meer goed functioneren van ondemand governor. Maar gaat dat ook op als je onder Ubuntu geen gebruik maakt van intel P-state?
En als je (zoals ik heb gedaan) wel gebruik maakt van P-state en standaard op je laptop met Powersave wil werken, moeten er dan geen grenzen worden aangegeven in /etc/init.d/cpufrequtils want bij mij staan de max_speed en min_speed op 0 en dat lijkt mij niet juist.
Ondemand is niet meer het allerefficientste wat mogelijk is. Hij doet ’t wel, prima zelfs – maar het kan beter via de nieuwe p-states driver. powersave schakelt per definitie niet, dus wat je ook aangeeft voor min en max, dat maakt niet uit. Bovendien zijn de instellingen in /etc/init.d/cpufrequtils waarschijnlijk 0 als ze bedoelen “zoekt ’t zelf maar uit”. 0 is hoe-dan-ook geen geldige frequentie, die ligt voor moderne CPUs minstens op ietswat 600MHz.
Nu ben ik benieuwd, wat heeft het je opgeleverd? Hoeveel meer batterijtijd bijvoorbeeld?
Ik gebruik de laptop onregelmatig en voor beperkte tijd. Dus die vraag laat zich niet eenvoudig beantwoorden. Maar ik heb wel heel sterk het idee dat het een verbeterde accuduur heeft gekregen. Ook merk ik dat de temperatuur lager ligt dan voorheen. Kortom…ik ben er eigenlijk van overtuigd dat er hier winst is geboekt.