Ako EAS pomáha urobiť z Google Pixel najrýchlejší telefón s Androidom

click fraud protection

Smartfóny Google Pixel patria medzi najrýchlejšie telefóny s Androidom na trhu. Plánovanie Energy Aware (EAS) je čiastočne dôvodom, prečo je telefón taký plynulý.

Ďaleko v minulosti, keď bol Linux len nápadom Linusa Torvaldsa, boli CPU jednotky s jedným jadrom, ktoré vyžadovali obrovské množstvo energie pri nízkej spotrebe energie. Prvý komerčne dostupný procesor, Intel 4004, bežal na jednom jadre s taktovacou frekvenciou 740 kHz. Vtedy ešte nebolo potrebné plánovač zaťaženia. Plánovanie záťaže bolo vyhradené pre dvojjadrové „obludy“, ako je IBM Power 4, ktorý vyšiel o niekoľko desaťročí neskôr. Tie bežali na beštiálnych 1,1 GHz až 1,9 GHz a vyžadovali programy a systém na správne využitie týchto jadier. Ako sme sa dostali od týchto strojov k softvérovým algoritmom, ktoré využívajú viacero jadier? Možno ste už na našom fóre počuli o plánovaní Energy Aware Scheduling (EAS). Je to jeden z dôvodov, prečo smartfóny Google Pixel fungujú tak dobre. Čo je na EAS také skvelé a ako sme sa k tomuto bodu vôbec dostali? Predtým, ako to budeme môcť vysvetliť, musíme hovoriť o plánovačoch zaťaženia Linuxu.


Vývoj plánovačov zaťaženia Linuxu

Round-Robin plánovanie

Okrúhle spracovanie. Zdroj: Wikipedia

Okruhové spracovanie je jednoduchý koncept na vysvetlenie a pochopenie a ešte jednoduchší na pochopenie jeho nevýhod. Round-robin používa časové krájanie na pridelenie času každému procesu. Predpokladajme, že na našom počítači bežia štyri procesy.

  • Proces A
  • Proces B
  • Proces C
  • Proces D

Teraz urobme prácu plánovača cyklických správ. Každému procesu pridelíme 100 milisekúnd (časové delenie) a až potom prejdeme k ďalšiemu. To znamená, že procesu A môže spracovanie trvať 100 milisekúnd, potom sa presunie na proces B a tak ďalej. Ak úloha aplikácie trvá 250 milisekúnd, bude musieť prejsť týmto procesom 3-krát, aby dokončila svoju prácu! Teraz to rozšírte na rôzne jadrá tak, že Proces A a Proces B budú pridelené jadru 1 a Proces C a Proces D budú pridelené jadru 2. Toto bolo nahradené plánovaním O(n) (ktoré bolo ako kolo-robin, ale používalo epochy a umožňovalo dynamické prideľovanie čas), potom O(1) plánovanie (minimálna réžia, neobmedzená podpora procesov), nakoniec úplne spravodlivý plánovač (CFS). CFS bol začlenený do linuxového jadra verzie 2.6.23 v októbri 2007. Odvtedy bol prepracovaný a stále je predvoleným plánovačom v systémoch Linux.

Úplne spravodlivý plánovač

Úplne spravodlivý plánovač existuje v systéme Android od jeho začiatku a používa sa na iných ako veľkých. LITTLE zariadenia. Používa inteligentný algoritmus na určenie poradia spracovania, prideleného času atď. Je to príklad fungujúcej implementácie dobre preštudovaného plánovacieho algoritmu nazývaného „vážené spravodlivé radenie“. Toto sa v podstate zameriava na poskytovanie priority systémovým procesom a iným procesom s vysokou prioritou bežiacim na serveri stroj. Ak by to malo bežať na veľkom. LITTLE zariadenie, všetky jadrá by boli vnímané ako rovnocenné. To je zlé, pretože jadrá s nízkou spotrebou energie môžu byť nútené spúšťať intenzívne aplikácie, alebo čo je ešte horšie, môže nastať opak. Dekódovanie pre počúvanie hudby môže byť vykonané na veľkom jadre, napríklad zbytočne zvyšuje spotrebu energie. To je dôvod, prečo potrebujeme nový plánovač pre veľké. LITTLE, ktorý dokáže skutočne rozpoznať a využiť rozdiel v jadrách energeticky efektívnym spôsobom. To je miesto, kde prichádza na scénu Heterogeneous Multi-Processing (HMP), štandardný plánovač zaťaženia na väčšine telefónov s Androidom.

Heterogénne viacnásobné spracovanie

Toto je štandardný plánovač zaťaženia pre každého veľkého. LITTLE zariadenie vydané v posledných rokoch, iné ako Google Pixel. HMP využíva veľké. Architektúra LITTLE, delegujúca nízku prioritu a menej intenzívnu prácu na malé jadrá, ktoré spotrebujú menej energie. HMP je "bezpečné", v ktorom vie, čo by malo ísť do veľkých jadier a čo by malo ísť do malých jadier, bez toho, aby urobilo chyby. Jednoducho to funguje a vyžaduje si oveľa menej úsilia na nastavenie po stránke vývoja ako niečo ako EAS, do ktorého sa pustíme o chvíľu. HMP je len rozšírením CFS, aby si uvedomil silu.

HMP neháda ani nepredpovedá budúce procesy. To je dobré, ale to je dôvod, prečo zariadenie nemôže byť také plynulé ako tie, ktoré používajú EAS, a preto spotrebúva o niečo viac batérie. To nás konečne privádza k plánovaniu Energy Aware (EAS), o ktorom pevne verím, že je budúcnosťou vo vývoji ROM a jadra, keďže ho prijme viac výrobcov OEM.

Plánovanie s ohľadom na energiu

Energy Aware Scheduling (EAS) je ďalšou veľkou vecou, ​​o ktorej používatelia na našich fórach hovoria. Ak používate OnePlus 3 (alebo samozrejme Google Pixel), určite ste o ňom vo fórach počuli. Spustil sa do hlavného prúdu s Qualcomm Snapdragon 845, takže ak máte jedno z týchto zariadení, už máte smartfón s podporou EAS. EAS vo forme jadier ako napr RenderZenith a ROM ako napr VertexOS a PureFusion brali fóra OnePlus 3 útokom v najlepších rokoch. Samozrejme, Google Pixel prichádza aj s EAS. V čom spočíva háčik, keď sa sľubuje lepšia výdrž batérie a lepší výkon?

Plánovanie Energy Aware nie je také jednoduché, pretože nie je univerzálne pre každé zariadenie, ako je CFS alebo HMP. EAS vyžaduje pochopenie procesora, na ktorom beží, na základe energetického modelu. Tieto energetické modely vyrábajú tímy inžinierov, ktoré neustále testujú a pracujú na dosiahnutí optimálneho výkonu. Keďže Snapdragon 820 a 821 sú v podstate rovnaké, vlastné jadrá na OnePlus 3 využívajú energetický model Google Pixel. Zariadenia so Snapdragonom 845 môžu využívať EAS a OnePlus 6 do určitej miery áno. Nie je tak vyladené ako zariadenie Google Pixel, ale svoju prácu zvládne. Tu je príklad toho, ako aj napriek tomu, že OnePlus 6 má lepší procesor s EAS, Pixel 2 XL ho stále prekonáva v plynulosti. Oba tieto obrázky boli prevzaté z nášho recenzia zameraná na rýchlosť z OnePlus 6.

Ak máte problémy s pochopením grafov, môžete sa pozrieť na obrázok nižšie, kde nájdete návod. Všetko, čo presahuje zelenú čiaru, naznačuje vypadnuté snímky a v najhorších prípadoch aj citeľné zasekávanie.

Implementácia OnePlus 6 EAS je zaujímavá, keďže sa nezdá, že by išlo o plnohodnotnú implementáciu, akú by ste našli na Google Pixel s rovnakým SoC. Laditeľné funkcie plánovača tiež nedávajú veľký zmysel, takže to pravdepodobne vysvetľuje, prečo to nie je také výkonovo efektívne, ako by ste očakávali. Je extrémne konzervatívny v spotrebe energie, pričom systém uprednostňuje jadrá s nízkou spotrebou energie pre väčšinu práce.

Laditeľné sú jednoducho súbor parametrov, ktoré sa odovzdávajú do regulátora CPU, čo mení, ako regulátor reaguje na určité situácie z hľadiska frekvencie. Plánovač potom rozhodne, kam rozmiestni úlohy na rôznych procesoroch. Laditeľné funkcie OnePlus 6 sú nastavené tak, aby uprednostňovali prácu na jadrách s nízkym výkonom. Nepomáha ani to, že Google Pixel 2 má obrovské množstvo vstupného zosilnenia, vďaka čomu je všetkých 8 jadier neustále online. Google tiež používa prerušiť balancér ktorý pomáha odstraňovať pády rámu a zlepšuje výkon.

Ako teda EAS funguje? Prečo je taký účinný len za určitých podmienok?

Energy Aware Scheduling predstavuje potrebu používať energetický model a ako už bolo spomenuté vyššie, vyžaduje si veľa testovania a práce, aby bol dokonalý. EAS sa pokúša zjednotiť tri rôzne základné časti jadra, ktoré fungujú nezávisle, a energetický model ich pomáha zjednotiť.

  • Plánovač Linux (CFS, spomenutý vyššie)
  • Linux cpuidle
  • Linux cpufreq

Zjednotenie všetkých 3 častí pod plánovačom a ich spoločný výpočet dáva potenciál pre úsporu energie, pretože ich spoločný výpočet umožňuje, aby boli čo najefektívnejšie. CPUIdle sa pokúša rozhodnúť, kedy má CPU prejsť do nečinného režimu, zatiaľ čo CPUFreq sa pokúša rozhodnúť, kedy má CPU zvýšiť alebo znížiť. Hlavným cieľom oboch týchto modulov je úspora energie. A nielen to, potom kategorizuje procesy do štyroch skupín cgroups, pričom ide o top-app, system-background, popredie a pozadie. Úlohy, ktoré sa majú spracovať, sa zaradia do jednej z týchto kategórií a potom sa kategórii pridelí výkon CPU a práca sa deleguje na rôzne jadrá CPU. top-app je najvyššia priorita dokončenia, po ktorej nasleduje popredie, pozadie a potom pozadie systému. Pozadie má technicky rovnakú prioritu ako systémové pozadie, ale systémové pozadie má zvyčajne prístup k väčšiemu počtu malých jadier. V skutočnosti Energy Aware Scheduling preberá základné časti linuxového jadra a zjednocuje to všetko do jedného procesu.

Pri prebudení zariadenia si EAS vyberie jadro v najplytšom stave nečinnosti, čím sa minimalizuje energia potrebná na prebudenie zariadenia. Pomáha to znížiť potrebnú energiu pri používaní zariadenia, pretože nezobudí veľký klaster, ak to nebude potrebné. Sledovanie zaťaženia je tiež mimoriadne dôležitou súčasťou EAS a existujú dve možnosti. "Per-Entity Load Tracking" (PELT) sa zvyčajne používa na sledovanie zaťaženia, informácie sa potom používajú na rozhodovanie o frekvenciách a spôsobe delegovania úloh v rámci CPU. Je možné použiť aj funkciu „Window-Assisted Load Tracking“ (WALT), ktorá sa používa v zariadení Google Pixel. Mnoho EAS ROM na našich fórach, ako napríklad VertexOS, sa rozhodlo používať WALT. Mnoho ROM vydá dve verzie jadra s WALT alebo PELT, takže je na používateľovi, ako sa rozhodne. WALT je viac nárazový, s vysokými špičkami vo frekvencii CPU, zatiaľ čo PELT sa snaží zostať konzistentnejší. Sledovač zaťaženia v skutočnosti neovplyvňuje frekvenciu procesora, iba informuje systém o tom, aké je využitie procesora. Vyššie využitie CPU vyžaduje vyššiu frekvenciu, a preto konzistentnou črtou PELT je, že spôsobuje pomalé zvyšovanie alebo znižovanie frekvencie CPU. PELT má tendenciu zablúdiť k hláseniu o vyššej záťaži CPU, takže môže poskytnúť vyšší výkon pri vyšších nákladoch na batériu. V súčasnosti však nikto nemôže povedať, ktorý systém sledovania záťaže je lepší, keďže obe metódy sledovania záťaže sa neustále opravujú a zdokonaľujú.

Tak či onak, je zrejmé, že bez ohľadu na použitú metódu sledovania záťaže dochádza k zvýšeniu efektivity. Namiesto spracovania úloh na ľubovoľnom procesore sa úloha analyzuje a odhadne sa množstvo energie potrebnej na jej spustenie. Toto šikovné umiestnenie úloh znamená, že úlohy sa dokončia oveľa efektívnejším spôsobom a zároveň zrýchli systém ako celok. EAS je o získaní čo najplynulejšieho používateľského rozhrania s minimálnou spotrebou energie. Tu vstupujú do hry ďalšie externé komponenty, ako napríklad schedtune.

Schedtune je definovaný v každej cgroup dvoma laditeľnými nastaveniami, ktoré zaisťujú jemnejšiu kontrolu nad úlohami, ktoré sa majú dokončiť. Nekontroluje len rozloženie úloh na viacerých procesoroch, ale aj to, či by sa mala vnímaná záťaž nafúknuť, aby sa zabezpečilo rýchlejšie dokončenie časovo citlivých úloh. Týmto spôsobom sa aplikácie a služby v popredí, ktoré používateľ využíva, nespomalia a nespôsobia zbytočné problémy s výkonom.

Zatiaľ čo plánovanie s ohľadom na energiu je ďalšou veľkou vecou, ​​dá sa tiež tvrdiť, že už tu je a už nejaký čas existuje. S čoraz viac zariadení, ktoré sa dostávajú do hlavného prúdu s plánovaním Energy Aware, je tu nový vek efektívnosti mobilného spracovania.

Výhody a nevýhody Round-Robin, CFS, HMP a EAS

Zatiaľ čo moje grafické schopnosti sú podpriemerné, dal som dokopy obrázok, ktorý by mal zhrnúť výhody a nevýhody každého z týchto plánovačov.


Chcel by som sa osobitne poďakovať uznávanému prispievateľovi XDA Mostafa Wael ktorých vysvetlenia rôznych aspektov EAS výrazne pomohli pri vytváraní tohto článku. Tiež by som rád poďakoval XDA Recognized Developer joshuous, XDA uznávaný vývojár RenderBroken a Mostafovi Waelovi za jeho príspevok na EAS. Pre tých z vás, ktorí sa zaujímali o diely súvisiace s EAS, má Linaro veľa dokumentácie o EAS, ktorú si môžete prečítať.