Ako môže kompilátor Ark od spoločnosti Huawei zlepšiť výkon aplikácií pre Android

Spoločnosť Huawei zverejnila kľúčové podrobnosti týkajúce sa fungovania svojho nového kompilátora Ark, pričom sľubuje drastické zvýšenie výkonu aplikácií v systéme Android. Čítajte ďalej

Veľká časť nedávnych rozhovorov okolo Huawei sa točila okolo nešťastnej politickej situácie spoločnosti z dôvodu a Výkonný príkaz USA, ktorý obmedzoval mnoho spoločností v obchodovaní s Huawei. Dôsledky takéhoto kľúčového rozhodnutia sú príliš obrovské na to, aby sme im nevenovali pozornosť. Ale v alternatívnej realite, kde tento výkonný príkaz neexistuje, by bol Huawei v centre pozornosti nedávno odhalil Ark Compiler, najnovšiu inováciu, ktorá tvrdí, že preklenie medzeru vo výkone aplikácií medzi Androidom a iOS.

Predtým, ako sa ponoríme do toho, čo je Ark Compiler, musíme urobiť krok späť a pochopiť, čo je kompilátor a na aký účel slúži v systéme Android.

Stručná história kompilátorov a tlmočníkov v systéme Android

Kompilátor je počítačový program, ktorý prekladá kód z jedného jazyka do iného jazyka, ktorý je často pôvodným strojovým jazykom. To potom môže vykonať buď priamo počítač, alebo to môže vykonať iný program (interpret). Tento preklad je potrebný, pretože kód píšeme v ľudsky čitateľných programovacích jazykoch (ako Java a Kotlin), zatiaľ čo počítač rozumie iba natívnemu strojovému jazyku (binárny kód vo forme 1 a 0). Kompilátor teda slúži ako most medzi inštrukciami, ktoré zapisuje človek, a schopnosťou stroja tieto inštrukcie pochopiť a následne vykonať. To, ako rýchlo a efektívne prebehne táto konverzia a následná interpretácia, definuje efektivitu kompilátora, teda zavedenie priamej korelácie medzi efektívnosťou kompilátora a výkonom a efektívnosťou kódu a rozšírením, aplikácie.

Dalvik VM

V prvých dňoch Androidu OS využíval to, čo sa nazývalo Dalvik VM (interpret) spolu s kompilátorom JIT (just-in-time). Toto staršie video z XDA TV Android Basics 101 séria sa dotýka nastavenia Dalvik VM a JIT, ktoré obe slúžili potrebám skorých systémov Android, kde boli obmedzenia pamäte bohaté. Dalvik VM vzal bajtový kód Java a previedol ho na strojový kód vtedy, keď bolo potrebné kód spustiť (preto Just-In-Time). Bolo to potrebné, pretože úložný priestor v telefónoch bol vtedy skutočným obmedzením, takže tento prístup umožnil aplikáciám pracovať s menšími veľkosťami súborov v systéme.

Kompilácia a interpretácia aplikácií za behu mala nevýhodu v celkovom pomalšom výkone aplikácie, keďže kompilácia prebiehala súčasne s tým, keď používateľ aplikáciu používa.

Dalvik mal tiež obmedzenia s mechanizmom zberu odpadu. Dalvik kolektívne sledoval každú alokáciu pamäte. Akonáhle Dalvik zistí, že program už časť pamäte nepoužíva, uvoľní túto pamäť späť na hromadu bez akéhokoľvek zásahu programátora. Tento proces sa nazýva Garbage Collection (GC) a jeho cieľom je nájsť pamäťové objekty v programe, ktorý už nie je prístupný, a potom získať späť zdroje, ktoré tieto objekty používajú na uvoľnenie pamäte. Systém určuje, kedy je GC potrebný na kolektívnom základe, takže vývojári aplikácií si nemôžu vybrať, kedy sa udalosti GC vyskytnú [ani v ART]. Ak by sa teda udalosť GC vyskytla uprostred akejkoľvek intenzívnej činnosti spracovania v aplikácii v popredí, systém by sa pozastavil vykonanie procesu a začatie GC, čím sa predĺži čas spracovania a do systému sa zavedie znateľné „trhnutie“ používateľov.

Tieto a ďalšie obmedzenia prinútili Google preskúmať alternatívne prístupy k rýchlejšiemu výkonu.

Android Runtime

Google predstavil Android 4.4 KitKat ART (Android Runtime) vo forme ukážky s kompilátorom AOT (Ahead-Of-Time) a so systémom Android 5.0 Lollipop Google upustil od Dalvika v prospech ART ako jediného dostupného interpreta. ART s AOT previedol kód do strojového jazyka v čase inštalácie aplikácie, namiesto toho, aby čakal na takúto konverziu, keď sa aplikácia používa. Tento prístup teda zrýchlil časy spustenia aplikácie, ale priniesol aj nevýhody v podobe pomalších inštalačných časov a zvýšeného využitia miesta na disku. Aby to všetko vyvážilo, Google prijali kombinácia AOT, JIT a profilom riadenej kompilácie s ART v systéme Android 7.0 Nougat, aby sa zabezpečilo, že žiadny jednotlivý faktor nebude drasticky ovplyvnený.

Implementácia Androidu ART

ART tiež pracoval na tom, aby bol Garbage Collection menej rušivý. Proces GC bol optimalizovaný tak, aby bol celkovo rýchlejší s menším počtom prestávok (jedna krátka pauza oproti dvom pauzám od Dalvika), menšou fragmentáciou a menšou spotrebou pamäte. Prezentácia spoločnosti Google na veľtrhu Google I/O 2014 ide do detailov a vysvetľuje obmedzenia GC a ART od Dalvik v tomto smere.

Aj napriek týmto zmenám v priebehu rokov základným predpokladom prístupu spoločnosti Google bola interpretácia kódu počas vykonávania pri zmene načasovania prvku kompilácie (prekladu). Garbage Collection je tiež naďalej problémom pre vývojárov aplikácií, pretože má inherentnú prerušujúcu a kolektívnu povahu. Výkon aplikácií pre Android pravdepodobne trpí v dôsledku toho, že stále dochádza k režijným nákladom.

Ark Compiler od Huawei

Huawei pracuje na vývoji efektívnejšieho riešenia a následne najala stovky odborníkov v tejto oblasti. Výsledkom tohto úsilia je Ark Compiler, o ktorom Huawei tvrdí, že je vôbec prvým statickým kompilátorom ktorý umožňuje priamy preklad do strojového jazyka, čím sa úplne odstraňuje potreba tlmočník. Ark Compiler bol tiež vyvinutý s cieľom maximalizovať efektivitu chodu pre Java a C, takže teoreticky by sme mali vidieť najlepšie výsledky s týmito jazykmi.

Grafika od Huawei. Text preložil užívateľ XDA MyKeyVans.

Huawei predstavuje niektoré kľúčové funkcie kompilátora Ark, ako je uvedené nižšie:

  • Kompilačné techniky ako AOT a JIT dokážu previesť niektoré programy do strojového kódu a spustiť ich priamo na CPU, ale tieto techniky sa nedokážu úplne odpútať od tlmočníka a s tým spojených obmedzení. Ark Compiler využíva statickú kompiláciu, ktorá mu umožňuje oddeliť sa od dynamického tlmočníka, čím sa otvára možnosť zvýšiť výkon aplikácie „míľovými krokmi."
  • Statická kompilácia má potenciálnu nevýhodu v tom, že je príliš rigidná a nie je schopná vykonať úpravy, ktoré môže dynamický kompilátor vykonať počas vykonávania. Huawei tvrdí, že statická kompilácia Ark Compiler to rieši.bezproblémovým prekladom dynamických funkcií v programovacom jazyku do strojového kódu."
  • Existujúce kompilačné procesy prebiehajú počas alebo po inštalácii balíka aplikácie na mobilné zariadenie. Ark Compiler je určený na nasadenie počas vývoja softvéru, o ktorom predpokladáme, že pomáha odstraňovať časovú réžiu počas inštalácie a spúšťania. Predpokladáme, že vývojári aplikácií budú schopní priamo kompilovať rôzne jazyky do natívneho strojového kódu počas aplikácie vývojový proces a výsledný súbor APK by tak nemusel potrebovať interakciu s tlmočníkom alebo virtuálnym strojom funkciu. To by teoreticky znížilo napríklad režijné náklady súvisiace s JNI.
  • Ark Compiler tiež mení kolektívny charakter Garbage Collection. Umožňuje, aby sa udalosti GC vyskytovali oddelene pre rôzne vlákna Java. Tento rozdelený prístup tvrdí, že ponúka menej zbytočností v aplikáciách v popredí.

V dôsledku týchto zmien môže Ark Compiler zdanlivo zlepšujú plynulosť prevádzky systému Android až o 24 %, rýchlosť odozvy až o 44 % a plynulosť aplikácií tretích strán až o 60 %, ktorá tvrdí, že prináša výkon aplikácií pre Android na rovnakej úrovni ako v systéme iOS.

Kompilátor Ark je v súčasnosti skompilovaný a optimalizovaný pre architektúru čipov ARM. Huawei dúfa, že v budúcnosti bude spoločný dizajn hardvéru a softvéru pracovať na maximalizácii možností čipu Kirin.

Ark Compiler podporuje štandardné používanie Java, čo umožňuje priamu kompiláciu aplikácií tretích strán bez toho, aby vývojár aplikácie musel vykonať akúkoľvek úpravu kódu. Ark Compiler tiež umožňuje "úpravy štruktúry kódu" pre ďalšie vylepšenia výkonu a pamäte. Huawei sa rozhodol urobiť z Ark Compiler systém s otvoreným zdrojovým kódom, ktorý by umožnil vývojárom tretích strán osvojiť si ho a prispôsobiť technológiu ich potrebám a podporiť jej prijatie vývojármi aplikácií a mobilných telefónov výrobcov.

Aj keď spoločnosť Huawei nespomína žiadne nevýhody kompilátora Ark, možno očakávať veľké veľkosti aplikácií prinajmenšom, ale to by nemalo predstavovať žiadne problémy na zariadeniach súčasnej generácie, ktorých je dostatok skladovanie. Očakávame tiež, že Ark Compiler nebude k dispozícii pre všetky architektúry CPU, pretože problémy s kompatibilitou spoločnosti Google nie sú problémom Huawei. Ark Compiler je navrhnutý na použitie počas vývoja a nie počas inštalácie; to naznačuje, že Huawei možno upravil spôsob nasadzovania a inštalácie aplikácií na zariadeniach so systémom Android a tiež mohol pracovať na svojom vlastnom dizajne APK. Ak je to správne, mohlo by to predstavovať veľký problém s kompatibilitou v ekosystéme a trvalo by dlho, kým by sa to stalo štandardnou funkciou systému Android, ak vôbec.

Nekompilovanie na zariadení používateľa tiež vyvoláva veľkú otázku o optimalizácii. ART sa v súčasnosti optimalizuje na báze mikroarchitektúry, čo znamená, že výsledný binárny súbor by bol odlišné pre zariadenie Snapdragon oproti zariadeniu Exynos, alebo dokonca pre Snapdragon 845 oproti Snapdragonu 625. Tento prístup má zmysel pre výrobcov, ktorí majú plnú kontrolu nad SoC, ako sú Apple a Huawei. Keďže však zvyšok sveta Androidu používa mnoho rôznych SoC, vynútenie všeobecnej optimalizácie, ktorá sa má používať naprieč zariadeniami, bude opäť prekážkou pre štandardizáciu kompilátora Ark. V dôsledku toho neočakávajte, že Ark Compiler dorazí na vašu obľúbenú vlastnú ROM tak skoro.

Pre objasnenie, kompilátor Ark je vyvinutý pre prácu s Androidom a Huawei v súvislosti s ním nič nespomenul údajný homebrew OS a jeho kompatibilita s Ark Compiler, takže v tomto smere nerobíme žiadne predpoklady.

Huawei plánuje usporiadať dve veľké konferencie venované vývojárom a väčšiemu ekosystému. Ide o konferenciu Huawei Device China Developers Conference a Green Alliance China Developers Conference. Obe podujatia sa budú zaoberať špecifickými problémami s otvoreným zdrojovým kódom súvisiacim s kompilátorom Ark od spoločnosti Huawei v snahe čo najviac sprístupniť výhody tejto technológie.


Špeciálne poďakovanie patrí uznávanému prispievateľovi XDA Dees_Troy a uznávaný vývojár tepna97 za ich pomoc a vstupy.

Poznámka: Huawei/Honor prestali poskytovať oficiálne kódy na odomknutie zavádzača pre svoje zariadenia. Preto sa bootloadery ich zariadení nedajú odomknúť, čo znamená, že používatelia nemôžu rootovať ani inštalovať vlastné ROM.