Kā EAS palīdz padarīt Google Pixel par ātrāko Android tālruni

Google Pixel viedtālruņi ir vieni no ātrākajiem Android tālruņiem tirgū. Energy Aware Scheduling (EAS) daļēji ir iemesls, kāpēc tālrunis ir tik gluds.

Tālā pagātnē, kad Linux bija tikai ideja Linusa Torvalda prātā, CPU bija viena kodola vienības, kurām bija vajadzīgs milzīgs enerģijas daudzums nelielai jaudai. Pirmais komerciāli pieejamais procesors Intel 4004 darbojās ar 740 kHz takts frekvenci vienā kodolā. Toreiz nebija nepieciešams slodzes plānotājs. Slodzes plānošana tika rezervēta divkodolu "behemotiem", piemēram, IBM Power 4, kas iznāca dažas desmitgades vēlāk. Tie darbojās ar 1,1 GHz līdz 1,9 GHz frekvenci, un bija nepieciešamas programmas un sistēma, lai pareizi izmantotu šos kodolus. Kā no šīm mašīnām nonācām līdz programmatūras algoritmiem, kas izmanto vairākus kodolus? Iespējams, iepriekš mūsu forumos esat dzirdējuši par Energy Aware Scheduling (EAS). Tas ir daļa no iemesla, kāpēc Google Pixel viedtālruņi darbojas tik labi. Kas ir tik lielisks EAS un kā mēs vispār nonācām līdz šim punktam? Pirms mēs varam to izskaidrot, mums jārunā par Linux ielādes plānotājiem.


Linux slodzes plānotāju attīstība

Apļa-robina plānošana

Round Robin apstrāde. Avots: Wikipedia

Round robin apstrāde ir vienkāršs jēdziens, kas izskaidrojams un saprotams, un vēl vienkāršāks, lai saprastu tās trūkumus. Round-robin izmanto laika sadalīšanu, lai piešķirtu laiku katram procesam. Pieņemsim, ka mūsu datorā darbojas četri procesi.

  • Process A
  • Process B
  • Process C
  • Process D

Tagad veiksim apļveida plānotāja darbu. Mēs piešķirsim 100 milisekundes (laika sadalīšana) katram procesam, pirms pāriet uz nākamo. Tas nozīmē, ka procesa A apstrāde var aizņemt 100 milisekundes, pēc tam tas pāriet uz procesu B un tā tālāk. Ja lietojumprogrammas uzdevums prasa 250 milisekundes, tai būs jāiziet šis process 3 reizes, lai pabeigtu darbu! Tagad mērogojiet to dažādos kodolos, lai process A un process B tiktu piešķirts 1. kodolam, bet process C un process D tiktu piešķirts 2. kodolam. Tas tika aizstāts ar O(n) plānošanu (kas bija kā apaļš, bet izmantoja laikmetus un ļāva dinamiski piešķirt laiks), pēc tam O(1) plānošana (minimizēta pieskaitāma, neierobežots procesa atbalsts), un visbeidzot Pilnīgi godīgs plānotājs (CFS). CFS tika apvienota Linux kodola versijā 2.6.23 2007. gada oktobrī. Kopš tā laika tas ir kapitāli remontēts un joprojām ir noklusējuma plānotājs Linux sistēmās.

Pilnīgi godīgs plānotājs

Pilnīgi godīgs plānotājs operētājsistēmā Android ir pastāvējis kopš tās pirmsākumiem un tiek izmantots nelielos. MAZĀS ierīces. Tas izmanto viedo algoritmu, lai noteiktu apstrādes secību, piešķirto laiku utt. Tas ir labi izpētīta plānošanas algoritma, ko sauc par "svērto godīgo rindu veidošanu", funkcionālas ieviešanas piemērs. Tas galvenokārt ir vērsts uz prioritātes nodrošināšanu sistēmas procesiem un citiem augstas prioritātes procesiem, kas darbojas sistēmā mašīna. Ja tas skrietu uz liela. MAZA ierīce, visi kodoli tiktu uztverti kā vienādi. Tas ir slikti, jo mazjaudas serdeņi var būt spiesti palaist intensīvas lietojumprogrammas vai, vēl ļaunāk, var notikt pretējais. Mūzikas klausīšanās dekodēšanu var veikt lielajā kodolā, piemēram, nevajadzīgi palielinot enerģijas patēriņu. Tāpēc mums ir nepieciešams jauns plānotājs lielajiem. LITTLE, kas faktiski var atpazīt un energoefektīvā veidā izmantot kodolu atšķirības. Šeit tiek izmantota Heterogeneous Multi-Processing (HMP) — standarta ielādes plānotājs, kas pašlaik darbojas lielākajā daļā Android tālruņu.

Heterogēna daudzkārtēja apstrāde

Šis ir standarta slodzes plānotājs jebkuram lielam. Pēdējos gados izlaista LITTLE ierīce, izņemot Google Pixel. HMP izmanto lielo. LITTLE arhitektūra, deleģējot zemu prioritāti, mazāk intensīvu darbu mazajiem kodoliem, kas patērē mazāk enerģijas. HMP ir "drošs", kur tas zina, kam vajadzētu nonākt lielajos kodolos un kam vajadzētu nonākt mazajos kodolos, nepieļaujot kļūdas. Tas vienkārši darbojas un prasa daudz mazāk pūļu, lai to iestatītu izstrādes pusē, nekā kaut kas līdzīgs EAS, ar kuru mēs nonāksim pēc brīža. HMP ir tikai CFS paplašinājums, lai padarītu to informētu par jaudu.

HMP neveic minējumus, kā arī neparedz nākotnes procesus. Tas ir labi, taču tāpēc ierīce nevar būt tik plūstoša kā tās, kurās darbojas EAS, un tāpēc tā patērē nedaudz vairāk akumulatora. Visbeidzot, mēs nonākam pie Energy Aware Scheduling (EAS), kas, manuprāt, ir ROM un kodola izstrādes nākotne, jo arvien vairāk OEM to pieņems.

Enerģiju apzinīga plānošana

Energy Aware Scheduling (EAS) ir nākamā lielā lieta, par ko runā lietotāji mūsu forumos. Ja izmantojat OnePlus 3 (vai, protams, Google Pixel), jūs noteikti par to esat dzirdējis forumos. Tas tika ieviests ar Qualcomm Snapdragon 845, tāpēc, ja jums ir kāda no šīm ierīcēm, jums jau ir viedtālrunis ar EAS. EAS kodolu veidā, piemēram, RenderZenith un ROM, piemēram, VertexOS un PureFusion OnePlus 3 forumus pārņēma vētra tās labākajā laikā. Protams, arī Google Pixel ir aprīkots ar EAS. Kāds ir solījums uzlabot akumulatora darbības laiku un labāku veiktspēju?

Energy Aware plānošana nav tik vienkārša, jo tā nav universāla visām ierīcēm, piemēram, CFS vai HMP. EAS ir nepieciešama izpratne par procesoru, kurā tas darbojas, pamatojoties uz enerģijas modeli. Šos enerģijas modeļus izstrādā inženieru komandas, kas pastāvīgi testē un strādā, lai nodrošinātu optimālu veiktspēju. Tā kā Snapdragon 820 un 821 būtībā ir vienādi, OnePlus 3 pielāgotie kodoli izmanto Google Pixel enerģijas modeli. Ierīces ar Snapdragon 845 var izmantot EAS, un OnePlus 6 zināmā mērā to dara. Tas nav tik noregulēts kā Google Pixel ierīce, taču tas paveic darbu. Šis ir piemērs tam, kā, neskatoties uz to, ka OnePlus 6 ir labāks procesors ar EAS, Pixel 2 XL joprojām pārspēj to gludumā. Abi šie attēli tika ņemti no mūsu uz ātrumu orientēts pārskats no OnePlus 6.

Ja jums ir grūtības saprast diagrammas, varat skatīt tālāk redzamo attēlu, lai iegūtu norādījumus. Viss, kas pārsniedz zaļo līniju, norāda uz nokritušiem kadriem un sliktākajā gadījumā par manāmu stostīšanos.

OnePlus 6 EAS ieviešana ir interesanta, jo šķiet, ka tā nav pilnvērtīga ieviešana, kā jūs varētu atrast Google Pixel ar tādu pašu SoC. Plānotāja noskaņojamajiem iestatījumiem arī nav lielas jēgas, tāpēc tas, iespējams, izskaidro, kāpēc tā veiktspēja nav tik efektīva, kā jūs varētu gaidīt. Tas ir ārkārtīgi konservatīvs enerģijas patēriņa ziņā, jo sistēmai lielākajai daļai darba prioritāte ir mazjaudas serdeņi.

Noskaņojamie ir vienkārši parametru kopums, kas tiek nodots CPU regulatoram, kas maina to, kā regulators reaģē uz noteiktām situācijām frekvences ziņā. Pēc tam plānotājs izlemj, kur tas izvieto uzdevumus dažādos procesoros. OnePlus 6 noskaņojamie elementi ir iestatīti tā, lai prioritāte būtu darbam ar mazjaudas kodoliem. Nepalīdz arī tas, ka Google Pixel 2 ir milzīgs ievades palielinājums, kas visu laiku uztur visus 8 kodolus tiešsaistē. Google izmanto arī pārtraukumu balansētājs kas palīdz noņemt rāmja kritienus un uzlabot veiktspēju.

Tātad, kā darbojas EAS? Kāpēc tas ir tik efektīvs tikai noteiktos apstākļos?

Energy Aware plānošana ievieš nepieciešamību izmantot enerģijas modeli, un, kā minēts iepriekš, ir nepieciešams daudz testēšanas un darba, lai tas būtu ideāls. EAS mēģina apvienot trīs dažādas kodola galvenās daļas, kuras visas darbojas neatkarīgi, un enerģijas modelis palīdz tās apvienot.

  • Linux plānotājs (CFS, minēts iepriekš)
  • Linux cpuidle
  • Linux cpufreq

Visu 3 daļu apvienošana zem plānotāja un to aprēķins kopā dod iespēju ietaupīt enerģiju, jo to aprēķins kopā ļauj tām būt pēc iespējas efektīvākām. CPUIdle mēģina izlemt, kad centrālajam procesoram jāpāriet dīkstāves režīmā, savukārt CPUFreq mēģina izlemt, kad palielināt vai samazināt CPU. Abu šo moduļu galvenais mērķis ir taupīt enerģiju. Ne tikai tas, ka pēc tam procesi tiek klasificēti četrās cgrupās, kas ir augstākās lietotnes, sistēmas fons, priekšplāns un fons. Uzdevumi, kas jāapstrādā, tiek ievietoti vienā no šīm kategorijām, un pēc tam kategorijai tiek piešķirta CPU jauda, ​​un darbs tiek deleģēts dažādos CPU kodolos. top-app ir augstākā pabeigšanas prioritāte, kam seko priekšplāns, fons un pēc tam sistēmas fons. Fonam tehniski ir tāda pati prioritāte kā sistēmas fonam, taču parasti sistēmas fonam ir arī piekļuve vairākiem maziem kodoliem. Būtībā Energy Aware Scheduling izmanto Linux kodola galvenās daļas un apvieno to vienā procesā.

Pamodinot ierīci, EAS izvēlēsies kodolu seklākajā dīkstāves stāvoklī, līdz minimumam samazinot ierīces pamodināšanai nepieciešamo enerģiju. Tas palīdz samazināt ierīces lietošanā nepieciešamo jaudu, jo tā nepamodinās lielo kopu, ja tas nav nepieciešams. Slodzes izsekošana ir arī ārkārtīgi svarīga EAS sastāvdaļa, un ir divas iespējas. "Per-Entity Load Tracking" (PELT) parasti tiek izmantots slodzes izsekošanai, pēc tam informācija tiek izmantota, lai noteiktu frekvences un to, kā deleģēt uzdevumus CPU. Var izmantot arī "Window-Assisted Load Tracking" (WALT), un tas tiek izmantots Google Pixel. Daudzi EAS ROM mūsu forumos, piemēram, VertexOS, izvēlas izmantot WALT. Daudzi ROM izlaidīs divas kodola versijas ar WALT vai PELT, tāpēc tas ir lietotāja ziņā. WALT ir intensīvāks, ar augstu CPU frekvences maksimumu, savukārt PELT cenšas saglabāt konsekventāku darbību. Slodzes izsekotājs faktiski neietekmē CPU frekvenci, tas tikai norāda sistēmai, kāds ir CPU lietojums. Lielākam CPU lietojumam ir nepieciešama augstāka frekvence, un tāpēc PELT konsekventa iezīme ir tāda, ka tas izraisa CPU frekvences lēnu palielināšanos vai samazināšanos. PELT mēdz novirzīties uz augstākas CPU slodzes ziņojumiem, tāpēc tas var nodrošināt augstāku veiktspēju par augstākām akumulatora izmaksām. Tomēr šobrīd neviens īsti nevar pateikt, kura slodzes izsekošanas sistēma ir labāka, jo abas slodzes izsekošanas metodes tiek nepārtraukti labotas un pilnveidotas.

Jebkurā gadījumā ir acīmredzams, ka neatkarīgi no izmantotās slodzes izsekošanas metodes efektivitāte palielinās. Tā vietā, lai tikai apstrādātu uzdevumus jebkurā procesorā, uzdevums tiek analizēts un tiek aprēķināts tā izpildei nepieciešamais enerģijas daudzums. Šī gudrā uzdevumu izvietošana nozīmē, ka uzdevumi tiek izpildīti daudz efektīvāk, vienlaikus padarot sistēmu ātrāku kopumā. EAS mērķis ir iegūt vienmērīgāko lietotāja interfeisu ar minimālu enerģijas patēriņu. Šeit tiek izmantoti citi ārējie komponenti, piemēram, schedtune.

Schedtune katrā cgrupā tiek definēts ar diviem regulējamiem iestatījumiem, kas nodrošina precīzāku izpildāmo uzdevumu kontroli. Tas ne tikai kontrolē uzdevumu sadalījumu pa vairākiem CPU, bet arī to, vai uztveramā slodze ir jāpalielina, lai nodrošinātu, ka ar laiku saistīti uzdevumi tiek izpildīti ātrāk. Tādā veidā lietotāja izmantotās priekšplāna lietojumprogrammas un pakalpojumi nepalēninās un neradīs nevajadzīgas veiktspējas problēmas.

Lai gan Energy Aware plānošana ir nākamā lielā lieta, var arī apgalvot, ka tas jau ir klāt un ir bijis kādu laiku. Arvien vairāk ierīču kļūst arvien populārākas, izmantojot Energy Aware plānošanu, ir klāt jauns mobilās apstrādes efektivitātes laikmets.

Round-Robin, CFS, HMP un EAS plusi un mīnusi

Lai gan manas grafikas prasmes ir zemākas, esmu izveidojis attēlu, kurā būtu jāapkopo katra šī plānotāja plusi un mīnusi.


Vēlos īpaši pateikties XDA atzītajam līdzstrādniekam Mostafa Vels kuru skaidrojumi par dažādiem EAS aspektiem ļoti palīdzēja šī raksta tapšanā. Es arī vēlos pateikties XDA atzītajam izstrādātājam joshuus, XDA atzītais izstrādātājs RenderBroken un Mostafa Wael par viņa rakstu par EAS. Tiem no jums, kuri interesējas par daļām, kas saistītas ar EAS, Linaro ir daudz dokumentācijas par EAS, ko varat izlasīt.