„Google Pixel“ išmanieji telefonai yra vieni greičiausių „Android“ telefonų rinkoje. Iš dalies dėl energijos vartojimo planavimo (EAS) telefonas veikia taip sklandžiai.
Seniau, kai „Linux“ buvo tik Linuso Torvaldso mintis, centriniai procesoriai buvo vieno branduolio objektai, kuriems reikėjo didžiulio energijos kiekio norint gauti mažai energijos. Pirmasis komerciškai prieinamas procesorius „Intel 4004“ veikė 740 kHz taktiniu dažniu viename branduolyje. Tada nereikėjo įkėlimo planuotojo. Apkrovos planavimas buvo skirtas dviejų branduolių „behemotams“, tokiems kaip IBM Power 4, kuris pasirodė praėjus keliems dešimtmečiams. Jie veikė nuo 1,1 GHz iki 1,9 GHz ir reikalingos programos bei sistema, kad šie branduoliai būtų tinkamai naudojami. Kaip nuo šių mašinų priėjome prie programinės įrangos algoritmų, kuriuose naudojami keli branduoliai? Galbūt anksčiau girdėjote apie energijos vartojimo planavimą (EAS) mūsų forumuose. Tai yra viena iš priežasčių, kodėl „Google Pixel“ išmanieji telefonai veikia taip gerai. Kas tokio nuostabaus EAS ir kaip mes net pasiekėme šį tašką? Prieš tai paaiškindami, turime pakalbėti apie „Linux“ įkėlimo planuoklius.
„Linux“ apkrovos planuoklių evoliucija
„Round-Robin“ tvarkaraštis
Apdorojimo procesas yra paprastas paaiškinimas ir supratimas, o dar paprastesnis būdas suvokti jo trūkumus. Apvalus patikrinimas naudoja laiko pjaustymą, kad paskirstytų laiką kiekvienam procesui. Tarkime, kad mūsų kompiuteryje veikia keturi procesai.
- Procesas A
- Procesas B
- Procesas C
- Procesas D
Dabar atlikime ratų planuotojo darbą. Prieš pereidami prie kito, kiekvienam procesui skirsime 100 milisekundžių (laiko pjaustymas). Tai reiškia, kad proceso A apdorojimas gali užtrukti 100 milisekundžių, tada jis pereina į procesą B ir pan. Jei programos užduotis atlikti užtrunka 250 milisekundžių, ji turės atlikti šį procesą 3 kartus, kad užbaigtų darbą! Dabar paskirstykite tai įvairiose branduoliuose, kad A ir B procesas būtų priskirti 1 branduoliui, o C ir D procesas būtų priskirti 2 branduoliui. Tai buvo pakeista O(n) planavimu (kuris buvo tarsi apvalus, bet naudojant epochas ir leidžiantis dinamiškai paskirstyti laikas), tada O(1) planavimas (sumažintos papildomos išlaidos, neribotas proceso palaikymas), tada galiausiai visiškai sąžiningas planuoklis (CFS). 2007 m. spalio mėn. CFS buvo sujungta su Linux branduolio 2.6.23 versija. Nuo tada jis buvo kapitališkai suremontuotas ir vis dar yra numatytasis planuotojas Linux sistemose.
Visiškai sąžiningas planuotojas
Visiškai sąžiningas planuoklis egzistuoja „Android“ nuo pat jos įkūrimo ir naudojamas ne dideliuose įrenginiuose. MAŽI prietaisai. Jis naudoja išmanųjį algoritmą, kad nustatytų apdorojimo tvarką, skirtą laiką ir kt. Tai gerai ištirto planavimo algoritmo, vadinamo „svertine sąžininga eile“, veikiančio įgyvendinimo pavyzdys. Tai iš esmės orientuota į pirmenybės teikimą sistemos procesams ir kitiems aukšto prioriteto procesams, vykdomiems sistemoje mašina. Jei jis važiuotų ant didelio. MAŽAS prietaisas, visi branduoliai būtų suvokiami kaip vienodi. Tai blogai, nes mažos galios branduoliai gali būti priversti paleisti intensyvias programas arba, dar blogiau, gali nutikti priešingai. Muzikos klausymosi dekodavimas gali būti atliekamas dideliame branduolyje, pavyzdžiui, be reikalo padidinant energijos suvartojimą. Štai kodėl mums reikia naujo planuotojo dideliems. LITTLE, kuris iš tikrųjų gali atpažinti ir efektyviai panaudoti branduolių skirtumus. Čia atsiranda Heterogeneous Multi-Processing (HMP) – standartinis įkėlimo planuoklis, kurį dabar veikia dauguma „Android“ telefonų.
Heterogeninis daugiafunkcis apdorojimas
Tai yra standartinis bet kokio didelio įkėlimo planavimo įrankis. LITTLE įrenginys, išleistas pastaraisiais metais, išskyrus „Google Pixel“. HMP naudojasi dideliu. MAŽA architektūra, pavedant žemą prioritetą, mažiau intensyvų darbą mažiems branduoliams, kurie sunaudoja mažiau energijos. HMP yra „saugus“, nes jis žino, kas turi patekti į didelius branduolius, o kas – į mažus branduolius, nepadarydamas klaidų. Tai tiesiog veikia ir reikalauja daug mažiau pastangų, kad ją būtų galima nustatyti kūrimo pusėje, nei kažkas panašaus į EAS, į kurią netrukus pateksime. HMP yra tik CFS išplėtimas, kad jis žinotų apie galią.
HMP nesiima spėlionių ir nenumato būsimų procesų. Tai gerai, bet todėl įrenginys negali būti toks sklandus kaip tie, kuriuose veikia EAS, ir dėl to jis sunaudoja šiek tiek daugiau baterijos. Tai galiausiai atveda mus prie Energy Aware Scheduling (EAS), kuris, tvirtai tikiu, yra ROM ir branduolio kūrimo ateitis, nes vis daugiau originalios įrangos gamintojų jį priima.
Energiją tausojantis planavimas
Energy Aware Scheduling (EAS) yra kitas svarbus dalykas, apie kurį kalba mūsų forumų vartotojai. Jei naudojate „OnePlus 3“ (arba „Google Pixel“, aišku), apie tai tikrai girdėjote forumuose. Jis pradėtas naudoti kartu su „Qualcomm Snapdragon 845“, taigi, jei turite vieną iš šių įrenginių, jau turite išmanųjį telefoną su EAS. EAS branduolių pavidalu, pvz RenderZenith ir ROM, pvz VertexOS ir PureFusion „OnePlus 3“ forumus užėmė audringai. Žinoma, „Google Pixel“ taip pat yra su EAS. Kas gi, žadant ilgesnį akumuliatoriaus veikimo laiką ir geresnį našumą?
Energiją tausojantis planavimas nėra toks paprastas, nes jis nėra universalus kiekvienam įrenginiui, pvz., CFS ar HMP. EAS reikia suprasti procesorių, kuriame jis veikia, remiantis energijos modeliu. Šiuos energijos modelius kuria inžinierių komandos, nuolatos bandančios ir stengiantis užtikrinti optimalų našumą. Kadangi „Snapdragon 820“ ir „821“ iš esmės yra vienodi, pasirinktiniai „OnePlus 3“ branduoliai naudoja „Google Pixel“ energijos modelį. Įrenginiai su „Snapdragon 845“ gali naudoti EAS, o „OnePlus 6“ tam tikru mastu tai daro. Jis nėra taip suderintas, kaip būtų „Google Pixel“ įrenginys, tačiau jis atlieka savo darbą. Štai pavyzdys, kaip, nepaisant to, kad OnePlus 6 turi geresnį procesorių su EAS, Pixel 2 XL vis tiek pranoksta jį sklandžiai. Abu šie vaizdai buvo paimti iš mūsų į greitį orientuota peržiūra „OnePlus 6“.
Jei jums sunku suprasti diagramas, galite pažvelgti į toliau pateiktą paveikslėlį. Viskas, kas viršija žalią liniją, rodo nukritusius kadrus ir, blogiausiu atveju, pastebimą mikčiojimą.
„OnePlus 6“ EAS diegimas yra įdomus, nes neatrodo, kad tai būtų visavertis diegimas, kaip galite rasti „Google Pixel“ su ta pačia SoC. Tvarkaraščio derinamieji įrenginiai taip pat nėra prasmingi, todėl tikriausiai tai paaiškina, kodėl jis nėra toks efektyvus, kaip tikitės. Tai itin konservatyvus energijos suvartojimas, nes daugumai darbų sistema teikia pirmenybę mažos galios branduoliams.
Derinamieji yra tiesiog parametrų rinkinys, perduodamas procesoriaus valdikliui, kuris keičia reguliatoriaus reakciją į tam tikras situacijas dažnio atžvilgiu. Tada planuotojas nusprendžia, kur jis pateikia užduotis skirtingiems procesoriams. „OnePlus 6“ derinamieji įrenginiai yra nustatyti taip, kad pirmenybė būtų teikiama darbui su mažos galios branduoliais. Nepadeda ir tai, kad „Google Pixel 2“ turi didžiulį įvesties padidinimą, todėl visi 8 branduoliai visą laiką yra prisijungę. „Google“ taip pat naudoja pertraukimo balansyras kuri padeda pašalinti rėmo kritimus ir pagerinti našumą.
Taigi, kaip veikia EAS? Kodėl jis toks efektyvus tik tam tikromis sąlygomis?
Energiją suvokiantis planavimas įveda poreikį naudoti energijos modelį ir, kaip minėta aukščiau, reikia daug išbandyti ir dirbti, kad jis būtų tobulas. EAS bando suvienyti tris skirtingas pagrindines branduolio dalis, kurios visos veikia nepriklausomai, o energijos modelis padeda jas suvienyti.
- Linux planuoklis (CFS, minėta aukščiau)
- Linux cpuidle
- Linux cpufreq
Visų 3 dalių sujungimas pagal planuoklį ir jų apskaičiavimas kartu suteikia energijos taupymo potencialą, nes skaičiuojant kartu, jos gali būti kuo efektyvesnės. „CPUIdle“ bando nuspręsti, kada CPU turėtų pereiti į tuščiosios eigos režimą, o „CPUFreq“ bando nuspręsti, kada padidinti arba sumažinti procesorių. Abiejų šių modulių pagrindinis tikslas – taupyti energiją. Negana to, jis suskirsto procesus į keturias cgrupes: aukščiausios programos, sistemos fono, priekinio plano ir fono. Užduotys, kurias reikia apdoroti, įtraukiamos į vieną iš šių kategorijų, tada kategorijai suteikiama procesoriaus galia, o darbas perduodamas skirtingiems procesoriaus branduoliams. top-app yra aukščiausias užbaigimo prioritetas, po kurio seka pirmas planas, fonas ir sistemos fonas. Fonas techniškai turi tokį patį prioritetą kaip sistemos fonas, tačiau sistemos fonas paprastai taip pat turi prieigą prie daugiau mažų branduolių. Tiesą sakant, „Energy Aware Scheduling“ perima pagrindines „Linux“ branduolio dalis ir visa tai sujungia į vieną procesą.
Pažadindama įrenginį, EAS parinks šerdį sekliausioje tuščiosios eigos būsenoje, sumažindama energiją, reikalingą įrenginiui pažadinti. Tai padeda sumažinti reikalingą įrenginio galią, nes, jei to nereikia, jis nepažadins didelio bloko. Apkrovos stebėjimas taip pat yra labai svarbi EAS dalis, todėl yra dvi galimybės. „Per-Entity Load Tracking“ (PELT) paprastai naudojamas apkrovos sekimui, tada informacija naudojama nustatant dažnumą ir kaip perduoti užduotis CPU. Taip pat gali būti naudojamas „Window Assisted Load Tracking“ (WALT), kuris naudojamas „Google Pixel“. Daugelis mūsų forumų EAS ROM, pvz., VertexOS, pasirenka naudoti WALT. Daugelis ROM išleis dvi branduolio versijas su WALT arba PELT, todėl vartotojas turi nuspręsti. WALT yra ryškesnis, procesoriaus dažnis yra aukštas, o PELT stengiasi išlikti nuoseklesnis. Apkrovos stebėjimo priemonė iš tikrųjų neturi įtakos procesoriaus dažniui, ji tiesiog nurodo sistemai, koks CPU naudojimas. Didesniam procesoriaus naudojimui reikalingas didesnis dažnis, todėl nuoseklus PELT bruožas yra tai, kad procesoriaus dažnis lėtai didėja arba mažėja. PELT dažniausiai nukrypsta prie didesnės procesoriaus apkrovos ataskaitų teikimo, todėl gali užtikrinti didesnį našumą už didesnę akumuliatoriaus kainą. Tačiau šiuo metu niekas negali pasakyti, kuri apkrovos sekimo sistema yra geresnė, nes abu apkrovos sekimo metodai yra nuolat pataisomi ir tobulinami.
Bet kuriuo atveju akivaizdu, kad, nepaisant naudojamo apkrovos sekimo metodo, efektyvumas didėja. Užuot tik apdoroję užduotis bet kuriame procesoriuje, užduotis analizuojama ir įvertinamas energijos kiekis, reikalingas jai vykdyti. Šis sumanus užduočių išdėstymas reiškia, kad užduotys atliekamos daug efektyviau, o visa sistema tampa greitesnė. EAS tikslas – pasiekti sklandesnę vartotojo sąsają su minimaliu energijos suvartojimu. Čia atsiranda kiti išoriniai komponentai, pvz., „schedtune“.
Schedtune kiekvienoje cgrupėje apibrėžiamas dviem derinamaisiais elementais, kurie užtikrina tikslesnę atliekamų užduočių kontrolę. Jis ne tik kontroliuoja užduočių paskirstymą keliuose procesoriuose, bet ir tai, ar suvokiama apkrova turėtų būti padidinta, kad laikui svarbios užduotys būtų atliktos greičiau. Tokiu būdu vartotojo naudojamos naujos programos ir paslaugos nesulėtės ir nesukels nereikalingų našumo problemų.
Nors energijos taupymo planavimas yra kitas didelis dalykas, taip pat galima teigti, kad jis jau čia ir buvo kurį laiką. Vis daugiau įrenginių patenka į pagrindinį energijos taupymo planavimą, todėl atėjo naujas mobiliojo apdorojimo efektyvumo amžius.
„Round-Robin“, CFS, HMP ir EAS privalumai ir trūkumai
Nors mano grafikos įgūdžiai yra žemesni, aš sukūriau vaizdą, kuriame turėtų būti apibendrinti kiekvieno iš šių planuotojų privalumai ir trūkumai.
Norėčiau ypač padėkoti XDA Recognized Contributor Mostafa Wael kurių paaiškinimai apie įvairius EAS aspektus labai padėjo sukurti šį straipsnį. Taip pat norėčiau padėkoti XDA pripažintam kūrėjui joshuous, XDA pripažintas kūrėjas AtvaizdavimasBroken ir Mostafa Wael už jo rašymą EAS. Tiems iš jūsų, kurie susidomėjo su EAS susijusiomis dalimis, Linaro turi daug EAS dokumentų, kuriuos galite perskaityti.