Huawei פרסמה פרטים מרכזיים לגבי פעולתו של Ark Compiler החדש שלה, והבטיחה לשפר באופן דרסטי את ביצועי האפליקציה באנדרואיד. המשך לקרוא למידע נוסף
חלק גדול מהשיחה האחרונה סביב Huawei נסב סביב המצב הפוליטי המצער של החברה בגלל א צו ביצוע אמריקאי שהגביל חברות רבות לנהל עסקים עם Huawei. ההשלכות של החלטה מרכזית כזו הן עצומות מכדי לא לשים לב. אבל במציאות חלופית שבה צו הביצוע הזה לא קיים, Huawei הייתה נמצאת באור הזרקורים שלה חשף לאחרונה את Ark Compiler, החידוש האחרון שמתיימר לגשר על פער ביצועי האפליקציה בין אנדרואיד ל iOS.
לפני שצולל למה זה Ark Compiler, עלינו לקחת צעד אחורה ולהבין מהו מהדר ומה המטרה שהוא משרת במערכת אנדרואיד.
היסטוריה קצרה של מהדרים ומתורגמנים באנדרואיד
מהדר הוא תוכנת מחשב המתרגמת קוד משפה אחת לשפה אחרת, לעתים קרובות היא שפת מכונה מקומית. לאחר מכן ניתן לבצע זאת ישירות על ידי המחשב או להתבצע באמצעות תוכנה אחרת (מתורגמן). תרגום זה נחוץ מכיוון שאנו כותבים קוד בשפות תכנות קריאות לאדם (כמו Java ו קוטלין), בעוד שהמחשב מבין רק שפת מכונה מקומית (קוד בינארי בצורה של 1 ו 0). המהדר משמש אפוא כגשר בין ההוראות שאדם כותב לבין היכולת של המכונה להבין ולאחר מכן לבצע אותן. באיזו מהירות ויעילה ההמרה הזו והפרשנות שלאחר מכן מתרחשות מגדירה את היעילות של המהדר, לפיכך הצגת מתאם ישיר בין יעילות המהדר לביצועים ויעילות הקוד, ובהרחבה, אפליקציות.
Dalvik VM
בימיה הראשונים של אנדרואיד, מערכת ההפעלה השתמשה במה שכונה Dalvik VM (המתורגמן) יחד עם מהדר JIT (בדיוק בזמן). סרטון ישן יותר זה מ- Android Basics 101 של XDA TV הסדרה נוגעת ב-Dalvik VM וב-JIT, ששניהם שימשו את הצרכים של מערכות אנדרואיד מוקדמות שבהן היו שפע של אילוצי זיכרון. ה-Dalvik VM לקח Java bytecode והמיר אותו לקוד מכונה כאשר וכאשר היה צורך להפעיל את הקוד (ולכן Just-In-Time). זה היה הכרחי מכיוון ששטח אחסון בטלפונים היה מגבלה אמיתית אז, כך שגישה זו אפשרה לאפליקציות לעבוד עם גדלי קבצים קטנים יותר במערכת.
להידור ולפענוח של אפליקציות בזמן ריצה היה החיסרון של ביצועים איטיים יותר של האפליקציה, מכיוון שההידור יתבצע במקביל לזמן שהמשתמש משתמש באפליקציה.
לדלוויק היו גם מגבלות עם מנגנון איסוף האשפה שלה. Dalvik עקב אחר כל הקצאת זיכרון באופן קולקטיבי. ברגע ש-Dalvik קובע שחלק מהזיכרון כבר אינו בשימוש על-ידי התוכנית, הוא משחרר את הזיכרון הזה בחזרה לערמה ללא כל התערבות של המתכנת. תהליך זה נקרא Garbage Collection (GC), והוא נועד למצוא אובייקטי זיכרון בתוכנה שאין גישה אליה יותר ולאחר מכן לתבוע מחדש את המשאבים המשמשים אותם אובייקטים לפינוי זיכרון. המערכת קובעת מתי יש צורך ב-GC על בסיס קולקטיבי, כך שמפתחי אפליקציות לא יכולים לבחור מתי מתרחשים אירועי GC [אפילו ב-ART]. אז אם אירוע GC התרחש באמצע פעילות עיבוד אינטנסיבית כלשהי באפליקציית החזית, המערכת תשהה ביצוע התהליך והתחלת GC, ובכך להגדיל את זמן העיבוד ולהכניס "דיחה" בולטת ל- משתמשים.
אילוצים אלו ואחרים דחפו את גוגל לחקור גישות חלופיות לביצועים מהירים יותר.
זמן ריצה של אנדרואיד
עם אנדרואיד 4.4 KitKat, גוגל הציגה ART (זמן ריצה של אנדרואיד) בצורת תצוגה מקדימה עם מהדר AOT (Ahead-Of-Time) ועם אנדרואיד 5.0 Lollipop, גוגל הפילה את Dalvik לטובת ART כמתורגמן היחיד הזמין. ART עם AOT המיר קוד לשפת מכונה בזמן התקנת האפליקציה, במקום לחכות לבצע המרה כזו כשהאפליקציה בשימוש. גישה זו האיצה בכך את זמני השקת האפליקציה אך גם הציגה חסרונות בדמות זמני התקנה איטיים יותר ושימוש מוגבר בשטח הדיסק. כדי לאזן את הכל, גוגל מְאוּמָץ שילוב של AOT, JIT וקומפילציה מונחה פרופיל עם ART באנדרואיד 7.0 נוגט, כדי להבטיח שאף גורם אחד לא יושפע בצורה דרסטית.
ART גם עבדה על הפיכת Garbage Collection לפחות פולשני. תהליך ה-GC עבר אופטימיזציה להיות מהיר יותר בסך הכל עם פחות הפסקות (השהיה קצרה בודדת לעומת שתי ההפסקות של Dalvik), פחות פיצול ופחות שימוש בזיכרון. המצגת של גוגל ב-Google I/O 2014 מפרטת יותר את המגבלות של ה-GC של Dalvik והשיפורים של ART בנושא זה.
גם עם השינויים הללו במהלך השנים, הנחת היסוד של הגישה של גוגל כללה פרשנות של קוד במהלך הביצוע תוך שינוי התזמון של אלמנט ההידור (תרגום). Garbage Collection ממשיך גם להוות נקודת כאב עבור מפתחי אפליקציות בגלל האופי המפריע והקולקטיבי המובנה. ניתן לטעון, ביצועי האפליקציה של אנדרואיד סובלים כתוצאה מכך מכיוון שממשיכים להיות מעורבים תקורה.
Ark Compiler מאת Huawei
Huawei עבדה לפיתוח פתרון יעיל יותר וכתוצאה מכך שכרה מאות מומחים בתחום. התוצאה של המאמץ הזה היא ה- Ark Compiler, שלטענת Huawei הוא המהדר הסטטי הראשון אי פעם המאפשר תרגום ישיר לשפת מכונה, ומסיר לחלוטין את הצורך ב- מְתוּרגְמָן. Ark Compiler פותח גם במטרה למקסם את יעילות הריצה עבור Java ו-C, כך שתיאורטית צריך לראות את התוצאות הטובות ביותר עם שפות אלו.
Huawei מציגה כמה תכונות עיקריות של מהדר ארק כדלקמן:
- טכניקות קומפילציה כמו AOT ו-JIT יכולות להמיר כמה תוכניות לקוד מכונה ולהריץ אותן ישירות על המעבד, אך טכניקות אלו אינן מסוגלות להתנתק לחלוטין מהמתורגמן ומהמגבלות הנלוות אליו. מהדר ארון משתמש בקומפילציה סטטית, המאפשרת לו להתנתק מהמתורגמן הדינמי, ופותחת את האפשרות להגביר את ביצועי האפליקציה על ידי "קפיצות וגבולות."
- להידור סטטי יש חיסרון פוטנציאלי של קשיחה מדי ואי יכולת לבצע התאמות שמהדר דינמי יכול לבצע במהלך הביצוע. Huawei טוענת שההידור הסטטי של Ark Compiler פותר את זה "על ידי תרגום חלק של התכונות הדינמיות בשפת התכנות לקוד מכונה."
- תהליכי קומפילציה קיימים מתרחשים במהלך או לאחר התקנת חבילת האפליקציה במכשיר הנייד. Ark Compiler מיועד לפריסה במהלך פיתוח תוכנה, אשר אנו מניחים עוזר להסיר תקורה של זמן במהלך ההתקנה והביצוע. אנו מניחים שמפתחי אפליקציות יוכלו לבצע קומפילציה ישירה של שפות שונות לקוד מכונה מקורי במהלך האפליקציה תהליך הפיתוח, ולכן ה-APK שנוצר לא יכול היה להזדקק לאינטראקציה עם מתורגמן או מכונה וירטואלית פוּנקצִיָה. זה יפחית באופן תיאורטי את התקורות הקשורות ל-JNI, למשל.
- Ark Compiler משנה גם את האופי הקולקטיבי של Garbage Collection. זה מאפשר לאירועי GC להתרחש בנפרד עבור שרשורי Java שונים. הגישה המדורגת הזו מתיימרת להציע פחות ג'אנק באפליקציות בחזית.
כתוצאה משינויים אלה, Ark Compiler יכול שפר לכאורה את שטף פעולת מערכת אנדרואיד בעד 24%, מהירות תגובה בעד 44%, ואת החלקות של יישומי צד שלישי בעד 60%, בטענה להביא את ביצועי אפליקציית אנדרואיד באותה רמה כמו זו ב-iOS.
ה-Ark Compiler כרגע מורכב ומוטב עבור ארכיטקטורת שבב ARM. Huawei מקווה שבעתיד, עיצוב חומרה ותוכנה שיתופי יפעל למקסום יכולות שבב Kirin.
ה-Ark Compiler תומך בשימוש סטנדרטי ב-Java, מה שמאפשר הידור ישיר של אפליקציות צד שלישי ללא צורך במפתח האפליקציה לבצע כל שינוי בקוד. Ark Compiler מאפשר גם "התאמות למבנה הקוד" לשיפורים נוספים בביצועים ובזיכרון. Huawei בחרה להפוך את Ark Compiler למערכת קוד פתוח, שתאפשר למפתחי צד שלישי לאמץ ולהתאים את הטכנולוגיה לצרכיהם, ולקדם את אימוצה עם מפתחי אפליקציות וטלפון נייד יצרנים.
בעוד ש-Huawei לא מזכירה חסרונות כלשהם ל- Ark Compiler, אפשר לצפות לגדלים גדולים של אפליקציות כבר ממש לפחות, אבל זה לא אמור להוות בעיות במכשירים מהדור הנוכחי שמגיעים עם מספיק אִחסוּן. אנו גם מצפים ש-Ark Compiler לא יהיה זמין עבור כל ארכיטקטורות ה-CPU, מכיוון שבעיות התאימות של גוגל אינן כאב הראש של Huawei. Ark Compiler מיועד לשימוש במהלך הפיתוח ולא במהלך ההתקנה; זה מציג אינדיקציה לכך שייתכן ש-Huawei שינתה את אופן הפריסה וההתקנה של אפליקציות במכשירי אנדרואיד, וייתכן שגם עבדה על עיצוב ה-APK שלהם. אם נכון, זה עלול להוות בעיית תאימות גדולה במערכת האקולוגית, ויעבור זמן רב עד שזה יהפוך לתכונת אנדרואיד סטנדרטית, אם בכלל.
אי קומפילציה במכשיר של משתמש מעלה גם שאלה גדולה לגבי אופטימיזציה. ART מבצע כרגע אופטימיזציה על בסיס ארכיטקטורה של מיקרו, כלומר הבינארי המתקבל יהיה שונה עבור מכשיר Snapdragon לעומת מכשיר Exynos, או אפילו עבור Snapdragon 845 לעומת Snapdragon 625. גישה זו הגיונית עבור יצרנים שיש להם שליטה מלאה ב-SoC, כמו אפל ו-Huawei. עם זאת, כאשר שאר עולם האנדרואיד משתמש ב-SoCs רבים ושונים, כפיית אופטימיזציה גנרית לשימוש במכשירים תהווה מחסום לסטנדרטיזציה של ה- Ark Compiler, שוב. כתוצאה מכך, אל תצפה של Ark Compiler להגיע ל-ROM המותאם אישית המועדף עליך בזמן הקרוב.
לשם הבהרה, ה-Ark Compiler פותח לעבודה עם אנדרואיד, ו-Huawei לא ציינה דבר ביחס אליו מערכת הפעלה ביתית לכאורה ותאימותו ל-Ark Compiler, אז אין לנו הנחות בעניין זה.
Huawei מתכננת לקיים שני כנסים מרכזיים המוקדשים למפתחים ולמערכת האקולוגית הגדולה יותר. אלה הם ועידת המפתחים של Huawei Device China ו- Green Alliance China Developers Conference. שני האירועים יתייחסו לבעיות ספציפיות של קוד פתוח הקשורות ל-Ark Compiler של Huawei, במאמץ להפוך את היתרונות של טכנולוגיה זו לנגישה ככל האפשר.
תודה מיוחדת לתורם בכיר ב-XDA דיס_טרויה ומפתח מוכר arter97 על הסיוע והתשומות שלהם.
הערה: Huawei/Honor הפסיקו לספק קודי נעילה רשמיים של טוען האתחול עבור המכשירים שלה. לכן, לא ניתן לבטל את נעילת מטעני האתחול של המכשירים שלהם, מה שאומר שמשתמשים לא יכולים לבצע רוט או להתקין ROM מותאמים אישית.