Kako EAS pomaga narediti Google Pixel najhitrejši telefon Android

Pametni telefoni Google Pixel so med najhitrejšimi telefoni Android na trgu. Energy Aware Scheduling (EAS) je deloma razlog, zakaj je telefon tako gladek.

Daleč v preteklosti, ko je bil Linux le ideja v glavah Linusa Torvaldsa, so bili procesorji enojedrne enote, ki so zahtevale ogromno energije za malo energije. Prvi komercialno dostopen procesor, Intel 4004, je deloval pri frekvenci 740 kHz z enim jedrom. Takrat še ni bilo potrebe po razporejevalniku nalaganja. Razporejanje obremenitve je bilo rezervirano za dvojedrne "ogromne", kot je IBM Power 4, ki je izšel nekaj desetletij kasneje. Te so delovale pri neverjetnih 1,1 GHz do 1,9 GHz in so zahtevale programe in sistem za pravilno uporabo teh jeder. Kako smo od teh strojev prišli do programskih algoritmov, ki uporabljajo več jeder? Morda ste že slišali za Energy Aware Scheduling (EAS) na naših forumih. To je del razloga, zakaj pametni telefoni Google Pixel delujejo tako dobro. Kaj je tako dobrega pri EAS in kako smo sploh prišli do te točke? Preden lahko to razložimo, se moramo pogovoriti o načrtovalcih nalaganja Linuxa.


Razvoj načrtovalcev nalaganja Linuxa

Round-robin razpored

Round Robin obdelava. Vir: Wikipedia

Krožna obdelava je preprost koncept za razlago in razumevanje ter še enostavnejši za razumevanje njegovih pomanjkljivosti. Round-robin uporablja časovno rezanje za dodelitev časa vsakemu procesu. Predpostavimo, da se na našem računalniku izvajajo štirje procesi.

  • Postopek A
  • Postopek B
  • Postopek C
  • Postopek D

Zdaj pa opravimo nalogo krožnega razporejevalnika. Vsakemu procesu bomo dodelili 100 milisekund (razrezovanje časa), preden preidemo na naslednjega. To pomeni, da lahko proces A potrebuje 100 milisekund, da opravi obdelavo, nato se premakne v proces B in tako naprej. Če opravilo aplikacije traja 250 milisekund, bo morala iti skozi ta postopek 3-krat, da dokonča svoje delo! Zdaj to prilagodite različnim jedrom, tako da bosta proces A in B dodeljena jedru 1, proces C in proces D pa bosta dodeljena jedru 2. To je nadomestilo razporejanje O(n) (ki je bilo kot krožno, vendar je uporabljalo obdobja in omogočalo dinamično dodeljevanje čas), nato O(1) razporejanje (zmanjšani režijski stroški, neomejena podpora procesom), nato končno Popolnoma pošten razporejevalnik (CFS). CFS je bil oktobra 2007 združen z različico jedra Linux 2.6.23. Od takrat je bil temeljito prenovljen in je še vedno privzeti razporejevalnik v sistemih Linux.

Popolnoma pošten razporejevalnik

Completely Fair Scheduler obstaja v Androidu od njegove ustanovitve in se uporablja na ne-velikih. MALE naprave. Uporablja inteligentni algoritem za določanje vrstnega reda obdelave, dodeljenega časa itd. Je primer delujoče izvedbe dobro raziskanega algoritma za razporejanje, imenovanega "ponderirano pošteno čakanje v čakalni vrsti". To se v bistvu osredotoča na zagotavljanje prednosti sistemskim procesom in drugim procesom z visoko prioriteto, ki se izvajajo na stroj. Če bi tekel na velikem. MAJHNA naprava, bi bila vsa jedra zaznana kot enaka. To je slabo, saj so lahko jedra z nizko porabo energije prisiljena izvajati intenzivne aplikacije ali še huje, lahko se zgodi ravno nasprotno. Dekodiranje za poslušanje glasbe se lahko izvede na velikem jedru, na primer, s čimer se po nepotrebnem poveča poraba energije. Zato potrebujemo nov razporejevalnik za velike. LITTLE, ki lahko dejansko prepozna in izkoristi razliko v jedrih na energetsko učinkovit način. Tu nastopi Heterogene Multi-Processing (HMP), standardni razporejevalnik nalaganja, ki ga zdaj izvaja večina telefonov Android.

Heterogeno večprocesiranje

To je standardni razporejevalnik obremenitve za vse velike. MALA naprava, izdana v zadnjih letih, razen Google Pixel. HMP uporablja velik. LITTLE arhitektura, delegiranje nizke prioritete, manj intenzivno delo na majhna jedra, ki porabijo manj energije. HMP je "varen", pri čemer ve, kaj naj gre v velika jedra in kaj v majhna jedra, brez napak. Enostavno deluje in zahteva veliko manj truda za nastavitev na strani razvoja kot nekaj, kot je EAS, ki ga bomo obravnavali čez trenutek. HMP je samo razširitev CFS, da se zaveda moči.

HMP ne ugiba niti ne napoveduje prihodnjih procesov. To je dobro, vendar zato naprava ne more biti tako tekoča kot tiste, ki uporabljajo EAS, in zato porabi nekoliko več baterije. To nas končno pripelje do Energy Aware Scheduling (EAS), za katerega sem trdno prepričan, da je prihodnost v razvoju ROM-a in jedra, saj ga sprejme vse več proizvajalcev originalne opreme.

Energijsko ozaveščeno načrtovanje

Energy Aware Scheduling (EAS) je naslednja velika stvar, o kateri govorijo uporabniki na naših forumih. Če uporabljate OnePlus 3 (ali Google Pixel, očitno), ste o tem zagotovo slišali na forumih. V množico je prišel s procesorjem Qualcomm Snapdragon 845, tako da če imate eno od teh naprav, že imate pametni telefon, ki podpira EAS. EAS v obliki jeder kot npr RenderZenith in ROM-i, kot je npr VertexOS in PureFusion so prevzeli forume OnePlus 3 v svojem vrhuncu. Seveda ima Google Pixel tudi EAS. V čem je ulov z obljubami o izboljšani življenjski dobi baterije in boljši zmogljivosti?

Energy Aware Scheduling ni tako preprost, saj ni univerzalen za vse naprave, kot sta CFS ali HMP. EAS zahteva razumevanje procesorja, na katerem deluje, na podlagi energetskega modela. Te energetske modele izdelujejo ekipe inženirjev, ki nenehno testirajo in si prizadevajo zagotoviti optimalno delovanje. Ker sta Snapdragon 820 in 821 v osnovi enaka, jedra po meri na OnePlus 3 uporabljajo energetski model Google Pixel. Naprave s procesorjem Snapdragon 845 lahko uporabljajo EAS, OnePlus 6 pa ga do neke mere uporablja. Ni tako prilagojena, kot bi bila naprava Google Pixel, vendar opravi delo. Tukaj je primer, kako kljub temu, da ima OnePlus 6 boljši procesor z EAS, ga Pixel 2 XL še vedno premaga v gladkosti. Obe sliki sta bili vzeti iz našega pregled, usmerjen v hitrost OnePlus 6.

Če imate težave z razumevanjem grafov, si lahko za orientacijo ogledate spodnjo sliko. Vse, kar presega zeleno črto, pomeni izpadle sličice in v najslabšem primeru opazno jecljanje.

Izvedba EAS v OnePlus 6 je zanimiva, saj se zdi, da ni popolna izvedba, kot bi jo našli na Google Pixel z istim SoC. Tudi nastavljivi razporejevalnik nimajo veliko smisla, tako da to verjetno pojasnjuje, zakaj ni tako učinkovit, kot bi pričakovali. Je izjemno konzervativen pri porabi energije, pri čemer sistem za večino dela daje prednost jedrom z nizko porabo energije.

Nastavljivi so preprosto nabor parametrov, ki se posredujejo regulatorju CPE, kar spremeni, kako se regulator odziva na določene situacije v smislu frekvence. Razporejevalnik se nato odloči, kam na različne procesorje postavi naloge. Nastavljivi OnePlus 6 so nastavljeni tako, da dajejo prednost delu na jedrih z nizko porabo energije. Prav tako ne pomaga, da ima Google Pixel 2 ogromno povečanja vnosa, ki ohranja vseh 8 jeder ves čas na spletu. Google uporablja tudi an balanser prekinitev ki pomaga odstraniti padce okvirja in izboljša učinkovitost.

Kako torej deluje EAS? Zakaj je tako učinkovit samo v določenih pogojih?

Energy Aware Scheduling uvaja potrebo po uporabi energetskega modela in, kot je navedeno zgoraj, zahteva veliko testiranja in dela, da postane popoln. EAS poskuša poenotiti tri različne osnovne dele jedra, ki vsi delujejo neodvisno, energijski model pa jih pomaga poenotiti.

  • Linux planer (CFS, omenjen zgoraj)
  • Linux cpuidle
  • Linux cpufreq

Poenotenje vseh 3 delov pod razporejevalnikom in njihov skupni izračun daje potencial za varčevanje z energijo, saj njihovo skupno izračunavanje omogoča, da so čim bolj učinkoviti. CPUIdle se poskuša odločiti, kdaj naj CPE preide v način mirovanja, medtem ko se CPUFreq poskuša odločiti, kdaj povečati ali zmanjšati CPE. Oba modula imata primarni cilj varčevanje z energijo. Ne samo to, nato kategorizira procese v štiri cskupine, in sicer top-aplikacija, sistemsko ozadje, ospredje in ozadje. Naloge, ki jih je treba obdelati, so uvrščene v eno od teh kategorij, nato pa kategorija dobi procesorsko moč, delo pa se prenese na različna jedra CPE. top-app je najvišja prioriteta dokončanja, sledijo mu ospredje, ozadje in nato sistemsko ozadje. Ozadje ima tehnično enako prednost kot sistemsko ozadje, vendar ima sistemsko ozadje običajno tudi dostop do več majhnih jeder. Dejansko Energy Aware Scheduling vzame osrednje dele jedra Linuxa in vse skupaj združi v en proces.

Pri prebujanju naprave bo EAS izbral jedro v najplitvejšem stanju mirovanja, kar zmanjša energijo, potrebno za prebujanje naprave. To pomaga zmanjšati potrebno moč pri uporabi naprave, saj ne bo prebudila velike gruče, če ji tega ni treba. Sledenje obremenitvi je prav tako izjemno pomemben del EAS in obstajata dve možnosti. "Per-Entity Load Tracking" (PELT) se običajno uporablja za sledenje obremenitvi, informacije pa se nato uporabijo za odločanje o frekvencah in o tem, kako delegirati naloge v CPE. Uporablja se lahko tudi "Window-Assisted Load Tracking" (WALT) in se uporablja v Google Pixel. Številni ROM-i EAS na naših forumih, kot je VertexOS, se odločijo za uporabo WALT. Številni ROM-i bodo izdali dve različici jedra z WALT ali PELT, zato se o tem odloči uporabnik. WALT je bolj buren, z visokimi vrhovi frekvence procesorja, medtem ko PELT poskuša ostati bolj dosleden. Sledilnik obremenitve dejansko ne vpliva na frekvenco procesorja, ampak samo pove sistemu, kakšna je uporaba procesorja. Večja poraba procesorja zahteva višjo frekvenco, zato je dosledna lastnost PELT ta, da povzroči počasno zvišanje ali znižanje frekvence procesorja. PELT se nagiba k večjemu poročanju o obremenitvi procesorja, zato lahko zagotovi višjo zmogljivost ob višji ceni baterije. Trenutno nihče ne more zares reči, kateri sistem sledenja obremenitvi je boljši, saj se oba načina sledenja obremenitvi nenehno popravljata in izpopolnjujeta.

Kakor koli že, očitno je, da ne glede na uporabljeno metodo sledenja obremenitvi pride do povečanja učinkovitosti. Namesto samo obdelave nalog na katerem koli procesorju, se naloga analizira in oceni količina energije, ki je potrebna za njeno izvajanje. Ta pametna postavitev nalog pomeni, da so naloge dokončane na veliko učinkovitejši način, hkrati pa je celoten sistem hitrejši. EAS je namenjen pridobivanju najbolj gladkega možnega uporabniškega vmesnika z minimalno porabo energije. Tu pridejo v poštev druge zunanje komponente, kot je schedtune.

Schedtune je v vsaki cgroup definiran z dvema nastavitvama, ki zagotavljata natančnejši nadzor nad nalogami, ki jih je treba dokončati. Ne nadzira le porazdelitve nalog na več CPU-jev, temveč tudi, ali naj se zaznana obremenitev poveča, da se zagotovi hitrejše dokončanje časovno občutljivih nalog. Tako se aplikacije in storitve v ospredju, ki jih uporablja uporabnik, ne bodo upočasnile in povzročile nepotrebnih težav z delovanjem.

Medtem ko je energijsko ozaveščeno načrtovanje naslednja velika stvar, lahko tudi trdimo, da je že tu in je že nekaj časa. Z vedno več napravami, ki z Energy Aware Scheduling postajajo priljubljene, je tu nova doba učinkovitosti mobilne obdelave.

Prednosti in slabosti Round-Robin, CFS, HMP in EAS

Čeprav so moje grafične sposobnosti slabše, sem sestavil sliko, ki bi morala povzeti prednosti in slabosti vsakega od teh načrtovalcev.


Rad bi se še posebej zahvalil priznanemu sodelavcu XDA Mostafa Wael čigar razlage različnih vidikov EAS so močno pripomogle k nastanku tega članka. Prav tako bi se rad zahvalil XDA Recognized Developer joshuous, priznani razvijalec XDA RenderBroken in Mostafa Wael za njegov zapis o EAS. Za tiste, ki ste našli zanimanje za dele, povezane z EAS, ima Linaro veliko dokumentacije o EAS, ki jo lahko preberete.