Kako Huaweijev Ark Compiler može poboljšati izvedbu Android aplikacije

Huawei je objavio ključne pojedinosti o radu svog novog Ark Compilera, obećavajući drastično poboljšanje performansi aplikacija na Androidu. Čitajte dalje za više

Velik dio nedavnih razgovora oko Huaweija vrtio se oko nesretne političke situacije u kojoj se nalazi tvrtka zbog Američka izvršna uredba koja je mnogim tvrtkama zabranila poslovanje s Huaweijem. Posljedice takve ključne odluke previše su goleme da im se ne obrati pozornost. Ali u alternativnoj stvarnosti u kojoj ova izvršna uredba ne postoji, Huawei bi bio u središtu pozornosti zbog svoje nedavno je otkrio Ark Compiler, najnoviju inovaciju koja tvrdi da će premostiti jaz u performansama aplikacija između Androida i iOS.

Prije nego što zaronimo u to što je Ark Compiler, moramo napraviti korak unatrag i razumjeti što je kompilator i svrhu kojoj služi u sustavu Android.

Kratka povijest prevoditelja i tumača na Androidu

Kompajler je računalni program koji prevodi kod s jednog jezika na drugi jezik, koji je često izvorni strojni jezik. To se zatim može izvršiti izravno na računalu ili se može izvršiti putem drugog programa (prevoditelja). Ovaj prijevod je neophodan jer pišemo kod u programskim jezicima čitljivim ljudima (kao što su Java i Kotlin), dok računalo razumije samo izvorni strojni jezik (binarni kod u obliku 1 i 0). Kompajler tako služi kao most između uputa koje piše čovjek i sposobnosti stroja da razumije i zatim izvrši te upute. Koliko brzo i učinkovito će se ova konverzija i kasnija interpretacija odvijati određuje učinkovitost prevoditelja uvođenje izravne korelacije između učinkovitosti prevoditelja i izvedbe i učinkovitosti koda, i proširenjem, aplikacije.

Dalvik VM

U ranim danima Androida, OS je koristio ono što se zvalo Dalvik VM (interpretator) zajedno s JIT (just-in-time) kompajlerom. Ovaj stariji videozapis iz Android Basics 101 za XDA TV Serija se dotiče Dalvik VM i JIT postava, a oba su služila potrebama ranih Android sustava gdje su memorijska ograničenja bila obilna. Dalvik VM uzeo je Java bajt kod i pretvorio ga u strojni kod kad i kada je kod trebalo izvršiti (dakle Just-In-Time). To je bilo neophodno jer je prostor za pohranu u telefonima tada bio pravo ograničenje, pa je ovaj pristup aplikacijama omogućio rad s manjim veličinama datoteka u sustavu.

Sastavljanje i tumačenje aplikacija tijekom izvođenja imalo je nedostatak ukupne sporije izvedbe aplikacije jer bi se kompilacija odvijala dok korisnik koristi aplikaciju.

Dalvik je također imao ograničenja sa svojim mehanizmom za sakupljanje smeća. Dalvik je zajedno pratio svaku dodjelu memorije. Jednom kada Dalvik utvrdi da program više ne koristi dio memorije, oslobađa ovu memoriju natrag u gomilu bez ikakve intervencije programera. Taj se proces naziva Zbirka smeća (GC), a cilj mu je pronaći memorijske objekte u programu kojima se više ne pristupa i zatim povratiti resurse koje ti objekti koriste za oslobađanje memorije. Sustav određuje kada je potreban GC na kolektivnoj osnovi, tako da programeri aplikacija ne mogu birati kada će se dogoditi GC događaji [čak ni u ART-u]. Dakle, ako se GC događaj dogodi usred bilo koje intenzivne aktivnosti obrade na aplikaciji u prvom planu, sustav bi pauzirao izvršenje procesa i početak GC-a, čime se povećava vrijeme obrade i uvodi primjetan "jank" u korisnika.

Ova i druga ograničenja potaknula su Google da istraži alternativne pristupe za bržu izvedbu.

Android Runtime

Uz Android 4.4 KitKat, Google je predstavio ART (Android Runtime) u obliku pregleda s AOT (Ahead-Of-Time) kompajlerom i s Androidom 5.0 Lollipop, Google je odustao od Dalvika u korist ART-a kao jedinog dostupnog tumača. ART s AOT-om pretvara kod u strojni jezik u trenutku instalacije aplikacije, umjesto da čeka da izvrši takvu konverziju kada je aplikacija u upotrebi. Ovaj pristup je stoga ubrzao vrijeme pokretanja aplikacije, ali je također uveo nedostatke u obliku sporijeg vremena instalacije i povećane upotrebe prostora na disku. Kako bi se sve uravnotežilo, Google usvojeni kombinacija AOT-a, JIT-a i profilno vođene kompilacije s ART-om na Androidu 7.0 Nougat, kako bi se osiguralo da ni na jedan čimbenik ne utječe drastično.

Androidova ART implementacija

ART je također radio na tome da Garbage Collection bude manje nametljiv. GC proces je optimiziran da bude brži u cjelini s manje pauza (jedna kratka pauza u odnosu na Dalvikove dvije pauze), manjom fragmentacijom i manjim korištenjem memorije. Googleova prezentacija na Google I/O 2014 ide u detalje objašnjavajući ograničenja Dalvik GC i ART poboljšanja u tom smislu.

Čak i uz te promjene tijekom godina, osnovna premisa Googleovog pristupa uključivala je tumačenje koda tijekom izvođenja uz mijenjanje vremena elementa kompajliranja (prevođenja). Odvoz smeća također je i dalje bolna točka za programere aplikacija zbog svoje inherentne prekidajuće i kolektivne prirode. Vjerojatno zbog toga trpi izvedba Androidove aplikacije jer i dalje postoje opći troškovi.

Ark Compiler tvrtke Huawei

Huawei je radio na razvoju učinkovitijeg rješenja i stoga je angažirao stotine stručnjaka na tom području. Rezultat ovog napora je Ark Compiler, za koji Huawei tvrdi da je prvi statički kompilator ikada koji omogućuje izravno prevođenje u strojni jezik, potpuno uklanjajući potrebu za tumač. Ark Compiler također je razvijen s ciljem maksimiziranja učinkovitosti rada za Javu i C, tako da bi se teoretski trebali vidjeti najbolji rezultati s ovim jezicima.

Grafika tvrtke Huawei. Tekst preveo XDA korisnik MyKeyVans.

Huawei predstavlja neke ključne značajke Ark Compiler-a kako slijedi:

  • Tehnike kompilacije kao što su AOT i JIT mogu pretvoriti neke programe u strojni kod i pokrenuti ih izravno na CPU-u, ali te se tehnike ne mogu potpuno odvojiti od tumača i s njim povezanih ograničenja. Ark Compiler koristi statičku kompilaciju, koja mu omogućuje da se odvoji od dinamičkog tumača, otvarajući mogućnost poboljšanja performansi aplikacije putem "skokovima i granicama."
  • Statička kompilacija ima potencijalnu lošu stranu jer je previše kruta i ne može izvršiti prilagodbe koje dinamički kompajler može napraviti tijekom izvođenja. Huawei tvrdi da statička kompilacija Ark Compiler-a rješava ovo "besprijekornim prevođenjem dinamičkih značajki u programskom jeziku u strojni kod."
  • Postojeći procesi kompilacije odvijaju se tijekom ili nakon instalacije paketa aplikacije na mobilnom uređaju. Ark Compiler dizajniran je za implementaciju tijekom razvoja softvera, za koji pretpostavljamo da pomaže u uklanjanju vremenskih troškova tijekom instalacije i izvođenja. Pretpostavljamo da bi programeri aplikacija mogli izravno prevesti različite jezike u izvorni strojni kod tijekom aplikacije proces razvoja, a rezultirajućem APK-u stoga nije potrebna interakcija s tumačem ili virtualnim strojem funkcija. To bi teoretski smanjilo režijske troškove povezane s JNI, na primjer.
  • Ark Compiler također mijenja kolektivnu prirodu Garbage Collectiona. Omogućuje da se GC događaji događaju odvojeno za različite Java niti. Ovaj podijeljeni pristup tvrdi da nudi manje smetnji u aplikacijama u prvom planu.

Kao rezultat ovih promjena, Ark Compiler može naizgled poboljšati tečnost rada Android sustava do 24%, brzinu odziva do 44%, a glatkoću aplikacija trećih strana do 60%, tvrdeći da će izvedbu Android aplikacije dovesti na istu razinu kao ona na iOS-u.

Ark Compiler trenutno je kompiliran i optimiziran za arhitekturu ARM čipa. Huawei se nada da će u budućnosti zajednički dizajn hardvera i softvera raditi na maksimiziranju mogućnosti Kirin čipa.

Ark Compiler podržava standardnu ​​upotrebu Jave, dopuštajući izravnu kompilaciju aplikacija trećih strana bez potrebe da razvojni programer aplikacije izvrši bilo kakve izmjene koda. Ark Compiler također dopušta "prilagodbe strukture koda" za daljnja poboljšanja performansi i memorije. Huawei je odlučio napraviti Ark Compiler sustavom otvorenog koda, koji bi programerima trećih strana omogućio usvajanje i prilagoditi tehnologiju svojim potrebama, pospješujući njezino usvajanje kod programera aplikacija i mobilnih telefona proizvođači.

Iako Huawei ne spominje nedostatke Ark Compiler-a, mogu se očekivati ​​velike veličine aplikacije odmah barem, ali to ne bi trebalo predstavljati probleme na uređajima trenutne generacije koji dolaze s dovoljno skladištenje. Također očekujemo da Ark Compiler neće biti dostupan za sve CPU arhitekture, budući da Googleovi problemi s kompatibilnošću nisu Huaweijeva glavobolja. Ark Compiler je dizajniran za korištenje tijekom razvoja, a ne tijekom instalacije; ovo predstavlja indikaciju da je Huawei možda modificirao način na koji se aplikacije postavljaju i instaliraju na Android uređajima, a također je možda radio na vlastitom dizajnu APK-a. Ako je točno, ovo bi moglo predstavljati veliki problem kompatibilnosti u ekosustavu i proći će dosta vremena prije nego što postane standardna Android značajka, ako ikada.

Nesastavljanje na korisničkom uređaju također postavlja veliko pitanje optimizacije. ART trenutno optimizira na temelju mikro-arhitekture, što znači da bi rezultirajuća binarna datoteka bila različito za Snapdragon uređaj u odnosu na Exynos uređaj ili čak za Snapdragon 845 u odnosu na Snapdragon 625. Ovaj pristup ima smisla za proizvođače koji imaju potpunu kontrolu nad SoC-om, poput Applea i Huaweija. Međutim, s ostatkom svijeta Androida koji koristi mnogo različitih SoC-ova, prisiljavanje na korištenje generičke optimizacije na više uređaja ponovno će biti prepreka standardizaciji Ark Compilera. Shodno tome, nemojte očekivati ​​da će Ark Compiler uskoro stići na vaš omiljeni prilagođeni ROM.

Radi pojašnjenja, Ark Compiler razvijen je za rad s Androidom, a Huawei nije spomenuo ništa u vezi sa svojim navodni homebrew OS i njegova kompatibilnost s Ark Compilerom, tako da ne činimo nikakve pretpostavke u tom smislu.

Huawei planira održati dvije velike konferencije posvećene programerima i širem ekosustavu. To su Huawei Device China Developers Conference i Green Alliance China Developers Conference. Oba događaja bavit će se specifičnim problemima otvorenog koda vezanim uz Huaweijev Ark Compiler, u nastojanju da se prednosti ove tehnologije učine što dostupnijima.


Posebna zahvala XDA Senior Recognised Contributor Dees_Troy i priznati programer arter97 za njihovu pomoć i doprinose.

Napomena: Huawei/Honor su prestali pružati službene kodove za otključavanje pokretačkog programa za svoje uređaje. Stoga se bootloaderi njihovih uređaja ne mogu otključati, što znači da korisnici ne mogu rootati ili instalirati prilagođene ROM-ove.