Kuidas EAS aitab muuta Google Pixeli kiireimaks Android-telefoniks

Google Pixeli nutitelefonid on ühed kiireimad Android-telefonid turul. Energy Aware Scheduling (EAS) on osaliselt põhjus, miks telefon on nii sujuv.

Kui Linux oli Linus Torvaldsi peas vaid idee, olid CPU-d ühetuumalised üksused, mis nõudsid vähese võimsuse jaoks tohutult energiat. Esimene kaubanduslikult saadaolev protsessor Intel 4004 töötas ühes tuumas 740 kHz taktsagedusega. Tollal polnud koormuse planeerijat vaja. Koormuse ajastamine oli reserveeritud kahetuumalistele "behemotidele", nagu IBM Power 4, mis ilmus mõnikümmend aastat hiljem. Need töötasid metsikult 1,1 GHz kuni 1,9 GHz ning nende tuumade õigeks kasutamiseks oli vaja programme ja süsteemi. Kuidas jõudsime nende masinate juurest tarkvaraalgoritmideni, mis kasutavad mitut tuuma? Võib-olla olete meie foorumites varem kuulnud energiateadlikust ajakavast (EAS). See on osa põhjusest, miks Google Pixeli nutitelefonid nii hästi toimivad. Mis on EASis nii toredat ja kuidas me üldse selle punktini jõudsime? Enne kui saame seda selgitada, peame rääkima Linuxi laadimisgraafikutest.


Linuxi koormuse planeerijate areng

Round-Robini ajakava

Round Robin töötlemine. Allikas: Wikipedia

Round robin töötlemine on lihtne kontseptsioon, mida tuleb selgitada ja mõista, ja veelgi lihtsam, et mõista selle puudusi. Round-robin kasutab igale protsessile aja eraldamiseks aja lõikamist. Oletame, et meie arvutis töötab neli protsessi.

  • Protsess A
  • Protsess B
  • Protsess C
  • Protsess D

Nüüd teeme ringplaani planeerija tööd. Enne järgmise juurde liikumist eraldame igale protsessile 100 millisekundit (ajalõikus). See tähendab, et protsessi A töötlemiseks võib kuluda 100 millisekundit, seejärel liigub see protsessi B ja nii edasi. Kui rakenduse töö tegemiseks kulub 250 millisekundit, peab see selle töö lõpetamiseks läbima 3 korda! Nüüd skaleerige see erinevate tuumade vahel, nii et protsess A ja protsess B eraldatakse tuumale 1 ning protsess C ja protsess D eraldatakse tuumale 2. See asendati O(n) ajakavaga (mis oli nagu ümberringi, kuid kasutas ajastuid ja võimaldas dünaamilist jaotamist aeg), seejärel O(1) ajakava (minimeeritud üldkulud, piiramatu protsessi tugi), siis lõpuks Täiesti õiglane ajakava (CFS). CFS liideti 2007. aasta oktoobris Linuxi kerneli versiooniga 2.6.23. Sellest ajast alates on seda uuendatud ja see on endiselt Linuxi süsteemide vaikeplaneerija.

Täiesti õiglane ajakava

Täiesti õiglane ajakava on Androidis eksisteerinud selle loomisest peale ja seda kasutatakse mittesuurtes seadmetes. VÄIKESED seadmed. See kasutab töötlemisjärjestuse, eraldatud aja jne määramiseks intelligentset algoritmi. See on näide hästi uuritud ajastamisalgoritmi, mida nimetatakse "kaalutud õiglaseks järjekorraks", toimivast teostusest. Põhimõtteliselt keskendub see süsteemiprotsessidele ja muudele kõrge prioriteediga protsessidele, mis töötavad sellel masin. Kui see sõidaks suurel. VÄIKE seade, kõiki tuumasid tajutaks võrdsena. See on halb, kuna väikese võimsusega tuumad võivad olla sunnitud töötama intensiivseid rakendusi või veelgi hullem, võib juhtuda vastupidine. Muusika kuulamiseks mõeldud dekodeerimist võib teha näiteks suurel tuumal, suurendades tarbetult energiatarbimist. See on põhjus, miks me vajame uut ajakava suur. LITTLE, mis suudab tegelikult ära tunda ja energiatõhusal viisil ära kasutada tuumade erinevust. Siin tuleb appi Heterogeneous Multi-Processing (HMP), standardne laadimise ajakava, mida enamik Android-telefone praegu kasutab.

Heterogeenne mitmekordne töötlemine

See on standardne laadimise ajakava iga suure jaoks. Viimastel aastatel välja antud LITTLE seade, välja arvatud Google Pixel. HMP kasutab suuri. VÄHE arhitektuur, mis delegeerib madala prioriteediga ja vähem intensiivse töö väikestele tuumadele, mis tarbivad vähem energiat. HMP on "turvaline", kus ta teab, mis peaks minema suurtesse tuumadesse ja mis peaks minema väikestesse tuumadesse, ilma vigu tegemata. See lihtsalt töötab ja nõuab arenduse poolel seadistamiseks palju vähem jõupingutusi kui EAS-i taoline asi, millesse jõuame hetke pärast. HMP on lihtsalt CFS-i laiendus, et muuta see energiateadlikuks.

HMP ei tee oletusi ega ennusta tulevasi protsesse. See on hea, kuid seetõttu ei saa seade olla nii vedel kui need, mis töötavad EAS-iga, ja seetõttu tarbib see ka veidi rohkem akut. See viib meid lõpuks Energy Aware Scheduling (EAS) juurde, mis on minu arvates ROM-i ja kerneli arendamise tulevik, kuna rohkem originaalseadmete tootjaid selle kasutusele võtab.

Energiateadlik ajakava

Energy Aware Scheduling (EAS) on järgmine suur asi, millest kasutajad meie foorumites räägivad. Kui kasutate OnePlus 3 (või ilmselt Google Pixelit), olete sellest kindlasti foorumites kuulnud. See käivitati peavoolu koos Qualcomm Snapdragon 845-ga, nii et kui teil on üks neist seadmetest, on teil juba EAS-i toega nutitelefon. EAS tuumade kujul nagu RenderZenith ja ROM-id nagu VertexOS ja PureFusion vallutasid OnePlus 3 foorumid oma parimal ajal tormiliselt. Loomulikult tuleb Google Pixeliga kaasa ka EAS. Mis on lubadus pikendada aku kasutusaega ja paremat jõudlust?

Energiateadlik ajastamine ei ole nii lihtne, kuna see pole universaalne kõigi seadmete jaoks, nagu CFS või HMP. EAS nõuab energiamudelil põhinevat arusaamist protsessorist, millel see töötab. Neid energiamudeleid valmistavad inseneride meeskonnad, kes pidevalt katsetavad ja töötavad optimaalse jõudluse nimel. Kuna Snapdragon 820 ja 821 on põhimõtteliselt samad, kasutavad OnePlus 3 kohandatud tuumad Google Pixeli energiamudelit. Snapdragon 845-ga seadmed saavad kasutada EAS-i ja OnePlus 6 seda teatud määral kasutab. See ei ole nii häälestatud kui Google Pixeli seade, kuid see saab töö tehtud. Siin on näide sellest, kuidas vaatamata sellele, et OnePlus 6-l on parem protsessor koos EAS-iga, ületab Pixel 2 XL selle siiski sujuvalt. Mõlemad pildid on tehtud meie juurest kiirusele orienteeritud ülevaade OnePlus 6-st.

Kui teil on graafikute mõistmisega probleeme, võite juhiste saamiseks vaadata allolevat pilti. Kõik, mis ületab rohelist joont, näitab langenud kaadreid ja halvimal juhul märgatavat kokutamist.

EAS-i OnePlus 6 juurutamine on huvitav, kuna see ei tundu olevat täisväärtuslik rakendus, nagu leiate sama SoC-ga Google Pixelist. Ka ajakava häälestatavatel ei ole palju mõtet, nii et see ilmselt seletab, miks see pole nii jõudluses kui oodata võiks. See on energiatarbimise osas äärmiselt konservatiivne, kuna süsteem eelistab suurema osa töö puhul väikese võimsusega südamikke.

Tunables on lihtsalt parameetrite kogum, mis edastatakse protsessori regulaatorile, mis muudab regulaatori sageduse osas seda, kuidas regulaator teatud olukordadele reageerib. Seejärel otsustab planeerija, kuhu ta erinevatele protsessoritele ülesanded paigutab. OnePlus 6 häälestatavad seaded on seatud eelistama tööd väikese võimsusega tuumadega. Ei aita ka see, et Google Pixel 2-l on tohutu sisendvõimendus, hoides kõik 8 tuuma kogu aeg võrgus. Google kasutab ka katkestuse tasakaalustaja mis aitab eemaldada raami kukkumisi ja parandada jõudlust.

Niisiis, kuidas EAS töötab? Miks on see nii tõhus ainult teatud tingimustel?

Energy Aware Scheduling toob kaasa energiamudeli kasutamise vajaduse ning nagu eespool mainitud, nõuab selle täiuslikuks muutmiseks palju katsetamist ja tööd. EAS püüab ühendada kolm erinevat tuuma tuuma osa, mis kõik toimivad sõltumatult, ja energiamudel aitab neid ühendada.

  • Linuxi ajakava (CFS, eespool mainitud)
  • Linuxi cpuidle
  • Linuxi cpufreq

Kõigi 3 osa ühendamine ajakava alla ja nende koos arvutamine annab energiasäästupotentsiaali, kuna nende koos arvutamine võimaldab neil olla võimalikult tõhus. CPUIdle proovib otsustada, millal peaks protsessor jõuderežiimi minema, samal ajal kui CPUFreq proovib otsustada, millal protsessorit üles või alla tõsta. Mõlema mooduli peamine eesmärk on säästa energiat. Vähe sellest, see kategoriseerib protsessid nelja c-rühma, mis on ülemine rakendus, süsteemi taust, esiplaan ja taust. Töötlemisele kuuluvad ülesanded paigutatakse ühte nendest kategooriatest ja seejärel antakse sellele kategooriale CPU võimsus ja töö delegeeritakse erinevatele protsessori tuumadele. top-app on lõpetamise kõrgeim prioriteet, millele järgneb esiplaan, taust ja seejärel süsteemi taust. Tehniliselt on taustal sama prioriteet kui süsteemi taustal, kuid süsteemi taustal on tavaliselt juurdepääs ka väiksematele tuumadele. Tegelikult võtab Energy Aware Scheduling Linuxi tuuma põhiosad ja ühendab selle kõik üheks protsessiks.

Seadme äratamisel valib EAS südamiku madalaimas tühikäiguolekus, minimeerides seadme äratamiseks vajaliku energia. See aitab vähendada seadme kasutamisel vajalikku võimsust, kuna see ei ärata suurt kobarat, kui see ei vaja. Koormuse jälgimine on samuti EAS-i äärmiselt oluline osa ja valikuid on kaks. "Per-Entity Load Tracking" (PELT) kasutatakse tavaliselt koormuse jälgimiseks, seejärel kasutatakse teavet sageduste ja ülesannete delegeerimise otsustamiseks protsessoris. Kasutada saab ka "aknaabiga koormuse jälgimist" (WALT) ja seda kasutatakse ka Google Pixelis. Paljud meie foorumites olevad EAS-i ROMid (nt VertexOS) valivad WALTi kasutamise. Paljud ROMid annavad välja kaks WALTi või PELT-i kerneli versiooni, nii et see on kasutaja enda otsustada. WALT on hoogsam, protsessori sagedus on kõrge, samas kui PELT püüab püsida ühtlasem. Koormusjälgija ei mõjuta tegelikult protsessori sagedust, vaid lihtsalt ütleb süsteemile, milline on protsessori kasutus. Suurem protsessori kasutus nõuab kõrgemat sagedust ja seega on PELTi järjekindel omadus see, et see põhjustab protsessori sageduse aeglase tõusmise või languse. PELT kaldub kalduma suurema protsessori koormuse aruandluse poole, seega võib see pakkuda suuremat jõudlust kõrgema akukulu juures. Keegi ei saa aga praegu öelda, milline koormuse jälgimise süsteem on parem, kuna mõlemat koormuse jälgimise meetodit parandatakse ja täiustatakse pidevalt.

Mõlemal juhul on ilmne, et olenemata kasutatavast koormuse jälgimise meetodist suureneb tõhusus. Selle asemel, et ülesandeid lihtsalt mis tahes protsessoris töödelda, analüüsitakse ülesannet ja hinnatakse selle käitamiseks kuluvat energiat. See nutikas ülesannete paigutus tähendab, et ülesanded täidetakse palju tõhusamalt, muutes samal ajal süsteemi tervikuna kiiremaks. EAS-i eesmärk on võimalikult sujuv kasutajaliides minimaalse energiatarbimisega. Siin tulevad mängu muud välised komponendid, näiteks schedtune.

Schedtune on igas crühmas määratletud kahe häälestatavaga, mis tagavad täpsema kontrolli täidetavate ülesannete üle. See ei juhi mitte ainult ülesannete jaotumist mitme protsessori vahel, vaid ka seda, kas tajutavat koormust tuleks suurendada, et tagada ajatundlike ülesannete kiirem täitmine. Nii ei aeglusta kasutaja kasutatavad esiplaani rakendused ja teenused ega põhjusta tarbetuid jõudlusprobleeme.

Kuigi energiateadlik ajakava on järgmine suur asi, võib ka väita, et see on juba käes ja on olnud mõnda aega. Kuna üha rohkem seadmeid on Energy Aware'i ajakava abil populaarseks saanud, on käes uus mobiilse töötlemise tõhususe ajastu.

Round-Robini, CFS-i, HMP ja EAS-i plussid ja miinused

Kuigi mu graafikaoskused on kehvad, olen koostanud pildi, mis peaks kokku võtma, millised on nende ajakavade plussid ja miinused.


Tahaksin avaldada erilist tänu XDA tunnustatud panustajale Mostafa Wael kelle selgitused EASi erinevate aspektide kohta aitasid oluliselt kaasa selle artikli teoks tegemisele. Samuti tahaksin tänada XDA tunnustatud arendajat joshuus, XDA tunnustatud arendaja RenderBroken ja Mostafa Wael EASis kirjutamise eest. Neile teist, kes tundsid huvi EAS-iga seotud osade vastu, on Linarol EAS-i kohta palju dokumente, mida saate lugeda.