Как компилятор Ark от Huawei может улучшить производительность приложений для Android

Компания Huawei опубликовала ключевые подробности работы своего нового компилятора Ark, обещая радикально повысить производительность приложений на Android. Читайте дальше, чтобы узнать больше

Большая часть недавних разговоров вокруг Huawei вращалась вокруг неудачной политической ситуации в компании из-за Указ США, запрещающий многим компаниям вести бизнес с Huawei. Последствия такого решающего решения слишком велики, чтобы не обращать на них внимания. Но в альтернативной реальности, где этого указа не существует, Huawei оказалась бы в центре внимания из-за своего решения. недавно представил Ark Compiler, последнюю инновацию, которая претендует на устранение разрыва в производительности приложений между Android и iOS.

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

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

Компилятор — это компьютерная программа, которая переводит код с одного языка на другой язык, часто являющийся собственным машинным языком. Затем это может быть выполнено либо непосредственно на компьютере, либо через другую программу (интерпретатор). Этот перевод необходим, поскольку мы пишем код на удобочитаемых языках программирования (таких как Java и Kotlin), тогда как компьютер понимает только собственный машинный язык (двоичный код в виде единиц и 0 с). Таким образом, компилятор служит мостом между инструкциями, которые пишет человек, и способностью машины понимать и затем выполнять эти инструкции. Насколько быстро и эффективно происходит это преобразование и последующая интерпретация, определяет эффективность компилятора, т.е. введение прямой корреляции между эффективностью компилятора и производительностью и эффективностью кода и, как следствие, Программы.

Далвик В.М.

На заре Android в ОС использовалась так называемая Dalvik VM (интерпретатор) вместе с JIT-компилятором (точно в срок). Это старое видео из раздела «Основы Android 101» на XDA TV. Серия затрагивает виртуальную машину Dalvik и настройку JIT, которые удовлетворяли потребности ранних систем Android, где были большие ограничения памяти. Виртуальная машина Dalvik взяла байт-код Java и преобразовала его в машинный код по мере необходимости выполнения кода (следовательно, «точно в срок»). Это было необходимо, поскольку в то время место для хранения данных в телефонах было реальным ограничением, поэтому такой подход позволял приложениям работать с файлами меньшего размера в системе.

Компиляция и интерпретация приложений во время выполнения имела недостаток, заключавшийся в общем снижении производительности приложения, поскольку компиляция происходила одновременно с использованием приложения пользователем.

У Dalvik также были ограничения в механизме сбора мусора. Dalvik отслеживал каждое распределение памяти коллективно. Как только Dalvik определяет, что часть памяти больше не используется программой, он освобождает эту память обратно в кучу без какого-либо вмешательства со стороны программиста. Этот процесс называется сборкой мусора (GC), и его цель — найти объекты памяти в программе, к которой больше нет доступа, а затем вернуть ресурсы, используемые этими объектами, для освобождения памяти. Система определяет, когда необходим сборщик мусора, на коллективной основе, поэтому разработчики приложений не могут выбирать, когда происходят события сборщика мусора [даже в ART]. Таким образом, если событие GC произошло в середине какой-либо интенсивной обработки в приложении переднего плана, система приостановит работу. выполнение процесса и начало GC, тем самым увеличивая время обработки и внося заметные «поддергивания» в работу пользователи.

Эти и другие ограничения подтолкнули Google к поиску альтернативных подходов для повышения производительности.

Android-среда выполнения

В Android 4.4 KitKat компания Google представила ART (среда выполнения Android) в предварительной форме с компилятором AOT (Ahead-Of-Time) и с Android 5.0 Lollipop Google отказался от Dalvik в пользу ART как единственного доступного интерпретатора. ART с AOT преобразует код в машинный язык во время установки приложения, а не ждет такого преобразования во время использования приложения. Таким образом, этот подход ускорил время запуска приложений, но также имел недостатки в виде более медленной установки и увеличения использования дискового пространства. Чтобы сбалансировать все это, Google усыновленный сочетание AOT, JIT и компиляции на основе профилей с ART на Android 7.0 Nougat, чтобы гарантировать, что ни один из факторов не будет сильно затронут.

Реализация ART в Android

ART также работал над тем, чтобы сделать сбор мусора менее навязчивым. Процесс сборки мусора был оптимизирован так, чтобы он в целом стал быстрее, с меньшим количеством пауз (одна короткая пауза по сравнению с двумя паузами в Dalvik), меньшей фрагментацией и меньшим использованием памяти. В презентации Google на Google I/O 2014 более подробно объясняются ограничения GC Dalvik и усовершенствований ART в этом отношении.

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

Компилятор Ark от Huawei

Компания Huawei работает над разработкой более эффективного решения и поэтому наняла сотни экспертов в этой области. Результатом этих усилий стал Ark Compiler, который, по утверждению Huawei, является первым в мире статическим компилятором. что позволяет осуществлять прямой перевод на машинный язык, полностью устраняя необходимость в устный переводчик. Ark Compiler также был разработан с целью максимизировать эффективность работы Java и C, поэтому теоретически можно увидеть наилучшие результаты с этими языками.

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

Компания Huawei представляет некоторые ключевые функции компилятора Ark, как показано ниже:

  • Методы компиляции, такие как AOT и JIT, позволяют конвертировать некоторые программы в машинный код и запускать их непосредственно на ЦП. но эти методы не могут полностью отвязаться от интерпретатора и связанных с ним ограничений. Компилятор Ark использует статическую компиляцию, что позволяет ему отделиться от динамического интерпретатора, открывая возможность повышения производительности приложения за счет "семимильными шагами."
  • Статическая компиляция имеет потенциальный недостаток: она слишком жесткая и не позволяет вносить изменения, которые динамический компилятор может вносить во время выполнения. Huawei утверждает, что статическая компиляция компилятора Ark решает эту проблему.путем плавного перевода динамических функций языка программирования в машинный код."
  • Существующие процессы компиляции происходят во время или после установки пакета приложения на мобильное устройство. Ark Compiler предназначен для развертывания во время разработки программного обеспечения, что, как мы полагаем, помогает сократить временные затраты во время установки и выполнения. Мы предполагаем, что разработчики приложений смогут напрямую компилировать разные языки в собственный машинный код во время разработки приложения. процесс разработки, и результирующий APK, таким образом, может не нуждаться во взаимодействии с интерпретатором или виртуальной машиной для функция. Это теоретически позволит снизить накладные расходы, связанные, например, с JNI.
  • Ark Compiler также меняет коллективный характер сборки мусора. Это позволяет событиям GC происходить отдельно для разных потоков Java. Утверждается, что этот разделенный подход снижает нагрузку на приложения на переднем плане.

В результате этих изменений Ark Compiler может по-видимому, улучшить плавность работы системы Android до 24%, скорость отклика до 44% и плавность работы сторонних приложений до 60%, утверждая, что производительность приложений Android будет на том же уровне, что и на iOS.

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

Компилятор Ark поддерживает стандартное использование Java, что позволяет напрямую компилировать сторонние приложения без необходимости внесения каких-либо изменений кода разработчиком приложения. Ark Compiler также позволяет «корректировать структуру кода» для дальнейшего улучшения производительности и памяти. Компания Huawei решила сделать Ark Compiler системой с открытым исходным кодом, которая позволит сторонним разработчикам использовать и адаптировать технологию для своих нужд, способствуя ее внедрению разработчиками приложений и мобильных телефонов. производители.

Хотя Huawei не упоминает никаких недостатков компилятора Ark, можно ожидать, что приложения будут иметь большие размеры в самом начале. по крайней мере, но это не должно создавать никаких проблем на устройствах текущего поколения, которые поставляются с достаточным количеством хранилище. Мы также ожидаем, что Ark Compiler не будет доступен для всех архитектур ЦП, поскольку проблемы совместимости Google не являются головной болью Huawei. Ark Compiler предназначен для использования во время разработки, а не во время установки; Это указывает на то, что Huawei, возможно, изменила способ развертывания и установки приложений на устройствах Android, а также, возможно, работала над собственным дизайном APK. Если это правда, это может создать серьезную проблему совместимости в экосистеме, и пройдет много времени, прежде чем это станет стандартной функцией Android, если вообще когда-либо.

Отсутствие компиляции на устройстве пользователя также поднимает большой вопрос по оптимизации. В настоящее время ART оптимизируется для каждой микроархитектуры, а это означает, что результирующий двоичный файл будет отличается для устройства Snapdragon от устройства Exynos или даже для Snapdragon 845 и Snapdragon 625. Этот подход имеет смысл для производителей, которые полностью контролируют SoC, таких как Apple и Huawei. Однако, поскольку остальная часть мира Android использует множество различных SoC, принудительное использование общей оптимизации на разных устройствах снова станет препятствием на пути стандартизации компилятора Ark. Следовательно, не ждите, что Ark Compiler появится на вашем любимом пользовательском ПЗУ в ближайшее время.

Для пояснения: компилятор Ark разработан для работы с Android, и компания Huawei ничего не упомянула в отношении своего предполагаемая доморощенная ОС и его совместимость с Ark Compiler, поэтому мы не делаем никаких предположений на этот счет.

Huawei планирует провести две крупные конференции, посвященные разработчикам и более широкой экосистеме. Это Конференция разработчиков устройств Huawei в Китае и Конференция разработчиков Green Alliance в Китае. На обоих мероприятиях будут рассмотрены конкретные проблемы с открытым исходным кодом, связанные с компилятором Ark от Huawei, с целью сделать преимущества этой технологии максимально доступными.


Особая благодарность старшему признанному участнику XDA. Дис_Трой и признанный разработчик arter97 за их помощь и вклад.

Примечание. Huawei/Honor прекратили предоставлять официальные коды разблокировки загрузчика для своих устройств. Следовательно, загрузчики своих устройств не могут быть разблокированы, а это означает, что пользователи не могут получить root права или установить собственные ПЗУ.