Πώς το Ark Compiler της Huawei μπορεί να βελτιώσει την απόδοση της εφαρμογής Android

Η Huawei δημοσίευσε βασικές λεπτομέρειες σχετικά με τη λειτουργία του νέου Ark Compiler, υποσχόμενος να βελτιώσει δραστικά την απόδοση της εφαρμογής στο Android. Διαβάστε για περισσότερα

Μεγάλο μέρος της πρόσφατης συζήτησης γύρω από την Huawei περιστρέφεται γύρω από την ατυχή πολιτική κατάσταση της εταιρείας λόγω α Εκτελεστικό διάταγμα των ΗΠΑ που περιόριζε πολλές εταιρείες να συναλλάσσονται με την 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 πήρε bytecode Java και τον μετέτρεψε σε κώδικα μηχανής όπως και όταν έπρεπε να εκτελεστεί ο κώδικας (εξ ου και Just-In-Time). Αυτό ήταν απαραίτητο καθώς ο χώρος αποθήκευσης στα τηλέφωνα ήταν πραγματικός περιορισμός τότε, έτσι αυτή η προσέγγιση επέτρεπε στις εφαρμογές να λειτουργούν με μικρότερα μεγέθη αρχείων στο σύστημα.

Η μεταγλώττιση και η ερμηνεία εφαρμογών κατά το χρόνο εκτέλεσης είχε το μειονέκτημα της συνολικής πιο αργής απόδοσης της εφαρμογής, καθώς η μεταγλώττιση θα γινόταν παράλληλα με τη χρήση της εφαρμογής από τον χρήστη.

Η Dalvik είχε επίσης περιορισμούς με τον μηχανισμό συλλογής σκουπιδιών. Ο Dalvik παρακολουθούσε κάθε κατανομή μνήμης συλλογικά. Μόλις ο Dalvik προσδιορίσει ότι ένα κομμάτι μνήμης δεν χρησιμοποιείται πλέον από το πρόγραμμα, ελευθερώνει αυτή τη μνήμη πίσω στο σωρό χωρίς καμία παρέμβαση από τον προγραμματιστή. Αυτή η διαδικασία ονομάζεται συλλογή σκουπιδιών (GC) και στοχεύει στην εύρεση αντικειμένων μνήμης σε ένα πρόγραμμα που δεν έχει πλέον πρόσβαση και στη συνέχεια να ανακτήσει τους πόρους που χρησιμοποιούνται από αυτά τα αντικείμενα για την απελευθέρωση μνήμης. Το σύστημα καθορίζει πότε απαιτείται GC σε συλλογική βάση, έτσι ώστε οι προγραμματιστές εφαρμογών να μην μπορούν να επιλέξουν πότε συμβαίνουν συμβάντα GC [ακόμη και στο ART]. Επομένως, εάν ένα συμβάν GC συνέβαινε στη μέση οποιασδήποτε εντατικής δραστηριότητας επεξεργασίας στην εφαρμογή πρώτου πλάνου, το σύστημα θα σταματούσε την εκτέλεση της διαδικασίας και την έναρξη GC, αυξάνοντας έτσι τον χρόνο επεξεργασίας και εισάγοντας ένα αξιοσημείωτο "jank" στο χρήστες.

Αυτοί και άλλοι περιορισμοί ώθησαν την Google να εξερευνήσει εναλλακτικές προσεγγίσεις για ταχύτερη απόδοση.

Android Runtime

Με το 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 εργάστηκε επίσης για να κάνει το Garbage Collection λιγότερο ενοχλητικό. Η διαδικασία GC βελτιστοποιήθηκε ώστε να είναι πιο γρήγορη συνολικά με λιγότερες παύσεις (μία σύντομη παύση έναντι των δύο παύσεων του Dalvik), λιγότερο κατακερματισμό και λιγότερη χρήση μνήμης. Η παρουσίαση της Google στο Google I/O 2014 γίνεται με περισσότερες λεπτομέρειες εξηγώντας τους περιορισμούς των βελτιώσεων του Dalvik's GC και του ART για αυτόν τον σκοπό.

Ακόμη και με αυτές τις αλλαγές με την πάροδο των ετών, η βασική προϋπόθεση της προσέγγισης της Google περιελάμβανε την ερμηνεία του κώδικα κατά την εκτέλεση, ενώ διαφοροποιούσε το χρόνο του στοιχείου μεταγλώττισης (μετάφρασης). Η συλλογή σκουπιδιών εξακολουθεί επίσης να είναι ένα σημείο πόνου για τους προγραμματιστές εφαρμογών λόγω της εγγενούς διακοπής και συλλογικής φύσης της. Αναμφισβήτητα, η απόδοση των εφαρμογών του Android υποφέρει ως αποτέλεσμα, καθώς εξακολουθούν να υπάρχουν γενικά έξοδα.

Ark Compiler από την Huawei

Η Huawei εργάζεται για την ανάπτυξη μιας πιο αποτελεσματικής λύσης και κατά συνέπεια έχει προσλάβει εκατοντάδες ειδικούς στον τομέα. Το αποτέλεσμα αυτής της προσπάθειας είναι το Ark Compiler, το οποίο η Huawei ισχυρίζεται ότι είναι ο πρώτος στατικός μεταγλωττιστής που επιτρέπει την άμεση μετάφραση στη γλώσσα μηχανής, καταργώντας εντελώς την ανάγκη για ένα διερμηνέας. Το Ark Compiler αναπτύχθηκε επίσης με στόχο τη μεγιστοποίηση της απόδοσης εκτέλεσης για Java και C, επομένως κάποιος θεωρητικά θα πρέπει να δει τα καλύτερα αποτελέσματα με αυτές τις γλώσσες.

Γραφικό της Huawei. Κείμενο μεταφρασμένο από τον χρήστη XDA MyKeyVans.

Η Huawei παρουσιάζει μερικά βασικά χαρακτηριστικά του Ark Compiler ως εξής:

  • Οι τεχνικές μεταγλώττισης όπως το AOT και το JIT μπορούν να μετατρέψουν ορισμένα προγράμματα σε κώδικα μηχανής και να τα εκτελέσουν απευθείας στην CPU, αλλά αυτές οι τεχνικές δεν είναι σε θέση να αποδεσμευτούν εντελώς από τον διερμηνέα και τους περιορισμούς που συνδέονται με αυτόν. Ο μεταγλωττιστής Ark χρησιμοποιεί στατική μεταγλώττιση, η οποία του επιτρέπει να αποσυνδεθεί από τον δυναμικό διερμηνέα, ανοίγοντας τη δυνατότητα ενίσχυσης της απόδοσης της εφαρμογής από "άλματα και όρια."
  • Η στατική μεταγλώττιση έχει ένα πιθανό μειονέκτημα να είναι πολύ άκαμπτη και να μην μπορεί να κάνει προσαρμογές που μπορεί να κάνει ένας δυναμικός μεταγλωττιστής κατά την εκτέλεση. Η Huawei ισχυρίζεται ότι η στατική συλλογή του Ark Compiler επιλύει αυτό το πρόβλημα "μεταφράζοντας απρόσκοπτα τα δυναμικά χαρακτηριστικά της γλώσσας προγραμματισμού σε κώδικα μηχανής."
  • Οι υπάρχουσες διαδικασίες μεταγλώττισης πραγματοποιούνται κατά τη διάρκεια ή μετά την εγκατάσταση του πακέτου της εφαρμογής στην κινητή συσκευή. Το Ark Compiler έχει σχεδιαστεί για ανάπτυξη κατά την ανάπτυξη λογισμικού, το οποίο υποθέτουμε ότι βοηθά στην αφαίρεση των γενικών εξόδων χρόνου κατά την εγκατάσταση και την εκτέλεση. Υποθέτουμε ότι οι προγραμματιστές εφαρμογών θα μπορούν να μεταγλωττίσουν απευθείας διαφορετικές γλώσσες σε εγγενή κώδικα μηχανής κατά τη διάρκεια της εφαρμογής διαδικασία ανάπτυξης και το προκύπτον APK θα μπορούσε επομένως να μην χρειάζεται αλληλεπίδραση με διερμηνέα ή εικονική μηχανή λειτουργία. Αυτό θα μείωνε θεωρητικά τα γενικά έξοδα που σχετίζονται με το JNI, για παράδειγμα.
  • Το Ark Compiler αλλάζει επίσης τη συλλογική φύση του Garbage Collection. Επιτρέπει στα συμβάντα GC να συμβαίνουν χωριστά για διαφορετικά νήματα Java. Αυτή η τμηματοποιημένη προσέγγιση ισχυρίζεται ότι προσφέρει λιγότερα jank σε εφαρμογές στο προσκήνιο.

Ως αποτέλεσμα αυτών των αλλαγών, το Ark Compiler μπορεί φαινομενικά βελτιώνει την ευχέρεια λειτουργίας του συστήματος Android έως και 24%, την ταχύτητα απόκρισης έως και 44% και την ομαλότητα των εφαρμογών τρίτων έως και 60%, ισχυριζόμενος ότι φέρνει την απόδοση της εφαρμογής Android στο ίδιο επίπεδο με αυτό του iOS.

Το Ark Compiler είναι προς το παρόν μεταγλωττισμένο και βελτιστοποιημένο για αρχιτεκτονική τσιπ ARM. Η Huawei ελπίζει ότι στο μέλλον, ο συνεργατικός σχεδιασμός υλικού και λογισμικού θα λειτουργήσει για τη μεγιστοποίηση των δυνατοτήτων του τσιπ Kirin.

Το Ark Compiler υποστηρίζει τυπική χρήση 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 Compiler έχει αναπτυχθεί για να λειτουργεί με Android και η Huawei δεν έχει αναφέρει τίποτα σε σχέση με αυτό υποτιθέμενο homebrew OS και τη συμβατότητά του με το Ark Compiler, επομένως δεν κάνουμε τεκμήρια για αυτό το σκοπό.

Η Huawei σχεδιάζει να πραγματοποιήσει δύο μεγάλα συνέδρια αφιερωμένα στους προγραμματιστές και στο ευρύτερο οικοσύστημα. Πρόκειται για το Huawei Device China Developers Conference και το Green Alliance China Developers Conference. Και οι δύο εκδηλώσεις θα αντιμετωπίσουν συγκεκριμένα ζητήματα ανοιχτού κώδικα που σχετίζονται με το Ark Compiler της Huawei, σε μια προσπάθεια να γίνουν τα οφέλη αυτής της τεχνολογίας όσο το δυνατόν ευρύτερα προσβάσιμα.


Ιδιαίτερες ευχαριστίες στον Ανώτερο Αναγνωρισμένο Συνεργάτη XDA Dees_Troy και Αναγνωρισμένος Προγραμματιστής arter97 για τη βοήθεια και τις εισροές τους.

Σημείωση: Η Huawei/Honor σταμάτησε να παρέχει επίσημους κωδικούς ξεκλειδώματος του bootloader για τις συσκευές της. Επομένως, οι bootloaders των συσκευών τους δεν μπορούν να ξεκλειδωθούν, πράγμα που σημαίνει ότι οι χρήστες δεν μπορούν να κάνουν root ή να εγκαταστήσουν προσαρμοσμένες ROM.