Razlaga Android CPU governorjev

Prispeval  buneech :: 04. april 2012 ob 19:20 :: Nasveti
Oceni
(6 glasov)

V kolikor imate na telefonu naložen custom kernel (in posledično tudi rootan telefon), imate možnost spreminjati kako centralni procesor (CPU) ob različnih obremenitvah skalira frekvence. Nekaj standardnih governorjev je vkodiranih v vse kernele, ostali pa so dodatki samostojnih razvijalcev kernelov.


Kaj je CPU governor?
CPU governor si lahko zamislimo kot power profil procesorja oz. shemo delovanja. Governor določa, kako procesor upravlja z različnimi obremenitvami, kdaj/kako preklaplja med frekvencami delovanja, kdaj/kako spi, kdaj/kako je pod najvišjo obremenitvijo, itd.

Spisek CPU governorjev:
1: OnDemand
2: OnDemandX
3: Performance
4: Powersave
5: Conservative
6: Userspace
7: MinMax
8: Interactive
9: InteractiveX
10: Smartass
11: SmartassV2
12: Scary
13: Lagfree
14: Smoothass
15: Brazilianwax
16: SavagedZen
17: Lazy
18: Lionheart
19: LionheartX
20: Intellidemand
21: Lulzactive
22: Hotplug

1. OnDemand Governor:
OnDemand governor je znan po tem, da viša frekvenco do maksimuma, nastavljenega s strani uporabnika/razvijalca. Ko se obremenitev, ustvarjena s strani uporabnika, zniža, OnDemand governor začne počasi nižati frekvenco CPU-ja po nastavljenih stopničkah, dokler ne doseže najnižje možne frekvence, ali pa dokler uporabnik znova ne požene novega opravila, kateri zahteva več procesne moči.

OnDemand ima odlično tekoče delovanje vmesnika, ker je nagnjen k teku v višjih frekvencah, obenem pa ima lahko negativen učinek na baterijo, glede na ostale governorje. OnDemand je pogosto izbran governor s strani proizvajalcev pametnih telefonov, ker je stestiran, preverjen, zanesljiv in omogoča najbolj možno tekoče delovanje telefona. To je zato, ker uporabniki raje potarnajo zaradi slabših performans telefona, kot pa zaradi nekaj ur avtonomije baterije, katere bi lahko dobili z uporabo drugega governorja.

Zadnji podatek je zelo pomemben, preden preberete o Interactive governorju: OnDemand skalira frekvenco delovanja v kontekstu čakalne vrste dela. V drugih besedah, ko je opravilo, katero je sprožilo skok frekvence, zaključeno, OnDemand poskuša skalirati frekvenco delovanja nazaj na minimum. Če uporabnik izvede novo opravilo, katero zahteva skok frekvence, potem bo frekvenca skočila iz najnižje na najvišjo. To se pogosto dogaja predvsem, kadar uporabnik preklaplja med opravili, oz. multi-taska. Tudi to ima negativne posledice na avtonomijo baterije.

2. OnDemandX:
OnDemand z profili za suspend/wake. Ta governor je mišljen kot OnDemand, kateri je bolj prijazen do baterije. Ko je ekran ugasnjen se najvišja frekvenca omeji na 500MHz. Čeprav je OnDemand privzeti governor v večini kernelov in se smatra kot zanesljiv/varen, je podpora za OnDemand/OnDemandX odvisna od CPU-jeve zmožnosti hitrega preklapljanja frekvence z najnižjo latenco pri prehodih med frekvencami. Nekje je bilo zapisano, da zmogljivosti OnDemand/OnDemandX zelo nihajo z uporabo različnih I/O razporejevalnikov (I/O schedulers). To ne velja za večino ostalih governorjev. OnDemand/OnDemandX naj bi najbolje deloval z SIO I/O schedulerjem.

3. Performance Governor:
Ta governor zaklene frekvenco delovanja CPU-ja na najvišjo nastavljeno. Čeprav se to zdi kot slaba ideja, obstaja vse več dokazov, da delovanje telefona pri najvišji frekvenci ob vseh časih omogoča hitrejši race-to-idle. Race-to-idle je proces, s katerim telefon zaključi podano opravilo, kot je recimo sinhronizacija elektronske pošte, in vrne CPU v izjemno učinkovito stanje z nizko porabo. Da se Performance governor uveljavi, bo potrebno še veliko testiranja, poleg tega pa mora imeti kernel pravilno vgrajena C-stanja za podan CPU.

4. Powersave Governor:
Čisto nasprotje Performance governorja, Powersave governor zaklene frekvenco delovanja CPU-ja na najnižjo nastavljeno.

5. Conservative Governor:
Conservative governor je nagnjen k delovanju telefona najpogosteje v najnižjih možnih frekvencah. V drugih besedah, večja in bolj obstojna obremenitev CPU-ja je potrebna, da Conservative governor zviša frekvenco delovanja CPU-ja. Z uporabo Conservative governorja, se lahko pojavi zatikanje v delovanju telefona, pri čemer delovanje zavisi tudi o načinu implementacije governorja in najnižje izbrane frekvence delovanja CPU-ja. Po drugi strani je pa lahko zelo dober za avtonomijo baterije.

Conservative governor je pogosto označen kot "počasen OnDemand", če vam lažje razloži njegovo delovanje.

6. Userspace Governor:
Ta governor, kateri je zelo redko uporabljan v svetu mobilnih naprav, omogoča kateremu koli programu nastavljanje delovne frekvence CPU-ja. Ta governor je bolj pogost med strežniki in namiznimi PC-ji, kjer aplikacija (recimo aplikacija power profilov) potrebuje privilegije nastavljanja delovne frekvence CPU-ja.

7. MinMax
Ta governor uporablja samo najnižjo in najvišjo frekvenco. Nobena vmesna frekvenca ni uporabljena.

8. Interactive Governor:
Podobno kot OnDemand governor, Interactive governor dinamično skalira frekvenco delovanja CPU-ja glede na obremenitev CPU-ja. Tukaj pa se podobnosti končajo. Interactive governor je mnogo bolj odziven kot OnDemand, ker je hitrejši pri skaliranju do najvišje frekvence.

Za razliko od OnDemand governorja, kateri skalira frekvence delovanja CPU-ja v kontekstu čakalne vrste dela, Interactive skalira frekvenco čez obdobje timerja, nastavljenega s strani razvijalca kernela. V drugih besedah, če aplikacija zahteva dvig frekvence na najvišjo frekvenco (s 100% obremenitvijo CPU-ja), uporabnik lahko izvede še eno opravilo, preden začne governor nižati frekvenco CPU-ja. S tem se znebimo skakanja frekvence, kot se lahko dogaja pri OnDemand governorju. Zaradi tega timerja, Interactive je tudi bolje pripravljen za izkoristek vmesnih frekvenc, katere so med najnižjo in najvišjo frekvenco CPU-ja. To je tudi ena od prednosti Interactive governorja v smislu avtonomije baterije.

Vendar pa, ker je Interactive governorju dovoljeno več časa preživeti pri najvišji frekvenci, kot OnDemand (zaradi zmogljivosti naprave), so zgoraj napisane prednosti za avtonomijo baterije zanemarljive. Na kratko zapisano, Interactive ponuja boljše zmogljivosti kot OnDemand (nekateri pravijo najboljše zmogljivosti od vseh governorjev) in malenkostne razlike v avtonomiji baterije.

Interactive tudi predpostavlja, da ko uporabnik prižge zaslon, sledi tudi interakcija z nekaj aplikacijami na telefonu. Zaradi tega vklop zaslona sproži skok na najvišjo frekvenco CPU-ja, nato pa nadaljuje z zgoraj opisanim delovanjem s timerjem.

9. InteractiveX Governor:
Ustvarjen s strani razvijalca kernelov "Imoseyon", InteractiveX governor močno bazira na Interactive governorju, le da je okrepljen s prirejenim timerjem za boljše razmerje avtonomije baterije proti zmogljivosti. InteractiveX governor ima tudi vgrajen profil, da zaklene frekvenco delovanja CPU pri ugasnjenem zaslonu na najnižjo nastavljeno.

10. Smartass:
Bazira na konceptu Interactive governorja. Smartass je kompleten rewrite kode in še nekaj dodatkov. Dokaj uspešen, saj so zmogljivosti na nivoju "starega" MinMax, obenem pa je tudi bolj odziven. Avtonomijo baterije malce težje preverimo, a vendar smartass ima vgrajen profil ob ugasnjenem zaslonu, kjer je najvišja frekvenca nastavljena na 352MHz (ali, če je vaša najnižja frekvenca nastavljena na višjo od 352MHz, potem je na najnižjo nastavljeno zaklenjen). Če imate nastavljeno na frekvence 528/172, se to med spanjem nastavi na 352/176. Ni potrebe po profilih za spanje.

11. SmartassV2:
Druga iteracija Smartass governorja, spisanega s strani razvijalca "Erasmux". SmartassV2 cilja na “idealno frekvenco”, nato pa hitreje zvišuje takt do te frekvence, in počasneje znižuje takt od te frekvence. Uporablja različni idealni frekvenci pri prižganem in ugasnjenem zaslonu, imenovani awake_ideal_freq in sleep_ideal_freq. Ta governor zelo hitro skalira CPU do sleep_ideal_freq ko je ekran ugasnjen, da bi čimpreje dosegel to frekvenco, in pospešeno dviguje frekvenco, ko se ekran prižge, da pride do awake_ideal_freq (za primer - privzeto 500MHz pri SGS2). Ni zgornje meje, ko je ekran ugasnjen, za razliko od Smartass. Torej je celoten nabor frekvenc vedno na voljo. Moto tega governorja je razmerje med zanesljivostjo in avtonomijo baterije.

12. Scary:
Novi governor, ki bazira na Conservative, z nekoliko funkcij, pobranih iz Smartass-a, skalira frekvence po zakonih konzervativnosti. Začne na dnu, vzame vzorec obremenitve, če je nad zgornjim pragom, dvigne frekvenco za en nivo višje. Zniževanje frekvenc poteka po enakem stilu, en nivo na enkrat. Ob ugasnjenem zaslonu bo samodejno omejil zgornjo mejo na 245MHz, in če imate najnižjo frekvenco nastavljeno nad 245MHz, bo najnižjo vrednost ponastavil na 120MHz, dokler je ekran ugasnjen, in jo vrnil na prejšnjo vrednost ob vklopu zaslona, ob tem pa še vedno skaliral po zakonih konzervativnosti. Zaradi teh lastnosti preživi večino časa pri nizkih frekvencah. Cilj Scary governorja je dobiti najboljšo avtonomijo baterije ob zadovoljivih zmogljivostih. Trenutno ponuja enako zmogljivost kot Conservative, čez čas pa bo prirejen za višje zmogljivosti.

13. Lagfree:
Lagfree je podoben kot OnDemand. Glavna razlika je optimizacija za čimboljšo avtonomijo baterije. Frekvenca se elegantno viša in niža, za razliko od OnDemand, kjer frekvenca prepogosto skoči na 100%. Lagfree ne preskakuje vmesnih frekvenc, ko skalira gor ali dol. Potrebno si je zapomniti, da če je nenadna potreba po povečani moči, Lagfree ne more zadostiti potrebam, ker zvišuje takt skozi vsako višjo frekvenco od trenutne. Nekateri uporabniki sporočajo, da ob predvajanju videa opazijo zatikanje.

14. Smoothass:
Enak kot Smartass, vendar veliko bolj agresiven pri skaliranju, in po odzivih po forumih sodeč, z boljšo avtonomijo baterije, ponekod tudi za tretjino boljšo kot pri stock kernelu.

15. Brazilianwax:
Podoben kot SmartassV2, veliko bolj agresiven pri dvigovanju baterije. Boljša zmogljivost, slabša avtonomija baterije.

16. SavagedZen:
Še en governor, baziran na SmartassV2. V primerjavi z Brazilianwax dosega dobro razmerje med zmogljivostjo in avtonomijo baterije.

17. Lazy:
Governor razvijalca "Ezekeel" je v bistvu OnDemand z dodatnim parametrom min_time_state, kateri določa najkrajši čas, kjer CPU ostane na eni frekvenci, preden skalira dol ali gor. Ideja Lazy governorja je, da se izniči nestabilnosti, katere se pojavijo pri hitrem preklapljanju med frekvencami z uporabo OnDemand governorja. Lazy preverja obremenitev bolj pogosto kot OnDemand, vendar menja frekvenco le, ko zaključi min_time_state na vzorčnem intervalu, kjer je potrebno menjati frekvenco. Lazy ima tudi screenoff_maxfreq parameter, kateri, ko je omogočen, povzroči, da governor vedno določi najvišjo frekvenco, ko je ekran ugasnjen.

18. Lionheart:
Lionheart bazira na konzervativnem governorju, ki je vgrajen v samsungov update3 source. Nastavljivi parametri (kot so pragovi in hitrost vzorčenja) so spremenjeni, da se governor obnaša bolj kot Preformance, in na račun avtonomije baterije skalira veliko bolj agresivno.

19. LionheartX:
LionheartX bazira na Lionheart z nekaj spremembami na nastavljivih parametrih in vsebuje suspend profil, kateri bazira na Smartass governorju.

20. Intellidemand:
Intellidemand oz. inteligentni OnDemand razvijalca "Faux" je zopet governor, kateri bazira na OnDemand. Ne glede na to, kaj nekateri uporabniki mislijo, ta governor ni zamenjava za OC Daemon (različni governorji za sleep in wake). Originalni Intellidemand se obnaša različno, glede na porabo GPU (grafičnega procesorja). Ko je GPU obremenjen (igre, navigacija, benchmarking, itd.), se Intellidemand obnaša kot OnDemand. Ko GPU ni obremenjen (ali pa malo obremenjen), Intellidemand omeji najvišjo frekvenco na nivo, odvisen od implementiranih frekvenc v kernelu, za nižjo porabo baterije. To se imenuje način brskanja. Opazimo lahko nekaj sledi Interactive governorja v Intellidemand-u. Odločitev skaliranja do zgornje meje se naredi glede na čas neaktivnosti CPU-ja. Nižji časi neaktivnosti (<20%) povzročijo, da CPU skalira na višjo frekvenco od trenutne. Skaliranje dol se izvaja v stopnjah po 5% od najvišje frekvence. (Ta parameter je nastavljiv samo v Conservative, med popularnimi governorji).
Da povzamem, ta governor je inteligentni OnDemand, kateri vstopi v način brskanja, da omeji najvišjo frekvenco, kadar je GPU neaktiven, ob izhodu iz načina brskanja pa se obnaša kot OnDemand (kadar je GPU obremenjen), da zagotovi potrebno moč za igranje iger in podobno. Intellidemand ne skače do najvišje frekvence, kadar je ekran ugasnjen.

21. Lulzactive:
Nova najdba razvijalca "Tegrak" bazira na Interactive in Smartass governorjih, in je en od najbolj priljubljenih governorjev.

Stara verzija: Kadar je obremenitev večja ali enaka 60%, governor skalira CPU gor, na eno frekvenco višje od trenutne. Kadar je obremenitev pod 60%, governor skalira dol do ene frekvence nižje. Kadar je ekran ugasnjen, je frekvenca delovanja zaklenjena na najnižjo možno frekvenco.

Nova verzija: Tri dodatni uporabniško nastavljivi parametri: inc_cpu_load, pump_up_step, pump_down_step. Za razliko od stare verzije, nova omogoča več kontrole za uporabnika. Lahko nastavimo prag, pri katerem se governor odloči za skaliranje frekvenc. Lahko tudi nastavimo število frekvenčnih korakov, kateri naj bodo preskočeni pri skaliranju gor ali dol.
Kadar je obremenitev večja ali enaka inc_cpu_load, governor skalira CPU za pump_up_step korakov gor. Kadar je obremenitev manjša od inc_cpu_load, governor skalira CPU za pump_down_step korakov dol.

Primer:
inc_cpu_load=70
pump_up_step=2
pump_down_step=1

Če je trenutna frekvenca=200, vsake up_sampling_time časa, če je obremenitev >= 70%, cpu skalira 2 koraka gor na 800.
Če je trenutna frekvenca=1200, vsake up_sampling_time časa, če je obremenitev < 70%, cpu skalira 1 korak dol na 1000.

22. Hotplug Governor:
Hotplug governor se obnaša zelo podobno kot OnDemand, z dodano prednostjo, da je bolj natančen ob nižanju frekvenc čez tabelo frekvenc v kernelu, ker governor meri uporabnikovo obremenitev CPU-ja. Vendar pa je Hotplug-ova najpomembnejša lastnost, da lahko izklopi neaktivna jedra CPU ob obdobju nizke izkoriščenosti CPU. Ta lastnost je znana kot “hotplugging”.
Očitno je, da je ta governor na voljo le pri večjedrnih napravah.

Nekaj koristnih nasvetov:

    Stabilnost vseh governorjev je vprašljiva. Na nekaterih telefonih določeni delujejo bolje, odvisno od vgrajenega CPU-ja.
    V kolikor uporabljate katerega od programov za nastavljanje frekvenc in governorjev (recimo SetCPU, NoFrills, Voltage Control, itd.) in imate nastavljene profile za sleep in druge različne uporabe telefona, vas opozarjam, da vkolikor imate 2 različna governorja nastavljena za sleep in normalni profil, in imata oba governorja vkodirano omejevanje frekvence pri ugasnjenem zaslonu, se lahko zgodi, da se telefon ne bo zbudil iz "spanja". Takrat ga je potrebno na silo ugasniti, z odstranitvijo baterije, ali kakim drugim načinom.


Debata na forumu: viewtopic.php?f=87&p=100313

Viri: androidforums.com, forum.xda-developers.com

3 komentarji

  • Povezava komentarja 05. april 2012 ob 17:42 objavil Miholič

    Zelo obširna in kvalitetna razlaga.

    Hvala!!!

  • Povezava komentarja 09. april 2012 ob 14:02 objavil AndroGigant

    Zelo uporabno!

  • Povezava komentarja 10. maj 2012 ob 00:06 objavil dejans

    Odlično. Hvala lepa.

Za komentiranje se prosimo prijavite.
na vrh