Modul în care compilatorul Ark de la Huawei poate îmbunătăți performanța aplicației Android

Huawei a lansat detalii cheie cu privire la funcționarea noului său Ark Compiler, promițând că va îmbunătăți drastic performanța aplicației pe Android. Citiți mai departe pentru mai multe

O mare parte din conversația recentă despre Huawei s-a învârtit în jurul situației politice nefericite a companiei din cauza unui Ordin executiv al SUA care restricționa multe companii să facă afaceri cu Huawei. Repercusiunile unei astfel de decizii esențiale sunt mult prea enorme pentru a nu acorda atenție. Dar într-o realitate alternativă în care acest ordin executiv nu există, Huawei ar fi fost în lumina reflectoarelor pentru a dezvăluit recent Ark Compiler, cea mai recentă inovație care pretinde că reduce diferența de performanță a aplicației dintre Android și iOS.

Înainte de a descoperi ce este Ark Compiler, trebuie să facem un pas înapoi și să înțelegem ce este un compilator și scopul pe care îl servește în sistemul Android.

Scurt istoric al compilatorilor și interpreților pe Android

Un compilator este un program de calculator care traduce codul dintr-o limbă într-o altă limbă, adesea fiind limbaj nativ pentru mașini. Acest lucru poate fi apoi executat fie direct de computer, fie prin alt program (interpret). Această traducere este necesară deoarece scriem cod în limbaje de programare care pot fi citite de om (cum ar fi Java și Kotlin), în timp ce computerul înțelege doar limbajul nativ al mașinii (cod binar sub formă de 1 și 0). Compilatorul servește astfel ca o punte între instrucțiunile pe care le scrie un om și capacitatea mașinii de a înțelege și apoi de a executa acele instrucțiuni. Cât de rapid și eficient are loc această conversie și interpretarea ulterioară definește, prin urmare, eficiența compilatorului introducerea unei corelații directe între eficiența compilatorului și performanța și eficiența codului și, prin extensie, aplicații.

Dalvik VM

În primele zile ale Android, sistemul de operare folosea ceea ce se numea Dalvik VM (interpretul) împreună cu un compilator JIT (just-in-time). Acest videoclip mai vechi de la Android Basics 101 de la XDA TV Seria atinge configurația Dalvik VM și JIT, ambele au servit nevoilor sistemelor Android timpurii, unde constrângerile de memorie erau abundente. VM Dalvik a preluat codul de octeți Java și l-a convertit în cod de mașină pe măsură ce codul trebuia executat (deci Just-In-Time). Acest lucru a fost necesar deoarece spațiul de stocare în telefoane era o constrângere reală pe atunci, așa că această abordare a permis aplicațiilor să funcționeze cu fișiere de dimensiuni mai mici în sistem.

Compilarea și interpretarea aplicațiilor în timpul execuției a avut dezavantajul unei performanțe generale mai lente a aplicației, deoarece compilarea ar avea loc împreună atunci când utilizatorul folosește aplicația.

Dalvik a avut și limitări cu mecanismul său de colectare a gunoiului. Dalvik a ținut evidența fiecărei alocări de memorie în mod colectiv. Odată ce Dalvik stabilește că o bucată de memorie nu mai este utilizată de program, eliberează această memorie înapoi în heap fără nicio intervenție din partea programatorului. Acest proces se numește Garbage Collection (GC) și își propune să găsească obiecte de memorie într-un program care nu mai este accesat și apoi să recupereze resursele folosite de acele obiecte pentru a elibera memorie. Sistemul determină când este necesar un GC în mod colectiv, astfel încât dezvoltatorii de aplicații nu pot alege când apar evenimentele GC [chiar și în ART]. Deci, dacă un eveniment GC a avut loc în mijlocul oricărei activități de procesare intensivă în aplicația din prim-plan, sistemul s-ar întrerupe execuția procesului și începe GC, crescând astfel timpul de procesare și introducând un „jank” vizibil în utilizatorii.

Aceste și alte constrângeri au împins Google să exploreze abordări alternative pentru performanțe mai rapide.

Android Runtime

Cu Android 4.4 KitKat, Google a introdus ART (Android Runtime) în formă de previzualizare cu un compilator AOT (Ahead-Of-Time) și cu Android 5.0 Lollipop, Google a renunțat la Dalvik în favoarea ART ca singur interpret disponibil. ART cu AOT a convertit codul în limbajul mașinii în momentul instalării aplicației, în loc să aștepte să facă o astfel de conversie atunci când aplicația este în uz. Această abordare a accelerat astfel timpii de lansare a aplicației, dar a introdus și dezavantaje sub forma unor timpi de instalare mai lenți și a creșterii utilizării spațiului pe disc. Pentru a echilibra totul, Google adoptat o combinație de AOT, JIT și compilare ghidată de profil cu ART pe Android 7.0 Nougat, pentru a se asigura că niciun factor nu este afectat drastic.

Implementarea ART pentru Android

ART a lucrat, de asemenea, pentru a face Garbage Collection mai puțin invadatoare. Procesul GC a fost optimizat pentru a fi mai rapid în general, cu mai puține pauze (o singură pauză scurtă față de cele două pauze ale lui Dalvik), mai puțină fragmentare și mai puțină utilizare a memoriei. Prezentarea Google la Google I/O 2014 intră în mai multe detalii, explicând limitările GC Dalvik și îmbunătățirile ART în acest sens.

Chiar și cu aceste schimbări de-a lungul anilor, premisa de bază a abordării Google a implicat interpretarea codului în timpul execuției, variind în același timp timpul al elementului de compilare (traducere). Garbage Collection continuă să fie, de asemenea, un punct de durere pentru dezvoltatorii de aplicații, datorită naturii sale inerente întreruptive și colective. Se poate spune că performanța aplicației Android suferă ca urmare, deoarece continuă să fie implicate cheltuieli generale.

Ark Compiler de la Huawei

Huawei a lucrat la dezvoltarea unei soluții mai eficiente și, în consecință, a angajat sute de experți în domeniu. Rezultatul acestui efort este Ark Compiler, despre care Huawei susține că este primul compilator static care permite traducerea directă în limbajul automat, eliminând complet necesitatea unui interpret. Ark Compiler a fost, de asemenea, dezvoltat cu scopul de a maximiza eficiența rulării pentru Java și C, așa că teoretic ar trebui să vedeți cele mai bune rezultate cu aceste limbaje.

Grafică de la Huawei. Text tradus de utilizatorul XDA MyKeyVans.

Huawei prezintă câteva caracteristici cheie ale Ark Compiler, după cum urmează:

  • Tehnicile de compilare precum AOT și JIT pot converti unele programe în cod de mașină și le pot rula direct pe CPU, dar aceste tehnici sunt incapabile să se desprindă complet de interpret și limitările asociate acestora. Ark Compiler utilizează compilarea statică, care îi permite să se desprindă de interpretul dinamic, deschizând posibilitatea de a crește performanța aplicației cu „salturi și limite."
  • Compilarea statică are un dezavantaj potențial de a fi prea rigidă și de a nu putea face ajustări pe care un compilator dinamic le poate face în timpul execuției. Huawei susține că compilația statică a Ark Compiler rezolvă acest lucru "prin traducerea perfectă a caracteristicilor dinamice din limbajul de programare în codul mașinii."
  • Procesele de compilare existente au loc în timpul sau după instalarea pachetului de aplicație pe dispozitivul mobil. Ark Compiler este proiectat pentru implementare în timpul dezvoltării software, ceea ce presupunem că ajută la eliminarea timpului general în timpul instalării și execuției. Presupunem că dezvoltatorii de aplicații ar putea compila direct diferite limbi în codul mașinii nativ în timpul aplicației proces de dezvoltare, iar APK-ul rezultat nu ar putea avea nevoie de interacțiune cu un interpret sau cu o mașină virtuală funcţie. Acest lucru ar reduce teoretic cheltuielile generale legate de JNI, de exemplu.
  • Ark Compiler modifică, de asemenea, natura colectivă a Garbage Collection. Permite ca evenimentele GC să apară separat pentru fire Java diferite. Această abordare compartimentată pretinde că oferă mai puține frecvențe aplicațiilor din prim-plan.

Ca urmare a acestor modificări, Ark Compiler poate aparent îmbunătățește fluența în funcționarea sistemului Android cu până la 24%, viteza de răspuns cu până la 44% și fluiditatea aplicațiilor terță parte cu până la 60%, susținând că aduce performanța aplicației Android la același nivel cu cea de pe iOS.

Ark Compiler este în prezent compilat și optimizat pentru arhitectura cipului ARM. Huawei speră că, în viitor, proiectarea hardware și software în colaborare va contribui la maximizarea capabilităților cipului Kirin.

Ark Compiler acceptă utilizarea standard Java, permițând compilarea directă a aplicațiilor terță parte, fără a fi nevoie ca dezvoltatorul aplicației să modifice codul. Ark Compiler permite, de asemenea, „ajustări ale structurii codului” pentru îmbunătățiri suplimentare ale performanței și memoriei. Huawei a ales să facă din Ark Compiler un sistem open source, care ar permite dezvoltatorilor terți să adopte și adaptează tehnologia pentru nevoile lor, promovând adoptarea acesteia cu dezvoltatorii de aplicații și telefoane mobile producatori.

În timp ce Huawei nu menționează niciun dezavantaj pentru Ark Compiler, ne putem aștepta la dimensiuni mari ale aplicațiilor cel puțin, dar acest lucru nu ar trebui să pună probleme pe dispozitivele din generația actuală care vin cu amplu depozitare. De asemenea, ne așteptăm ca Ark Compiler să nu fie disponibil pentru toate arhitecturile CPU, deoarece problemele de compatibilitate ale Google nu sunt durerea de cap pentru Huawei. Ark Compiler este conceput pentru a fi utilizat în timpul dezvoltării și nu în timpul instalării; Acest lucru indică faptul că este posibil ca Huawei să fi modificat modul în care aplicațiile sunt implementate și instalate pe dispozitivele Android și, de asemenea, este posibil să fi funcționat la propriul design APK. Dacă este corect, aceasta ar putea reprezenta o problemă majoră de compatibilitate în ecosistem și ar dura mult timp până când aceasta ar deveni o caracteristică Android standard, dacă este vreodată.

Necompilarea pe dispozitivul unui utilizator ridică și o mare întrebare privind optimizarea. ART se optimizează în prezent pe o bază de micro-arhitectură, ceea ce înseamnă că binarul rezultat ar fi diferit pentru un dispozitiv Snapdragon față de un dispozitiv Exynos sau chiar pentru un Snapdragon 845 față de un Snapdragon 625. Această abordare are sens pentru producătorii care au control deplin asupra SoC, cum ar fi Apple și Huawei. Cu toate acestea, având în vedere că restul lumii Android utilizează multe SoC-uri diferite, forțarea utilizării unei optimizări generice pe dispozitive va fi un obstacol pentru standardizarea Ark Compiler, din nou. În consecință, nu vă așteptați ca Ark Compiler să sosească în curând pe ROM-ul dvs. personalizat preferat.

Pentru clarificare, Ark Compiler este dezvoltat pentru a funcționa cu Android, iar Huawei nu a menționat nimic în legătură cu acesta presupusul sistem de operare homebrew și compatibilitatea sa cu Ark Compiler, așa că nu facem prezumții în acest sens.

Huawei intenționează să organizeze două conferințe majore dedicate dezvoltatorilor și ecosistemului mai larg. Acestea sunt Huawei Device China Developers Conference și Green Alliance China Developers Conference. Ambele evenimente vor aborda probleme specifice open source legate de Ark Compiler de la Huawei, într-un efort de a face ca beneficiile acestei tehnologii să fie cât mai accesibile pe scară largă.


Mulțumiri speciale colaboratorului principal recunoscut XDA Dees_Troy și Dezvoltator Recunoscut arter97 pentru asistența și contribuțiile lor.

Notă: Huawei/Honor a încetat să ofere coduri oficiale de deblocare a bootloader-ului pentru dispozitivele sale. Prin urmare, bootloaderele dispozitivelor lor nu pot fi deblocate, ceea ce înseamnă că utilizatorii nu pot roota sau instala ROM-uri personalizate.