Как компилаторът Ark на Huawei може да подобри производителността на приложението за Android

Huawei пусна ключови подробности относно работата на своя нов Ark Compiler, обещавайки драстично да подобри производителността на приложенията на Android. Прочетете за повече

Голяма част от скорошния разговор около Huawei се върти около злощастната политическа ситуация на компанията поради a Изпълнителна заповед на САЩ, която ограничи много компании да извършват бизнес с Huawei. Последствията от такова решаващо решение са твърде огромни, за да не им се обръща внимание. Но в една алтернативна реалност, където тази изпълнителна заповед не съществува, Huawei щеше да бъде в светлината на прожекторите заради това наскоро разкри Ark Compiler, най-новата иновация, която претендира да преодолее разликата в производителността на приложенията между Android и iOS.

Преди да се потопим в това какво представлява Ark Compiler, трябва да направим крачка назад и да разберем какво е компилатор и целта, която служи в системата Android.

Кратка история на компилаторите и интерпретаторите на Android

Компилаторът е компютърна програма, която превежда код от един език на друг език, който често е роден машинен език. След това това може да се изпълни директно от компютъра или да се изпълни чрез друга програма (интерпретатор). Този превод е необходим, защото пишем код на четими от човека езици за програмиране (като Java и Kotlin), докато компютърът разбира само родния машинен език (двоичен код под формата на 1 и 0). По този начин компилаторът служи като мост между инструкциите, които човек пише, и способността на машината да разбере и след това да изпълни тези инструкции. По този начин колко бързо и ефективно се осъществява това преобразуване и последваща интерпретация определя ефективността на компилатора въвеждане на пряка връзка между ефективността на компилатора и производителността и ефективността на кода и чрез разширение, приложения.

Dalvik VM

В ранните дни на Android операционната система използва това, което се нарича Dalvik VM (интерпретаторът) заедно с JIT (точно навреме) компилатор. Това по-старо видео от Android Basics 101 на XDA TV серията засяга Dalvik VM и настройката на JIT, като и двете обслужваха нуждите на ранните Android системи, където ограниченията на паметта бяха изобилни. Dalvik VM взе Java байт код и го преобразува в машинен код, когато и когато кодът трябваше да бъде изпълнен (следователно Just-In-Time). Това беше необходимо, тъй като тогава пространството за съхранение в телефоните беше истинско ограничение, така че този подход позволи на приложенията да работят с по-малки размери на файлове в системата.

Компилирането и интерпретирането на приложения по време на изпълнение имаше недостатъка на цялостната по-бавна производителност на приложението, тъй като компилирането щеше да се извърши едновременно с това, когато потребителят използва приложението.

Dalvik също имаше ограничения с механизма си за събиране на отпадъци. Dalvik следеше колективно всяко разпределение на паметта. След като Dalvik определи, че част от паметта вече не се използва от програмата, той освобождава тази памет обратно в купчината без каквато и да е намеса от страна на програмиста. Този процес се нарича Събиране на боклука (GC) и има за цел да намери обекти на паметта в програма, която вече не е достъпна, и след това да възстанови ресурсите, използвани от тези обекти за освобождаване на памет. Системата определя кога GC е необходим на колективна основа, така че разработчиците на приложения не могат да избират кога да се появят GC събития [дори в ART]. Така че, ако GC събитие възникне по средата на интензивна обработка на приложението на преден план, системата ще постави на пауза изпълнението на процеса и започване на GC, като по този начин се увеличава времето за обработка и се въвежда забележимо "янк" в потребители.

Тези и други ограничения накараха Google да проучи алтернативни подходи за по-бърза работа.

Android Runtime

С Android 4.4 KitKat, Google представи ART (Android Runtime) във форма за предварителен преглед с компилатор AOT (Ahead-Of-Time) и с Android 5.0 Lollipop, Google изостави Dalvik в полза на ART като единствения наличен интерпретатор. ART с AOT преобразува кода в машинен език по време на инсталирането на приложението, вместо да чака да извърши такова преобразуване, когато приложението се използва. По този начин този подход ускори времето за стартиране на приложението, но също така въведе недостатъци под формата на по-бавно време за инсталиране и увеличено използване на дисково пространство. За да балансирате всичко, Google осиновени комбинация от AOT, JIT и ръководена от профил компилация с ART на Android 7.0 Nougat, за да се гарантира, че нито един фактор не е засегнат драстично.

Внедряване на ART на Android

ART също работи върху това да направи Garbage Collection по-малко натрапчив. Процесът на GC беше оптимизиран да бъде по-бърз като цяло с по-малко паузи (единична кратка пауза спрямо двете паузи на Dalvik), по-малко фрагментиране и по-малко използване на паметта. Презентацията на Google на Google I/O 2014 навлиза в по-големи подробности, обяснявайки ограниченията на GC на Dalvik и подобренията на ART в тази насока.

Дори и с тези промени през годините, основната предпоставка на подхода на Google включва интерпретиране на код по време на изпълнение, като същевременно се променя времето на елемента за компилиране (превод). Събирането на отпадъци също продължава да бъде болезнена точка за разработчиците на приложения поради присъщия си прекъсващ и колективен характер. Може да се каже, че производителността на приложението на Android страда в резултат на това, тъй като продължават да се налагат режийни разходи.

Ark Compiler от Huawei

Huawei работи за разработването на по-ефективно решение и впоследствие нае стотици експерти в тази област. Резултатът от тези усилия е Ark Compiler, за който Huawei твърди, че е първият статичен компилатор което позволява директен превод на машинен език, като напълно премахва необходимостта от an преводач. Ark Compiler също е разработен с цел максимизиране на ефективността на работа за Java и C, така че теоретично трябва да видите най-добрите резултати с тези езици.

Графика от Huawei. Текстът е преведен от потребител на XDA MyKeyVans.

Huawei представя някои ключови характеристики на Ark Compiler, както е показано по-долу:

  • Техниките за компилиране като AOT и JIT могат да конвертират някои програми в машинен код и да ги изпълняват директно на процесора, но тези техники не са в състояние напълно да се отвържат от интерпретатора и свързаните с него ограничения. Компилаторът Ark използва статична компилация, която му позволява да се освободи от динамичния интерпретатор, отваряйки възможността за повишаване на производителността на приложението чрез "скокообразно."
  • Статичното компилиране има потенциален недостатък, че е твърде твърдо и не може да направи корекции, които динамичният компилатор може да направи по време на изпълнение. Huawei твърди, че статичната компилация на Ark Compiler разрешава това "чрез безпроблемно превеждане на динамичните функции в езика за програмиране в машинен код."
  • Съществуващите процеси на компилиране се извършват по време или след инсталирането на пакета на приложението на мобилното устройство. Ark Compiler е предназначен за внедряване по време на разработката на софтуер, което предполагаме, че помага за премахване на времеви разходи по време на инсталиране и изпълнение. Предполагаме, че разработчиците на приложения биха могли директно да компилират различни езици в собствен машинен код по време на приложението процес на разработка и полученият APK може да не се нуждае от взаимодействие с интерпретатор или виртуална машина, за да функция. Това теоретично би намалило режийните разходи, свързани с JNI, например.
  • Ark Compiler също променя колективния характер на Garbage Collection. Той позволява GC събития да се случват отделно за различни нишки на Java. Този разделен подход твърди, че предлага по-малко бъркотия на приложенията на преден план.

В резултат на тези промени Ark Compiler може привидно подобрява плавността на работата на системата Android с до 24%, скоростта на реакция с до 44% и гладкостта на приложенията на трети страни с до 60%, твърдейки, че представянето на приложението за Android е на същото ниво като това на iOS.

Компилаторът Ark в момента е компилиран и оптимизиран за архитектура на ARM чип. Huawei се надява, че в бъдеще съвместният дизайн на хардуер и софтуер ще работи за максимизиране на възможностите на чипа Kirin.

Компилаторът Ark поддържа стандартно използване на Java, което позволява директно компилиране на приложения на трети страни, без да е необходимо разработчикът на приложението да прави каквато и да е модификация на кода. Ark Compiler също позволява "корекции на структурата на кода" за допълнителни подобрения на производителността и паметта. Huawei избра да направи Ark Compiler система с отворен код, която ще позволи на разработчици от трети страни да приемат и адаптират технологията за техните нужди, като подобрят нейното приемане от разработчиците на приложения и мобилни телефони производители.

Въпреки че Huawei не споменава никакви недостатъци на Ark Compiler, може да се очакват големи размери на приложението най-малкото, но това не би трябвало да създава проблеми на устройствата от сегашното поколение, които идват с достатъчно съхранение. Очакваме също, че Ark Compiler няма да бъде наличен за всички CPU архитектури, тъй като проблемите със съвместимостта на Google не са главоболието на Huawei. Ark Compiler е проектиран да се използва по време на разработка, а не по време на инсталация; това е индикация, че Huawei вероятно е променила начина, по който приложенията се внедряват и инсталират на устройства с Android, а също така може да е работила върху техния собствен APK дизайн. Ако е правилно, това може да създаде сериозен проблем със съвместимостта в екосистемата и ще отнеме много време, преди това да стане стандартна функция на Android, ако изобщо стане.

Липсата на компилиране на устройство на потребител също повдига голям въпрос относно оптимизацията. В момента ART оптимизира на базата на микроархитектура, което означава, че полученият двоичен файл ще бъде различно за устройство Snapdragon спрямо устройство Exynos или дори за Snapdragon 845 спрямо Snapdragon 625. Този подход има смисъл за производители, които имат пълен контрол върху SoC, като Apple и Huawei. Въпреки това, тъй като останалата част от света на Android използва много различни SoC, налагането на обща оптимизация, която да се използва на различни устройства, отново ще бъде пречка за стандартизацията на Ark Compiler. Следователно, не очаквайте Ark Compiler да пристигне скоро на любимия ви персонализиран ROM.

За пояснение, компилаторът Ark е разработен да работи с Android и Huawei не спомена нищо във връзка с него предполагаема домашна ОС и неговата съвместимост с Ark Compiler, така че не правим никакви презумпции в тази насока.

Huawei планира да проведе две големи конференции, посветени на разработчиците и по-голямата екосистема. Това са конференцията за разработчици на Huawei Device China и конференцията за разработчици на Green Alliance China. И двете събития ще разгледат конкретни проблеми с отворен код, свързани с Ark Compiler на Huawei, в опит да направят предимствата на тази технология възможно най-широко достъпни.


Специални благодарности на XDA Senior Recognised Contributor Dees_Troy и признат разработчик arter97 за тяхната помощ и принос.

Забележка: Huawei/Honor спряха да предоставят официални кодове за отключване на буутлоудъра за своите устройства. Следователно зареждащите устройства на техните устройства не могат да бъдат отключени, което означава, че потребителите не могат да руутват или да инсталират потребителски ROM.