Cpufreq on-demand governor

Címkék

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!

Hozzászólások

mennyi akksit lehet vele sprórolni? Akssi eseten total leveszem a freqit ?

A 2.6.10-es van egy új nforce2 driver, amivel lehet az FSB-t szabályozni. Ez egy meglehetősen korlátozott képességű állatka sajnos, az ondemand nem megy vele. Tehát még mindig nincs 8rdavcore//autofsb linuxra de már látszik az alagút vége... (nekem mindenképpen, mert két hét múlva jön a mobil bartonom, az meg ondemandos)

En sajna nem igazan veszek eszre jelentos energiamegtakaritast. Igazabol semmit. Nekem sem mukodik a freki olvasasa!

Kzart. Nekem 36C korul bootol a gep, es olyan 55-57 korul van az allando homererseklet. Ha a CPU 100%-on porog, akkor felmegy 60C-ig, es ott elindul a cooler. Akkor lemegy 4xC-ig, es akkor kikapcsol a ventilator. Szoval a homerseklet eleg rendesen valtozik. Neked ott a szenzorral valami gaz van.

Köszönöm a cikket. Ugyan valószínűleg nem mostanság lesz olyan gépem, melyen ezt ki tudom próbálni, de mindig elolvasom az ilyen cikkeket, késöbb vagy máshol még hasznosak lehetnek... :)

A sima asztali P4 is tudja a freq. scaling-et, igaz nem ezzel a governorral de kézzel én már próbáltam így szabályozni, bár igaz, ami igaz sem az akksim ideje, sem a ventillátorok hangja nem igazan csökkent ;o)) (a házban másik 4 van a procijén kívül)

Egy 1,6-os Northwood P4-gyel illetve hozzá egyi i850-es chipsetű alaplappal próbáltam... 400 MHz-re lehetett lenyomni...

>A sima asztali P4 is tudja a freq. scaling-et,

igy igaz

>igaz nem ezzel a governorral de kézzel én már próbáltam így szabályozni

en ezzel hasznaltam, meg a 2.4-es kernel idejen

>bár igaz, ami igaz sem az akksim ideje, sem a ventillátorok hangja nem igazan csökkent ;o))

nekem csokkent a ventilator hangja. persze ez csak olyan alaplappal van ertelme hasznalni, ahol tudja a lap szabalyozni a cpu cooler fordulatszamat

Tudom, hogy ennek alíg van köze ehhez a cikkhez, de engem ez érdeklne:

(299MHz 58C) trey@alderaan:~ $

Ilyet hogy lehet beállítani?

Az mitől függ hogy a

(2099MHz 57C) trey@alderaan:~ $ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies

300000 600000 900000 1200000 1500000 1800000 2100000 2400000

parancs mit ad vissza?

Az lehet hogy egy compaq notiban levő P4M csak 1700 és 1200MHz közül tud választani?

Nekem pl nem akar mukodni..

pedig elvileg mindent szepen kiir... csak nem csokken a cpu freqije.

:/

Ize, igazabol azt neztem, hogy a

cat /proc/cpuinfo sohasem valtozik.

Viszont a cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq kiirja, hogy az aktualis cpu freq ennyi meg ennyi... es valtozik is..

Nem tudom, hogy most mi a jo.

proci:

vendor_id: GenuineIntel

model_name: Genuine Intel(R) CPU 2.80 GHz

a scaling_governor az ondemand

a driver meg p4-clockmod

Nah, ugy nez ki mukodik, csak a speedfreq -c jelez vissza egyedul.


htparm -tT /dev/hda -val benchmarkoltam es tenyleg iszonyat belassul, ha epp nem hasznalom.

Viszont nalam nem frissul a /proc/cpuinfo

Igaz azt olvastam, hogy egyes notebookok eseteben nem is frissul. Tehat az enyem ide tartozik.