Jak může kompilátor Ark společnosti Huawei zlepšit výkon aplikací pro Android

Společnost Huawei zveřejnila klíčové podrobnosti týkající se fungování svého nového kompilátoru Ark a slibuje drastické zvýšení výkonu aplikací na Androidu. Přečtěte si další informace

Velká část nedávných rozhovorů kolem Huawei se točila kolem nešťastné politické situace společnosti kvůli a Výkonný příkaz USA, který mnoha společnostem omezoval obchodovat s Huawei. Důsledky takového klíčového rozhodnutí jsou příliš obrovské na to, abychom jim nevěnovali pozornost. Ale v alternativní realitě, kde tento výkonný příkaz neexistuje, by byl Huawei v centru pozornosti nedávno odhalil Ark Compiler, nejnovější inovaci, která tvrdí, že překlene mezeru ve výkonu aplikací mezi Androidem a iOS.

Než se ponoříme do toho, co je Ark Compiler, musíme udělat krok zpět a pochopit, co je to kompilátor a k čemu slouží v systému Android.

Stručná historie kompilátorů a interpretů na Androidu

Kompilátor je počítačový program, který překládá kód z jednoho jazyka do jiného jazyka, který je často nativním strojovým jazykem. To pak může být provedeno buď přímo počítačem, nebo prostřednictvím jiného programu (interpretu). Tento překlad je nezbytný, protože kód píšeme v programovacích jazycích čitelných pro člověka (jako Java a Kotlin), zatímco počítač rozumí pouze nativnímu strojovému jazyku (binární kód ve tvaru 1 a 0). Kompilátor tak slouží jako most mezi instrukcemi, které zapisuje člověk, a schopností stroje těmto instrukcím porozumět a následně je provést. Jak rychle a efektivně tato konverze a následná interpretace proběhnou, definuje tedy efektivitu kompilátoru zavedení přímé korelace mezi účinností kompilátoru a výkonem a účinností kódu a rozšířením, aplikace.

Dalvik VM

V počátcích Androidu operační systém využíval to, co se nazývalo Dalvik VM (interpret) spolu s kompilátorem JIT (just-in-time). Toto starší video z XDA TV Android Basics 101 série se dotýká Dalvik VM a nastavení JIT, které oba sloužily potřebám raných systémů Android, kde byla velká paměťová omezení. Dalvik VM vzal bajtový kód Java a převedl jej na strojový kód, když bylo potřeba kód spustit (proto Just-In-Time). To bylo nutné, protože úložný prostor v telefonech byl tehdy skutečným omezením, takže tento přístup umožňoval aplikacím pracovat s menšími velikostmi souborů v systému.

Kompilace a interpretace aplikací za běhu měla nevýhodu celkově pomalejšího výkonu aplikace, protože kompilace by probíhala současně s tím, když uživatel aplikaci používá.

Dalvik měl také omezení s mechanismem Garbage Collection. Dalvik společně sledoval každou alokaci paměti. Jakmile Dalvik zjistí, že část paměti již program nepoužívá, uvolní tuto paměť zpět na hromadu bez jakéhokoli zásahu programátora. Tento proces se nazývá Garbage Collection (GC) a jeho cílem je najít paměťové objekty v programu, ke kterému již není přístup, a poté získat zpět zdroje používané těmito objekty pro uvolnění paměti. Systém určuje, kdy je potřeba GC na kolektivním základě, takže vývojáři aplikací si nemohou vybrat, kdy se události GC vyskytují [ani v ART]. Pokud by tedy došlo k události GC uprostřed jakékoli intenzivní činnosti zpracování v aplikaci v popředí, systém by se pozastavil provedení procesu a zahájení GC, čímž se prodlouží doba zpracování a do systému se zavede znatelné „škubnutí“ uživatelů.

Tato a další omezení přiměla Google prozkoumat alternativní přístupy k rychlejšímu výkonu.

Android Runtime

S Androidem 4.4 KitKat představil Google ART (Android Runtime) ve formě náhledu s kompilátorem AOT (Ahead-Of-Time) a s Androidem 5.0 Lollipop Google upustil od Dalvika ve prospěch ART jako jediného dostupného interpreta. ART s AOT převedl kód do strojového jazyka v době instalace aplikace, místo aby čekal na provedení takové konverze, když je aplikace používána. Tento přístup tak zrychlil dobu spouštění aplikací, ale také přinesl nevýhody v podobě pomalejší instalace a zvýšeného využití místa na disku. Abyste to všechno vyvážili, Google adoptoval kombinace AOT, JIT a profilově řízené kompilace s ART na Androidu 7.0 Nougat, aby bylo zajištěno, že žádný jednotlivý faktor nebude drasticky ovlivněn.

Implementace Android ART

ART také pracoval na tom, aby byl Garbage Collection méně rušivý. Proces GC byl optimalizován tak, aby byl celkově rychlejší s méně pauzami (jedna krátká pauza oproti dvěma pauzám Dalvik), menší fragmentací a menším využitím paměti. Prezentace Google na Google I/O 2014 jde do podrobností a vysvětluje omezení GC a ART od Dalvik na tomto konci.

I s těmito změnami v průběhu let základním předpokladem přístupu společnosti Google bylo interpretovat kód během provádění a zároveň měnit načasování prvku kompilace (překladu). Garbage Collection také nadále představuje problém pro vývojáře aplikací, protože je inherentní rušivý a kolektivní. Výkon aplikací pro Android pravděpodobně trpí v důsledku toho, že i nadále dochází k režii.

Ark Compiler od Huawei

Huawei pracuje na vývoji efektivnějšího řešení a následně najal stovky odborníků v oboru. Výsledkem tohoto úsilí je Ark Compiler, o kterém Huawei tvrdí, že je vůbec prvním statickým kompilátorem který umožňuje přímý překlad do strojového jazyka, což zcela odstraňuje potřebu tlumočník. Ark Compiler byl také vyvinut s cílem maximalizovat efektivitu běhu pro Java a C, takže teoreticky by měl člověk vidět nejlepší výsledky s těmito jazyky.

Grafika od Huawei. Text přeložil uživatel XDA MyKeyVans.

Huawei představuje některé klíčové funkce kompilátoru Ark, jak je uvedeno níže:

  • Kompilační techniky jako AOT a JIT mohou převést některé programy do strojového kódu a spustit je přímo na CPU, ale tyto techniky se nedokážou zcela odpoutat od tlumočníka a omezení s tím spojených. Ark Compiler využívá statickou kompilaci, která jej umožňuje odpojit se od dynamického interpretu, čímž otevírá možnost zvýšení výkonu aplikace „skoky a meze."
  • Statická kompilace má potenciální nevýhodu v tom, že je příliš rigidní a není schopna provádět úpravy, které může dynamický kompilátor provádět během provádění. Huawei tvrdí, že statická kompilace Ark Compiler to řeší.bezproblémovým převodem dynamických funkcí v programovacím jazyce do strojového kódu."
  • Stávající procesy kompilace probíhají během nebo po instalaci balíčku aplikace do mobilního zařízení. Ark Compiler je navržen pro nasazení během vývoje softwaru, což, jak předpokládáme, pomáhá odstranit časovou režii během instalace a spouštění. Předpokládáme, že vývojáři aplikací by byli schopni přímo zkompilovat různé jazyky do nativního strojového kódu během aplikace vývojový proces a výsledný APK by tak nemusel vyžadovat interakci s tlumočníkem nebo virtuálním strojem funkce. To by teoreticky snížilo například režijní náklady související s JNI.
  • Ark Compiler také mění kolektivní povahu Garbage Collection. Umožňuje, aby se události GC vyskytovaly odděleně pro různá vlákna Java. Tento rozdělený přístup tvrdí, že nabízí méně nepříjemností v aplikacích v popředí.

V důsledku těchto změn může Ark Compiler zdánlivě zlepšit plynulost provozu systému Android až o 24 %, rychlost odezvy až o 44 % a plynulost aplikací třetích stran až o 60 %, která tvrdí, že přináší výkon aplikací pro Android na stejné úrovni jako v systému iOS.

Ark Compiler je aktuálně zkompilován a optimalizován pro architekturu čipů ARM. Huawei doufá, že v budoucnu bude společný návrh hardwaru a softwaru pracovat na maximalizaci schopností čipu Kirin.

Ark Compiler podporuje standardní použití Java, což umožňuje přímou kompilaci aplikací třetích stran, aniž by musel vývojář aplikace provádět jakékoli úpravy kódu. Ark Compiler také umožňuje "úpravy struktury kódu" pro další vylepšení výkonu a paměti. Huawei se rozhodl udělat z Ark Compiler systém s otevřeným zdrojovým kódem, který by umožnil vývojářům třetích stran adoptovat a přizpůsobit technologii jejich potřebám a podpořit její přijetí u vývojářů aplikací a mobilních telefonů výrobci.

Zatímco Huawei nezmiňuje žádné nevýhody kompilátoru Ark, lze očekávat velké velikosti aplikací přinejmenším, ale to by nemělo představovat žádné problémy na zařízeních současné generace, která přicházejí s dostatkem úložný prostor. Očekáváme také, že Ark Compiler nebude k dispozici pro všechny architektury CPU, protože problémy s kompatibilitou společnosti Google nejsou bolehlavem Huawei. Ark Compiler je navržen pro použití během vývoje a ne během instalace; to naznačuje, že Huawei možná upravil způsob nasazování a instalace aplikací na zařízeních Android a také mohl pracovat na vlastním návrhu APK. Pokud je to správné, mohlo by to představovat velký problém s kompatibilitou v ekosystému a trvalo by dlouho, než by se to stalo standardní funkcí Androidu, pokud vůbec.

Nekompilování na zařízení uživatele také vyvolává velkou otázku ohledně optimalizace. ART v současné době optimalizuje na bázi mikroarchitektury, což znamená, že výsledný binární soubor by byl odlišné pro zařízení Snapdragon oproti zařízení Exynos, nebo dokonce pro Snapdragon 845 oproti Snapdragonu 625. Tento přístup má smysl pro výrobce, kteří mají plnou kontrolu nad SoC, jako jsou Apple a Huawei. Avšak vzhledem k tomu, že zbytek světa Androidu používá mnoho různých SoC, vynucení obecné optimalizace pro použití napříč zařízeními bude opět překážkou pro standardizaci kompilátoru Ark. V důsledku toho neočekávejte, že Ark Compiler dorazí na vaši oblíbenou vlastní ROM v brzké době.

Pro upřesnění, Ark Compiler je vyvinut pro práci s Androidem a Huawei v souvislosti s ním nic nezmínil údajný homebrew OS a jeho kompatibilitu s Ark Compiler, takže v tomto ohledu nečiníme žádné předpoklady.

Huawei plánuje uspořádat dvě velké konference věnované vývojářům a většímu ekosystému. Jedná se o Huawei Device China Developers Conference a Green Alliance China Developers Conference. Obě akce se budou zabývat konkrétními problémy s otevřeným zdrojovým kódem souvisejícím s kompilátorem Ark od společnosti Huawei, ve snaze co nejvíce zpřístupnit výhody této technologie.


Zvláštní poděkování patří XDA Senior Recognized Contributor Dees_Troy a uznávaný vývojář arter97 za jejich pomoc a příspěvky.

Poznámka: Huawei/Honor přestaly poskytovat oficiální kódy pro odblokování bootloaderu pro svá zařízení. Zavaděče jejich zařízení proto nelze odemknout, což znamená, že uživatelé nemohou rootovat ani instalovat vlastní ROM.