Az egyes kernelek kiadásakor sokszor kerülnek be olyan apró változtatások a kódba, amelyek felett hajlamosak vagyunk elsiklani. Csak akkor ötlenek szembe ezek a dolgok, ha tüzetesebben átvizsgáljuk a változások listáját, vagy a szokásos alapossággal konfiguráljuk kernelünket. Mivel kihagytam a 2.6.9-rc2-es kernelt, ezért csak a 2.6.9-rc3-ban vettem észre, hogy visszatért a 2.4-es kernel sorozatból általam már ismert, számomra hasznos funkió. Ez nem más, mint az on-demand (igény szerinti) CPU frekvencia állítási lehetőség.
Mivel életem nagy részét notebookon töltöm, nem mindegy, hogy azt hogyan teszem. Nem mindegy, hogy az akkumulátor mennyi idő alatt merül le, nem mindegy, hogy milyen időközönként kapcsol be a ventilátor (főleg éjjel, mikor a leghalkabb cooler is egy MIG-29-es hangjával süvít). Az akkumulátorral tudunk spórolni, ha a CPU-nk nem ``pörög'' teljes erővel akkor, ha nincs rá szükség. Szintén kevesebb lehet az egy órára jutó ventilátor-bekapcsolások száma, ha a CPU tud ``pihenni''. Természetesen már régóta lehet a CPU-k órajelét kézzel változtatni. De milyen jó volna, ha a rendszer automatikusan választaná ki az éppen aktuális munkának megfelelően, hogy milyen órajelen kell a processzornak üzemelnie, nem? Ez lehetséges, ezt hivatott elvégezni a cpufreq on-demand governor.
A 2.6-os kernelben több governor érhető el. Létezik ``performance'', ``powersave'', és mostantól ``ondemand'' is. A ``performance'' a rendszert teljesítményre hangolja, míg a ``powersave'' az energia megtakarításra. Az ``ondemand'' pedig igény szerint ``adagolja'' a CPU erőt. Azaz ha egy érdekes weboldalt olvasok, akkor nyilván nem kell annyi CPU, szépen leveszi az órajelet 300MHz környékére. Azonban ha bejön egy levél és elindul a SpamAssassin, vagy éppen a másik konzolon egy kernelt akarok fordítani, akkor szépen automatikusan felhúzza az órajelet a maximumra.
Nézzük egy példán keresztül:
A képen a sárga szekcióban az órajel folyamatosan csökken 2.4GHz-ről egészen 300MHz-ig. Azt, hogy milyen órajel tartományok közt szabályoz a governor, a sysfs-en keresztül tudjuk lekérdezni:
(2099MHz 57C) trey@alderaan:~ $ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
300000 600000 900000 1200000 1500000 1800000 2100000 2400000
Azt, hogy milyen elérhető governor-ok vannak a kernelünkben, az alábbi parancssal tudjuk lekérdezni:
(299MHz 58C) trey@alderaan:~ $ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
ondemand userspace
Azt, hogy melyik van az elérhető governor-ok közül éppen kiválasztva, így kérdezzük le:
(299MHz 58C) trey@alderaan:~ $ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
ondemand
A governor-ok közt váltani a következő paranccsal lehet:
(299MHz 59C) root@alderaan:/home/trey $ echo "ondemand" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
Nézzük mi történik, ha elkezdek az oldal elolvasása után tovább böngészni (zöld tartomány). A böngészéshez CPU erő kell, szépen felugrik az órajel 2.4GHz-re. Majd ahogy tovább olvasok, szépen elkezd ismét csökkenni, egészen 900MHz-ig (persze egész 300MHz-ig menne le). Ekkor eszembe jut, hogy kellene egy kernelt fordítani (piros tartomány). A másik konzolon indítok egy make-et, és látszik, hogy amíg az dolgozik, addig az órajel 2.4GHz-en marad. Persze a fordítás után majd szépen kezd visszaesni, egészen akár 300MHz-ig.
Az egészben a legjobb az, hogy semmiféle user space daemon nem kell ehhez, az egész kernel-térben van megoldva. Az eredmény: (várhatóan) hosszabb üzem, (várhatóan) kevesebb búgás.
A használatához az alábbi dolgok kellenek a kernelbe:
[ * ] Power Management support
CPU Frequency scaling --->
[ * ] CPU Frequency scaling
Default CPUFreq governor (userspace) --->
< * > 'ondemand' cpufreq policy governor
< * > CPU frequency table helpers
< * > ACPI Processor P-States driver
és a megfelelő CPUfreq driver, ami az én esetemben
< * > Intel Pentium 4 clock modulation
persze ez utóbbi processzortól függ, ehhez el kell olvasni a
Documentation/cpu-freq/*
írásokat.
Jó szórakozást!