Kako EAS pomaže da Google Pixel postane najbrži Android telefon

Google Pixel pametni telefoni su među najbržim Android telefonima na tržištu. Energy Aware Scheduling (EAS) djelomično je razlog zašto je telefon tako gladak.

Daleko u prošlosti, kada je Linux bio samo ideja u umu Linusa Torvaldsa, procesori su bili jednojezgreni entiteti koji su zahtijevali ogromnu količinu energije za malo energije. Prvi ikada komercijalno dostupan procesor, Intel 4004, radio je na radnom taktu od 740 kHz na jednoj jezgri. Tada nije bilo potrebe za planerom učitavanja. Raspored učitavanja bio je rezerviran za dvojezgrene "gigante" kao što je IBM Power 4 koji se pojavio nekoliko desetljeća kasnije. One su radile na nevjerojatnih 1,1 GHz do 1,9 GHz i zahtijevale su programe i sustav da ispravno iskoriste te jezgre. Kako smo od ovih strojeva došli do softverskih algoritama koji koriste više jezgri? Možda ste već čuli za Energy Aware Scheduling (EAS) na našim forumima. To je dio razloga zašto pametni telefoni Google Pixel rade tako dobro. Što je tako dobro u EAS-u i kako smo uopće došli do ove točke? Prije nego to možemo objasniti, moramo govoriti o planerima učitavanja Linuxa.


Evolucija Linux planera učitavanja

Round-robin raspored

Round Robin obrada. Izvor: Wikipedia

Round robin obrada jednostavan je koncept za objasniti i razumjeti, a još je jednostavniji za shvatiti njegove nedostatke. Round-robin koristi odsječak vremena za dodjelu vremena svakom procesu. Pretpostavimo da na našem računalu rade četiri procesa.

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

Sada obavimo posao kružnog raspoređivača. Dodijelit ćemo 100 milisekundi (odsječak vremena) svakom procesu prije nego što prijeđemo na sljedeći. To znači da procesu A može trebati 100 milisekundi da izvrši svoju obradu, zatim se premješta u proces B i tako dalje. Ako je za posao aplikacije potrebno 250 milisekundi, morat će proći kroz ovaj proces 3 puta samo da završi svoj posao! Sada skalirajte ovo na različite jezgre, tako da su proces A i proces B dodijeljeni jezgri 1, a proces C i proces D dodijeljeni jezgri 2. Ovo je zamijenjeno O(n) raspoređivanjem (što je bilo poput kružnog rada, ali je koristilo epohe i dopuštalo dinamičku dodjelu vrijeme), zatim O(1) raspoređivanje (minimizirani troškovi, neograničena podrška procesu), zatim konačno Potpuno pravedni planer (CFS). CFS je spojen s Linux kernelom verzije 2.6.23 u listopadu 2007. Od tada je prerađen i još uvijek je zadani planer u Linux sustavima.

Potpuno pošten raspored

Completely Fair Scheduler postoji u Androidu od njegova početka i koristi se na nevelikim uređajima. MALI uređaji. Koristi inteligentni algoritam za određivanje redoslijeda obrade, dodijeljenog vremena itd. To je primjer radne implementacije dobro proučenog algoritma za raspoređivanje nazvanog "ponderirano pravedno postavljanje u red čekanja". Ovo se u osnovi fokusira na davanje prioriteta procesima sustava i drugim procesima visokog prioriteta koji se izvode na mašina. Ako bi se pokrenulo na velikom. MALI uređaj, sve bi jezgre bile percipirane kao jednake. To je loše jer jezgre male snage mogu biti prisiljene pokretati intenzivne aplikacije, ili još gore, može se dogoditi suprotno. Na primjer, dekodiranje za slušanje glazbe može se izvršiti na velikoj jezgri, nepotrebno povećavajući potrošnju energije. Zbog toga nam treba novi planer za big. LITTLE, onaj koji zapravo može prepoznati i iskoristiti razliku u jezgrama na energetski učinkovit način. Tu dolazi Heterogeneous Multi-Processing (HMP), standardni planer učitavanja koji sada pokreće većina Android telefona.

Heterogena višestruka obrada

Ovo je standardni planer učitavanja za sve velike. MALI uređaj objavljen posljednjih godina, osim Google Pixela. HMP koristi veliki. LITTLE arhitektura, delegiranje niskog prioriteta, manje intenzivan rad na male jezgre koje troše manje energije. HMP je "siguran" pri čemu zna što treba ići u velike, a što u male jezgre, bez pogreške. Jednostavno funkcionira i zahtijeva puno manje truda za postavljanje na razvojnoj strani nego nešto poput EAS-a, o čemu ćemo se pozabaviti za trenutak. HMP je samo proširenje CFS-a kako bi bio svjestan snage.

HMP ne nagađa niti predviđa buduće procese. To je dobro, ali zato uređaj ne može biti fluidan kao oni koji pokreću EAS i zato troši nešto više baterije. Ovo nas konačno dovodi do Energy Aware Scheduling (EAS), za koje čvrsto vjerujem da je budućnost u razvoju ROM-a i kernela kako ga sve više OEM-a usvaja.

Energetski svjesno planiranje

Energy Aware Scheduling (EAS) sljedeća je velika stvar o kojoj korisnici na našim forumima govore. Ako koristite OnePlus 3 (ili Google Pixel, očito) sigurno ste čuli za njega na forumima. Lansirao se u mainstream s Qualcomm Snapdragonom 845, tako da ako imate jedan od ovih uređaja već imate pametni telefon s EAS-om. EAS u obliku kernela kao npr RenderZenith i ROM-ovi kao što su VertexOS i PureFusion osvajali su forume o OnePlus 3 u svom vrhuncu. Naravno, Google Pixel dolazi i s EAS-om. Uz obećanja poboljšanog trajanja baterije i bolje performanse, u čemu je caka?

Energy Aware Scheduling nije tako jednostavan jer nije univerzalan za svaki uređaj poput CFS-a ili HMP-a. EAS zahtijeva razumijevanje procesora na kojem radi, na temelju energetskog modela. Ove energetske modele izrađuju timovi inženjera koji neprestano testiraju i rade na postizanju optimalne izvedbe. Budući da su Snapdragon 820 i 821 u osnovi isti, prilagođene jezgre na OnePlus 3 koriste Google Pixel energetski model. Uređaji sa Snapdragonom 845 mogu koristiti EAS, a OnePlus 6 to čini u određenoj mjeri. Nije tako podešen kao Google Pixel uređaj, ali obavlja posao. Evo primjera kako, unatoč tome što OnePlus 6 ima bolji procesor s EAS-om, Pixel 2 XL ga još uvijek pobjeđuje glatkoćom. Obje ove slike preuzete su s našeg pregled orijentiran na brzinu od OnePlus 6.

Ako imate problema s razumijevanjem grafikona, možete pogledati sliku u nastavku za smjernice. Sve što prelazi zelenu crtu ukazuje na ispuštanje okvira i, u najgorem slučaju, na vidljivo zastajkivanje.

OnePlus 6 implementacija EAS-a je zanimljiva jer se ne čini kao potpuna implementacija kakvu biste pronašli na Google Pixelu s istim SoC-om. Podesivost raspoređivača također nema previše smisla, pa to vjerojatno objašnjava zašto nije tako učinkovit kao što biste očekivali. Izuzetno je konzervativan u potrošnji energije, sa sustavom koji daje prednost jezgrama male snage za većinu posla.

Podesivi su jednostavno skup parametara koji se prosljeđuju CPU regulatoru, koji mijenja način na koji regulator reagira na određene situacije u smislu učestalosti. Planer tada odlučuje gdje će postaviti zadatke na različitim procesorima. Podesivi OnePlus 6 postavljeni su tako da daju prioritet radu na jezgrama male snage. Ne pomaže ni to što Google Pixel 2 ima ogromno pojačanje unosa, držeći svih 8 jezgri online cijelo vrijeme. Google također koristi balanser prekida što pomaže u uklanjanju pada okvira i poboljšanju performansi.

Dakle, kako EAS radi? Zašto je tako učinkovit samo u određenim uvjetima?

Energy Aware Scheduling uvodi potrebu za korištenjem energetskog modela i, kao što je gore spomenuto, zahtijeva puno testiranja i rada kako bi bio savršen. EAS pokušava objediniti tri različita temeljna dijela jezgre koji svi djeluju neovisno, a energetski model pomaže u njihovom objedinjavanju.

  • Linux planer (CFS, gore spomenut)
  • Linux cpuidle
  • Linux cpufreq

Objedinjavanje sva 3 dijela pod planerom i njihovo zajedničko izračunavanje daje potencijal za uštedu energije, budući da njihovo zajedničko izračunavanje omogućuje da budu što učinkovitiji. CPUIdle pokušava odlučiti kada CPU treba prijeći u stanje mirovanja, dok CPUFreq pokušava odlučiti kada povećati ili smanjiti CPU. Oba ova modula imaju primarni cilj uštedu energije. I ne samo to, on zatim kategorizira procese u četiri cgroups, a to su top-aplikacija, sustav-pozadina, prvi plan i pozadina. Zadaci koji se trebaju obraditi smještaju se u jednu od ovih kategorija, a zatim se kategoriji daje procesorska snaga i posao se delegira na različite CPU jezgre. top-app je najviši prioritet dovršetka, nakon čega slijede prednji plan, pozadina, a zatim sistemska pozadina. Pozadina tehnički ima isti prioritet kao i pozadina sustava, ali pozadina sustava obično također ima pristup većem broju malih jezgri. Zapravo, Energy Aware Scheduling uzima ključne dijelove Linux kernela i sve to objedinjuje u jedan proces.

Prilikom buđenja uređaja, EAS će odabrati jezgru u najplićem stanju mirovanja, minimizirajući energiju potrebnu za buđenje uređaja. To pomaže smanjiti potrebnu snagu za korištenje uređaja, jer neće probuditi veliki klaster ako to ne treba. Praćenje opterećenja također je iznimno važan dio EAS-a, a postoje dvije mogućnosti. "Praćenje opterećenja po entitetu" (PELT) obično se koristi za praćenje opterećenja, informacije se zatim koriste za odlučivanje o učestalosti i načinu delegiranja zadataka preko CPU-a. Također se može koristiti "Window-Assisted Load Tracking" (WALT) i ono se koristi na Google Pixelu. Mnogi EAS ROM-ovi na našim forumima, kao što je VertexOS, odlučuju koristiti WALT. Mnogi ROM-ovi će objaviti dvije verzije kernela s WALT ili PELT, tako da je na korisniku da odluči. WALT je burniji, s visokim vrhovima u CPU frekvenciji, dok PELT pokušava ostati dosljedniji. Praćenje opterećenja zapravo ne utječe na frekvenciju CPU-a, samo govori sustavu na kojoj je upotrebi CPU-a. Veća upotreba CPU-a zahtijeva veću frekvenciju pa je dosljedna osobina PELT-a to što uzrokuje polagano povećanje ili smanjenje frekvencije CPU-a. PELT ima tendenciju skrenuti prema većem izvješćivanju o opterećenju CPU-a, tako da može pružiti bolje performanse uz veću cijenu baterije. Međutim, u ovom trenutku nitko zapravo ne može reći koji je sustav praćenja opterećenja bolji, budući da se obje metode praćenja opterećenja neprestano dorađuju i usavršavaju.

U svakom slučaju, očito je da, bez obzira na korištenu metodu praćenja opterećenja, dolazi do povećanja učinkovitosti. Umjesto samo obrade zadataka na bilo kojem procesoru, zadatak se analizira i procjenjuje se količina energije potrebna za njegovo izvršavanje. Ovo pametno postavljanje zadataka znači da se zadaci izvršavaju na puno učinkovitiji način, a istovremeno čini sustav bržim u cjelini. EAS je usmjeren na dobivanje najglađeg mogućeg korisničkog sučelja uz minimalnu potrošnju energije. Tu na scenu stupaju druge vanjske komponente kao što je schedtune.

Schedtune je definiran u svakoj cgroup-u s dvije mogućnosti podešavanja koje osiguravaju finiju kontrolu nad zadacima koje treba izvršiti. Ne kontrolira samo raspodjelu zadataka na više CPU-a, već i treba li percipirano opterećenje biti napuhano kako bi se osiguralo brže dovršavanje vremenski osjetljivih zadataka. Na taj način aplikacije i usluge u prvom planu koje korisnik koristi neće usporavati i uzrokovati nepotrebne probleme s performansama.

Iako je Energy Aware Scheduling sljedeća velika stvar, može se tvrditi da je već tu i postoji već neko vrijeme. Sa sve više i više uređaja koji dolaze u mainstream uz Energy Aware Scheduling, novo doba učinkovitosti mobilne obrade je ovdje.

Prednosti i mane Round-Robina, CFS-a, HMP-a i EAS-a

Iako su moje grafičke vještine ispod razine, sastavio sam sliku koja bi trebala sažeti prednosti i nedostatke svakog od ovih planera.


Želio bih izraziti posebnu zahvalnost XDA Recognized Contributoru Mostafa Wael čija su objašnjenja različitih aspekata EAS-a uvelike pomogla u izradi ovog članka. Također bih želio zahvaliti XDA Recognized Developer joshuous, XDA priznati programer RenderBroken i Mostafa Wael za njegov tekst o EAS-u. Za one od vas koje zanimaju dijelovi povezani s EAS-om, Linaro ima puno dokumentacije o EAS-u koju možete pročitati.