Huawei heeft belangrijke details vrijgegeven over de werking van zijn nieuwe Ark Compiler, die belooft de app-prestaties op Android drastisch te verbeteren. Lees verder voor meer informatie
Een groot deel van de recente gesprekken rond Huawei gingen over de ongelukkige politieke situatie van het bedrijf vanwege een Een Amerikaans uitvoeringsbesluit dat veel bedrijven verbood zaken te doen met Huawei. De gevolgen van een dergelijke cruciale beslissing zijn veel te groot om er niet op te letten. Maar in een alternatieve realiteit waarin dit uitvoerend bevel niet bestaat, zou Huawei daarvoor in de schijnwerpers hebben gestaan heeft onlangs Ark Compiler onthuld, de nieuwste innovatie die beweert de prestatiekloof tussen Android en Android te overbruggen iOS.
Voordat we ingaan op wat Ark Compiler is, moeten we een stap terug doen en begrijpen wat een compiler is en welk doel deze dient in het Android-systeem.
Korte geschiedenis van compilers en tolken op Android
Een compiler is een computerprogramma dat code van de ene taal naar een andere taal vertaalt, vaak in de moedertaal van de machine. Dit kan dan direct door de computer worden uitgevoerd of via een ander programma (interpreter). Deze vertaling is nodig omdat we code schrijven in voor mensen leesbare programmeertalen (zoals Java en Kotlin), terwijl de computer alleen de eigen machinetaal begrijpt (binaire code in de vorm van 1-en en 0-en). De compiler dient dus als brug tussen de instructies die een mens schrijft en het vermogen van de machine om die instructies te begrijpen en vervolgens uit te voeren. Hoe snel en efficiënt deze conversie en daaropvolgende interpretatie plaatsvinden, bepaalt dus de efficiëntie van de compiler het introduceren van een directe correlatie tussen de efficiëntie van de compiler en de prestaties en efficiëntie van code, en bij uitbreiding, apps.
Dalvik VM
In de begindagen van Android gebruikte het besturingssysteem de zogenaamde Dalvik VM (de tolk) samen met een JIT-compiler (just-in-time). Deze oudere video van XDA TV's Android Basics 101 -serie raakt aan de Dalvik VM en de JIT-opstelling, die beide voldeden aan de behoeften van vroege Android-systemen waar geheugenbeperkingen overvloedig waren. De Dalvik VM nam Java-bytecode en zette deze om in machinecode wanneer de code moest worden uitgevoerd (vandaar Just-In-Time). Dit was nodig omdat opslagruimte in telefoons destijds een echte beperking was, dus deze aanpak zorgde ervoor dat apps met kleinere bestandsgroottes in het systeem konden werken.
Het compileren en interpreteren van apps tijdens runtime had het nadeel van over het algemeen langzamere app-prestaties, omdat de compilatie zou plaatsvinden terwijl de gebruiker de app gebruikt.
Dalvik had ook beperkingen met zijn Garbage Collection-mechanisme. Dalvik hield elke geheugentoewijzing collectief bij. Zodra Dalvik vaststelt dat een stukje geheugen niet langer door het programma wordt gebruikt, wordt dit geheugen weer vrijgemaakt op de heap, zonder enige tussenkomst van de programmeur. Dit proces wordt Garbage Collection (GC) genoemd en heeft tot doel geheugenobjecten te vinden in een programma dat niet meer wordt gebruikt en vervolgens de bronnen terug te winnen die door die objecten worden gebruikt om geheugen vrij te maken. Het systeem bepaalt op collectieve basis wanneer een GC nodig is, zodat app-ontwikkelaars niet kunnen kiezen wanneer GC-gebeurtenissen plaatsvinden (zelfs niet in ART). Dus als er een GC-gebeurtenis plaatsvond tijdens een intensieve verwerkingsactiviteit op de app op de voorgrond, pauzeerde het systeem de uitvoering van het proces en start GC, waardoor de verwerkingstijd toeneemt en een merkbare "jank" in de gebruikers.
Deze en andere beperkingen waren voor Google aanleiding om alternatieve benaderingen voor snellere prestaties te onderzoeken.
Android-runtime
Met Android 4.4 KitKat heeft Google geïntroduceerd KUNST (Android Runtime) in preview-vorm met een AOT-compiler (Ahead-Of-Time), en met Android 5.0 Lollipop liet Google Dalvik vallen ten gunste van ART als de enige beschikbare tolk. ART with AOT zette code om in machinetaal op het moment dat de app werd geïnstalleerd, in plaats van te wachten met een dergelijke conversie wanneer de app in gebruik is. Deze aanpak versnelde dus de opstarttijden van apps, maar introduceerde ook nadelen in de vorm van langzamere installatietijden en een groter gebruik van schijfruimte. Om het allemaal in evenwicht te brengen, Google geadopteerd een combinatie van AOT, JIT en profielgestuurde compilatie met ART op Android 7.0 Nougat, om ervoor te zorgen dat geen enkele factor drastisch wordt beïnvloed.
ART heeft er ook aan gewerkt om Garbage Collection minder opdringerig te maken. Het GC-proces is geoptimaliseerd om over het algemeen sneller te zijn met minder pauzes (enkele korte pauze versus de twee pauzes van Dalvik), minder fragmentatie en minder geheugengebruik. De presentatie van Google op Google I/O 2014 gaat dieper in op de beperkingen van Dalviks GC en de verbeteringen van ART op dat vlak.
Zelfs met deze veranderingen door de jaren heen was het uitgangspunt van de aanpak van Google het interpreteren van code tijdens de uitvoering, terwijl de timing van het compilerende (vertaal)element werd gevarieerd. Garbage Collection blijft ook een pijnpunt voor app-ontwikkelaars vanwege het inherente onderbrekende en collectieve karakter ervan. Het is aannemelijk dat de prestaties van Android-apps hieronder lijden, omdat er nog steeds overheadkosten aan verbonden zijn.
Ark-compiler van Huawei
Huawei heeft gewerkt aan de ontwikkeling van een efficiëntere oplossing en heeft daarom honderden experts op dit gebied ingehuurd. Het resultaat van deze inspanning is de Ark Compiler, die volgens Huawei de allereerste statische compiler is dat directe vertaling in machinetaal mogelijk maakt, waardoor de noodzaak voor een tolk. Ark Compiler is ook ontwikkeld met als doel de efficiëntie van Java en C te maximaliseren, dus theoretisch zou je met deze talen de beste resultaten moeten zien.
Huawei presenteert enkele belangrijke kenmerken van de Ark Compiler, zoals hieronder:
- Compilatietechnieken zoals AOT en JIT kunnen sommige programma's omzetten in machinecode en deze rechtstreeks op de CPU uitvoeren, maar deze technieken zijn niet in staat zich volledig los te maken van de tolk en de daaraan verbonden beperkingen. De Ark Compiler maakt gebruik van statische compilatie, waardoor deze zich kan losmaken van de dynamische tolk, waardoor de mogelijkheid wordt geopend om de app-prestaties te verbeteren door "sprongen en grenzen."
- Statische compilatie heeft het potentiële nadeel dat het te rigide is en niet in staat is aanpassingen te maken die een dynamische compiler tijdens de uitvoering kan maken. Huawei beweert dat de statische compilatie van de Ark Compiler dit oplost "door de dynamische kenmerken van de programmeertaal naadloos te vertalen naar machinecode."
- Bestaande compilatieprocessen vinden plaats tijdens of na de installatie van het app-pakket op het mobiele apparaat. Ark Compiler is ontworpen voor gebruik tijdens softwareontwikkeling, waarvan we aannemen dat het helpt om tijdoverhead tijdens installatie en uitvoering te elimineren. We gaan ervan uit dat app-ontwikkelaars tijdens de app verschillende talen direct kunnen compileren in native machinecode ontwikkelingsproces, en de resulterende APK zou dus geen interactie met een tolk of een virtuele machine nodig kunnen hebben functie. Dit zou in theorie bijvoorbeeld de overheadkosten met betrekking tot JNI verminderen.
- Ark Compiler verandert ook het collectieve karakter van Garbage Collection. Hierdoor kunnen GC-gebeurtenissen afzonderlijk plaatsvinden voor verschillende Java-threads. Deze gecompartimenteerde aanpak beweert minder rommel te bieden op apps op de voorgrond.
Als gevolg van deze wijzigingen kan Ark Compiler dat wel schijnbaar de vloeiendheid van het Android-systeem verbeteren met maximaal 24%, de responssnelheid met maximaal 44% en de soepelheid van de applicaties van derden met maximaal 60%, die beweert de prestaties van Android-apps op hetzelfde niveau te brengen als die op iOS.
De Ark Compiler wordt momenteel gecompileerd en geoptimaliseerd voor ARM-chiparchitectuur. Huawei hoopt dat gezamenlijk hardware- en softwareontwerp in de toekomst zal bijdragen aan het maximaliseren van de mogelijkheden van de Kirin-chip.
De Ark Compiler ondersteunt standaard Java-gebruik, waardoor apps van derden direct kunnen worden gecompileerd zonder dat de app-ontwikkelaar codewijzigingen hoeft door te voeren. Ark Compiler maakt ook "aanpassingen aan de codestructuur" mogelijk voor verdere verbeteringen aan de prestaties en het geheugen. Huawei heeft ervoor gekozen om van Ark Compiler een open source-systeem te maken, waardoor externe ontwikkelaars het kunnen gebruiken en de technologie aanpassen aan hun behoeften, waardoor de acceptatie ervan bij app-ontwikkelaars en mobiele telefoons wordt bevorderd fabrikanten.
Hoewel Huawei geen nadelen noemt aan de Ark Compiler, kun je op zijn minst grote app-groottes verwachten Tenminste, maar dit zou geen problemen moeten opleveren op apparaten van de huidige generatie die met voldoende worden geleverd opslag. We verwachten ook dat Ark Compiler niet voor alle CPU-architecturen beschikbaar zal zijn, aangezien de compatibiliteitsproblemen van Google niet Huawei's hoofdpijn zijn. Ark Compiler is ontworpen om te worden gebruikt tijdens de ontwikkeling en niet tijdens de installatie; dit is een indicatie dat Huawei mogelijk de manier heeft aangepast waarop apps op Android-apparaten worden geïmplementeerd en geïnstalleerd, en mogelijk ook aan hun eigen APK-ontwerp heeft gewerkt. Als dit klopt, zou dit een groot compatibiliteitsprobleem in het ecosysteem kunnen opleveren, en het zou nog lang duren voordat dit een standaard Android-functie zou worden, als dat ooit ooit zou gebeuren.
Het niet compileren op het apparaat van een gebruiker roept ook een grote vraag op over optimalisatie. ART optimaliseert momenteel per micro-architectuur, wat betekent dat het resulterende binaire bestand zou zijn anders voor een Snapdragon-apparaat versus een Exynos-apparaat, of zelfs voor een Snapdragon 845 versus een Snapdragon 625. Deze aanpak is zinvol voor fabrikanten die volledige controle hebben over de SoC, zoals Apple en Huawei. Nu de rest van de Android-wereld echter veel verschillende SoC's gebruikt, zal het dwingen van een generieke optimalisatie voor gebruik op verschillende apparaten opnieuw een wegversperring zijn voor de standaardisatie van de Ark Compiler. Verwacht daarom niet dat Ark Compiler binnenkort op uw favoriete aangepaste ROM zal verschijnen.
Ter verduidelijking: de Ark Compiler is ontwikkeld om met Android te werken, en Huawei heeft er niets over gezegd vermeend homebrew besturingssysteem en de compatibiliteit ervan met Ark Compiler, dus we doen op dit punt geen aannames.
Huawei is van plan twee grote conferenties te houden gewijd aan ontwikkelaars en het grotere ecosysteem. Dit zijn de Huawei Device China Developers Conference en de Green Alliance China Developers Conference. Beide evenementen zullen specifieke open source-kwesties behandelen die verband houden met Huawei's Ark Compiler, in een poging om de voordelen van deze technologie zo breed mogelijk toegankelijk te maken.
Speciale dank aan XDA Senior Recognised Contributor Dees_Troy en erkend ontwikkelaar arter97 voor hun hulp en inbreng.
Opmerking: Huawei/Honor is gestopt met het verstrekken van officiële ontgrendelingscodes voor de bootloader voor zijn apparaten. Daarom kunnen de bootloaders van hun apparaten niet worden ontgrendeld, wat betekent dat gebruikers geen aangepaste ROM's kunnen rooten of installeren.