Ark Compiler a expliqué: Comment le compilateur d'applications de Huawei peut améliorer les performances des applications Android

La récente conversation autour de Huawei a porté sur la situation politique malheureuse de la société en raison d'un ordre exécutif américain qui interdisait à de nombreuses sociétés de faire affaire avec Huawei. Les répercussions d'une telle décision cruciale sont beaucoup trop énormes pour ne pas y prêter attention. Mais dans une réalité alternative où cet ordre exécutif n'existe pas, Huawei aurait été sous les feux de la rampe pour son révélateur récent Ark Compiler, la dernière innovation qui prétend combler le fossé des performances des applications entre Android et iOS.

Avant de plonger dans ce qu'Ark Compiler est, nous devons prendre du recul et comprendre ce qu'est un compilateur et à quoi il sert dans le système Android.

Bref historique des compilateurs et interprètes sur Android

Un compilateur est un programme informatique qui traduit le code d'une langue dans une autre langue, souvent en langage machine natif. Cela peut ensuite être exécuté directement par l'ordinateur ou via un autre programme (interpréteur). Cette traduction est nécessaire car nous écrivons du code dans des langages de programmation lisibles par l'homme (comme Java et Kotlin), alors que l'ordinateur ne comprend que le langage machine natif (code binaire sous la forme de 1 et de 0). Le compilateur sert donc de passerelle entre les instructions écrites par un humain et la capacité de la machine à comprendre puis à exécuter ces instructions. La rapidité et l’efficacité de la conversion et de l’interprétation ultérieure définissent l’efficacité du compilateur, introduisant ainsi une corrélation directe entre l’efficacité du compilateur et les performances et l’efficacité du code et, par extension, des applications.

Dalvik VM

Dans les premiers temps d'Android, le système d'exploitation utilisait ce qu'on appelait la VM de Dalvik (l'interpréteur) avec un compilateur JIT (juste à temps). Cette vidéo plus ancienne de la série Android Basics 101 de la télévision traite de la machine virtuelle Dalvik et de la configuration de JIT, qui répondaient tous deux aux besoins des anciens systèmes Android où les contraintes de mémoire étaient abondantes. La VM Dalvik a pris le bytecode Java et l'a converti en code machine au fur et à mesure que le code devait être exécuté (donc Just-In-Time). Cela était nécessaire, car l’espace de stockage dans les téléphones était une véritable contrainte à l’époque. Cette approche a donc permis aux applications de fonctionner avec des fichiers de taille plus petite dans le système.

La compilation et l'interprétation des applications au moment de l'exécution présentaient l'inconvénient de ralentir les performances globales de l'application, car la compilation aurait lieu parallèlement à l'utilisation de l'application par l'utilisateur.

Dalvik avait également des limites avec son mécanisme de collecte des ordures. Dalvik suivait collectivement chaque allocation de mémoire. Une fois que Dalvik a déterminé qu’une partie de la mémoire n’était plus utilisée par le programme, elle la libérait dans le tas sans aucune intervention du programmeur. Ce processus s'appelle Garbage Collection (GC). Il vise à rechercher des objets de mémoire dans un programme auquel on n'a plus accès, puis à récupérer les ressources utilisées par ces objets pour libérer de la mémoire. Le système détermine le moment où un catalogue global est nécessaire sur une base collective. Les développeurs d'applications ne sont donc pas autorisés à choisir le moment où les événements du catalogue global se produisent [même sous ART]. Ainsi, si un événement GC se produisait au milieu d'une activité de traitement intense sur l'application de premier plan, le système suspendait l'exécution du processus et commençait la GC, augmentant ainsi le temps de traitement et introduisant un «jank» perceptible pour les utilisateurs.

Ces contraintes, ainsi que d’autres, ont poussé Google à explorer d’autres approches pour améliorer les performances.

Durée d'exécution Android

Avec Android 4.4 KitKat, Google a introduit ART (Android Runtime) sous forme d’aperçu avec un compilateur AOT (Ahead-Of-Time), et avec Android 5.0 Lollipop, Google a abandonné Dalvik au profit d’ART, le seul interprète disponible. ART avec AOT a converti le code en langage machine au moment de l’installation de l’application, au lieu d’attendre de faire cette conversion lorsque l’application est en cours d’utilisation. Cette approche a donc accéléré les temps de lancement des applications, mais a également introduit des inconvénients sous la forme de temps d'installation plus lents et d'une utilisation accrue de l'espace disque. Pour équilibrer tout cela, Google a adopté une combinaison d'AOT, JIT et d'une compilation guidée par profil avec ART sur Android 7.0 Nougat, afin de garantir qu'aucun facteur ne soit affecté de manière significative.

Mise en œuvre ART sous Android

ART s'est également efforcé de rendre moins efficace la collecte des ordures. Le processus de GC a été optimisé pour être globalement plus rapide, avec moins de pauses (une courte pause par rapport aux deux pauses de Dalvik), moins de fragmentation et moins d'utilisation de la mémoire. La présentation de Google à Google I / O 2014 explique plus en détail les limites des améliorations apportées par Dalvik GC et ART à cette fin.

Même avec ces changements au fil des ans, l'approche de base de Google consistait à interpréter le code pendant l'exécution tout en faisant varier la synchronisation de l'élément de compilation (traduction). Le ramassage des ordures continue également de poser problème aux développeurs d'applications en raison de sa nature collective et interruptive inhérente. On peut soutenir que les performances des applications Android en pâtissent car des frais généraux sont toujours impliqués.

Ark Compiler de Huawei

Huawei s’efforce de mettre au point une solution plus efficace et a par conséquent engagé des centaines d’experts dans le domaine. Le compilateur Ark, qui, selon Huawei, est le tout premier compilateur statique qui permet la traduction directe en langage machine, élimine ainsi tout recours à un interprète. Ark Compiler a également été mis au point dans le but de maximiser l'efficacité de l'exécution pour Java et le langage C. Par conséquent, vous devriez théoriquement obtenir les meilleurs résultats avec ces langages.

Graphique de Huawei. Texte traduit par l'utilisateur MyKeyVans.

Huawei présente certaines fonctionnalités clés du compilateur Ark, décrites ci-dessous:

  • Des techniques de compilation telles que AOT et JIT peuvent convertir certains programmes en code machine et les exécuter directement sur le CPU, mais elles ne peuvent pas se détacher complètement de l’interpréteur ni des limitations qui s’y rattachent. Le compilateur Ark utilise la compilation statique, ce qui lui permet de se séparer de l'interpréteur dynamique, offrant ainsi la possibilité d'améliorer les performances de l'application de manière spectaculaire.
  • La compilation statique peut être trop rigide et incapable de faire les ajustements qu’un compilateur dynamique peut effectuer pendant l’exécution. Huawei affirme que la compilation statique du compilateur Ark résout ce problème « en traduisant de manière transparente les fonctionnalités dynamiques du langage de programmation en code machine.
  • Les processus de compilation existants ont lieu pendant ou après l'installation du package d'application sur le périphérique mobile. Ark Compiler est conçu pour être déployé pendant le développement du logiciel, ce qui, d’après nous, permet de réduire les coûts liés au temps nécessaire à l’installation et à l’exécution. Nous supposons que les développeurs d'applications seraient en mesure de compiler directement différentes langues en code machine natif pendant le processus de développement d'applications, et l'APK résultant n'aurait donc pas besoin d'interaction avec un interprète ou une machine virtuelle pour fonctionner. Cela réduirait théoriquement les frais généraux liés à JNI, par exemple.
  • Ark Compiler change également la nature collective de Garbage Collection. Cela permet que des événements GC se produisent séparément pour différents threads Java. Cette approche compartimentée prétend offrir moins de jank sur les applications de premier plan.

À la suite de ces changements, Ark Compiler peut apparemment améliorer la fluidité de fonctionnement du système Android jusqu'à 24%, la vitesse de réponse jusqu'à 44%, et la finesse des applications tierces jusqu'à 60%, prétendant apporter l'application Android. performances au même niveau que sur iOS.

Le compilateur Ark est actuellement compilé et optimisé pour l'architecture de la puce ARM. Huawei espère qu'à l'avenir, la conception matérielle et logicielle collaborative collaborera à l'optimisation des capacités de la puce Kirin.

Le compilateur Ark prend en charge l'utilisation standard de Java, permettant la compilation directe d'applications tierces sans que le développeur de l'application ne doive modifier le code. Ark Compiler permet également d ’« ajuster la structure du code »pour améliorer encore les performances et la mémoire. Huawei a choisi de faire d'Ark Compiler un système open source, qui permettrait aux développeurs tiers d'adopter et d'adapter la technologie à leurs besoins, ce qui faciliterait son adoption par les développeurs d'applications et les fabricants de téléphones mobiles.

Bien que Huawei ne mentionne aucun inconvénient dans Ark Compiler, on peut s’attendre au moins à de grandes tailles d’app, mais cela ne devrait poser aucun problème pour les appareils de la génération actuelle qui disposent de suffisamment de stockage. Nous nous attendons également à ce qu'Ark Compiler ne soit pas disponible pour toutes les architectures de processeur, car les problèmes de compatibilité de Google ne sont pas le casse-tête de Huawei. Ark Compiler est conçu pour être utilisé lors du développement et non lors de l'installation; Cela indique que Huawei a peut-être éventuellement modifié la manière dont les applications sont déployées et installées sur les appareils Android, et peut également avoir travaillé sur leur propre conception d'APK. Si cela est correct, cela pourrait poser un problème majeur de compatibilité dans l'écosystème, et il faudrait beaucoup de temps avant que cela devienne, si jamais, une fonctionnalité Android standard.

Ne pas compiler sur le périphérique d'un utilisateur soulève également une grande question d'optimisation. Actuellement, ART optimise chaque architecture, ce qui signifie que le résultat obtenu serait différent pour un périphérique Snapdragon par rapport à un périphérique Exynos, ou même pour un Snapdragon 845 par rapport à un Snapdragon 625. Cette approche est logique pour les fabricants qui disposent d'un contrôle total. du SoC, comme Apple et Huawei. Cependant, étant donné que le reste du monde Android utilise de nombreux SoC différents, le fait de forcer l'utilisation d'une optimisation générique sur plusieurs périphériques constituera à nouveau un obstacle pour la normalisation du compilateur Ark. Par conséquent, ne vous attendez pas à ce que Ark Compiler arrive sur votre ROM personnalisée préférée dans un avenir proche.

Pour plus de clarté, le compilateur Ark est conçu pour fonctionner avec Android, et Huawei n’a rien mentionné en ce qui concerne son système d’homogénéité présumé et sa compatibilité avec Ark Compiler. Nous n’avons donc aucune présomption à cet égard.

Huawei prévoit d'organiser deux conférences majeures dédiées aux développeurs et à l'écosystème plus vaste. Il s'agit de la conférence Huawei Device China Developers Conference et de la conférence Green Alliance China Developers Conference. Les deux événements aborderont des problèmes liés à l'open source liés au compilateur Ark de Huawei, dans le but de rendre les avantages de cette technologie aussi largement accessibles que possible.


Un merci spécial à Dees_Troy, contributeur reconnu de longue date, et à artter97, développeur reconnu, pour leur aide et leurs contributions.

Remarque: Huawei / Honor ont cessé de fournir les codes de déverrouillage officiels du chargeur de démarrage pour ses appareils. Par conséquent, les chargeurs d'amorçage de leurs périphériques ne peuvent pas être déverrouillés, ce qui signifie que les utilisateurs ne peuvent pas rooter ou installer de ROM personnalisées.