Android מגרסה 11 ואילך תומך ביצירת פרופילים של קובצי אימג' לאתחול, שמכילים מידע על הקוד של רכיבים שונים ברמת המערכת, כמו שרת המערכת ונתיב המחלקה של האתחול. Android Runtime (ART) משתמש במידע הזה כדי לבצע אופטימיזציות בכל המערכת. חלק מהאופטימיזציות האלה חיוניות לביצועים של Android ומשפיעות על ההרצה של כל הקוד הלא מקורי (ברמת המערכת או האפליקציה). במקרים מסוימים, פרופילים של קובצי אימג' לאתחול יכולים להשפיע על ביצועי ההרצה ועל צריכת הזיכרון באחוזים דו-ספרתיים.
קבלת מידע על פרופיל ההפעלה
פרופילים של קובצי אימג' לאתחול נגזרים מהפרופילים של אפליקציות שמופעלות במהלך תהליכים קריטיים שעוברים משתמשים (CUJ). בהגדרת מכשיר ספציפית, ART מתעד (כחלק מפרופילי JIT) את השיטות והמחלקות של נתיב המחלקות של אתחול שמשמשות אפליקציות, ואז רושם את המידע הזה בפרופיל האפליקציה (לדוגמה, /data/misc/profiles/cur/0/com.android.chrome/primary.prof), שם הוא עובר אינדוקס על ידי קובץ Dalvik EXecutable (DEX) של נתיב המחלקות של אתחול (ראו פורמט פרופיל ART).
כדאי לעיין בפרופילים של האפליקציות שתועדו במהלך תרחישי השימוש הקריטיים כדי לקבוע באיזה חלק של נתיב המחלקה של אתחול המערכת נעשה הכי הרבה שימוש ומה הכי חשוב לבצע אופטימיזציה (לדוגמה, אפשר לעיין בפורמט הפרופיל של ART). הכללה של כל השיטות או המחלקות משפיעה לרעה על הביצועים, לכן כדאי להתמקד בנתיבי הקוד הנפוצים ביותר. לדוגמה, אם שיטה מנתיב המחלקה של אתחול המערכת נמצאת בשימוש באפליקציה אחת, היא לא צריכה להיות חלק מפרופילי האתחול. בכל מכשיר צריך להגדיר את הבחירה של השיטה או המחלקה על סמך הבחירה של CUJ וכמות הנתונים שנוצרו בבדיקה.
כדי לצבור מידע על נתיב המחלקה של אתחול מכל פרופילי האפליקציות האישיים במכשיר, מריצים את הפקודה adb shell cmd package snapshot-profile android. אפשר להשתמש במידע המצטבר כבסיס לעיבוד ולבחירת שיטה או סיווג, בלי לצבור באופן ידני פרופילים אישיים (אבל אפשר לעשות את זה אם רוצים).
איור 1. תהליך לקבלת פרופילים של קובץ אימג' לאתחול
נתוני פרופיל של קובץ אימג' לאתחול
פרופילים של תמונות אתחול כוללים את הקבצים והנתונים הבאים.
פרופיל עבור נתיב המחלקות של אתחול המערכת (
frameworks/base/config/boot-image-profile.txt). נקבעות בו השיטות מנתיב המחלקות של אתחול המערכת שעוברות אופטימיזציה והמחלקה שנכללת בתמונת.artשל אתחול המערכת.רשימה של כיתות שנטענו מראש. הערך הזה קובע אילו כיתות נטענות מראש ב-Zygote.
פרופיל לרכיבי השרת של המערכת (
frameworks/base/services/art-profile). הפרופיל קובע אילו שיטות משרת המערכת עוברות אופטימיזציה או קומפילציה, איזו מחלקה נכללת בתמונת האתחול.artואיך קובצי ה-DEX המתאימים מסודרים.
פורמט הפרופיל של ART
פרופיל ה-ART מתעד מידע מכל קובצי ה-DEX שנטענו, כולל מידע על שיטות שכדאי לבצע אופטימיזציה שלהן ועל מחלקות שמשמשות במהלך ההפעלה. כשהפרופיל של קובץ אימג' לאתחול מופעל, ART כולל בפרופיל גם את classpath של האתחול ואת קובצי ה-JAR של שרת המערכת, ומבצע אנוטציה לכל קובץ DEX עם שם החבילה שמשתמשת בו.
לדוגמה, כדי להוציא את הפרופיל של קובץ האימג' הגולמי לאתחול, מריצים את הפקודה הבאה:
adb shell profman --dump-only --profile-file=/data/misc/profman/android.profהפלט שמתקבל דומה לזה:
=== Dex files ===
=== profile ===
ProfileInfo [012]
core-oj.jar:com.google.android.ext.services [index=0] [checksum=e4e3979a]
hot methods: 520[], 611[] …
startup methods: …
classes: …
...
core-oj.jar:com.android.systemui [index=94] [checksum=e4e3979a]
hot methods: 520[], 521[]…
startup methods: …
classes: …
בדוגמה שלמעלה:
השיטה
core-oj.jarמוגדרת בקמפייןcom.google.android.ext.servicesובקמפייןcom.android.systemui. כל רשומה מפרטת את שני החבילות שנעשה בהן שימוש מתוךcore-oj.jar.בשני התהליכים נעשה שימוש בשיטה עם אינדקס DEX 520, אבל רק
systemuiבתהליך נעשה שימוש בשיטה עם אינדקס DEX 521. אותו עיקרון חל על שאר חלקי הפרופיל (לדוגמה, שיעורי ההפעלה).
במהלך עיבוד הנתונים, שיטות/מחלקות הסינון מבוססות על השימוש, והמערכת נותנת עדיפות לתהליכים ברמת המערכת (לדוגמה, שרת המערכת או systemui) או לשיטות שאולי לא נמצאות בשימוש נפוץ אבל עדיין חשובות (לדוגמה, שיטות שמשמשות את אפליקציית המצלמה).
בפורמט הפרופיל, כל שיטה מתויגת באופן פנימי בכמה דגלים (הפעלה, אחרי הפעלה, חום, abi), וזה יותר ממה שמוצג בפורמט dump-only. כדי להשתמש בכל האותות, צריך לשנות את הסקריפטים הזמינים.
המלצות
כדי לקבל את התוצאות הטובות ביותר, כדאי לפעול לפי ההנחיות הבאות.
פורסים את ההגדרה ליצירת פרופילים של תמונות אתחול בכמה מכשירי בדיקה ומצטברים את התוצאות לפני יצירת הפרופיל הסופי של תמונת האתחול. הכלי
profmanתומך בצבירה ובבחירה של כמה פרופילים של קובצי אימג' לאתחול, אבל הוא פועל רק עם אותה גרסה של קובץ האימג' לאתחול (אותו נתיב מחלקות של אתחול).העדיפות בבחירה ניתנת לשיטות או למחלקות שמשמשות תהליכי מערכת. יכול להיות שהשיטות או המחלקות האלה משתמשות בקוד שלא נמצא בשימוש באפליקציות אחרות, אבל עדיין חשוב לבצע אופטימיזציה שלו.
מבנה הנתונים מהרצה במכשיר יחיד נראה שונה מאוד בהשוואה למבנה הנתונים ממכשירי בדיקה שמבצעים תרחישי שימוש נפוצים בעולם האמיתי. אם אין לכם מספר גדול של מכשירי בדיקה, כדאי להשתמש באותו מכשיר כדי להריץ כמה תרחישי שימוש נפוצים, כדי להגדיל את רמת הביטחון שהאופטימיזציות של פרופיל תמונת האתחול יפעלו היטב בסביבת הייצור (התרחיש הזה מתואר בהמשך).
הגדרת מכשירים
כדי להפעיל את הגדרת פרופיל האתחול באמצעות מאפייני המערכת, משתמשים באחת מהשיטות הבאות.
אפשרות 1: הגדרה ידנית של מאפיינים (פועלת עד להפעלה מחדש):
adb rootadb shell stopadb shell setprop dalvik.vm.profilebootclasspath trueadb shell setprop dalvik.vm.profilesystemserver trueadb shell startאפשרות 2: שימוש ב
local.prop(אפקט קבוע עד למחיקת הקובץ). לשם כך:יוצרים קובץ
local.propעם התוכן:dalvik.vm.profilebootclasspath=true dalvik.vm.profilesystemserver=trueמריצים את הפקודות הבאות:
adb push local.prop /data/adb shell chmod 0750 /data/local.propadb reboot
אפשרות 3: משתמשים בהגדרות המכשיר כדי להגדיר את המאפיינים הבאים בצד השרת:
adb shell device_config put runtime_native_boot profilebootclasspath true adb shell device_config put runtime_native_boot profilesystemserver true
יצירת פרופילים של קובצי אימג' לאתחול
כדי ליצור פרופיל בסיסי של קובץ אימג' לאתחול באמצעות בדיקה במכשיר יחיד, פועלים לפי ההוראות הבאות.
מגדירים את המכשיר.
מגדירים את המכשיר כמו שמתואר במאמר הגדרת מכשירים.
(אופציונלי) עובר זמן עד שהפורמט החדש של הפרופיל מנקה את הפרופילים האחרים ומחליף אותם. כדי להאיץ את איסוף הפרופילים, מאפסים את כל הפרופילים במכשיר.
adb shell stopadb shell find "/data/misc/profiles -name *.prof -exec truncate -s 0 {} \;"adb shell startמריצים את תרחישי השימוש במכשיר.
מריצים את הפקודה הבאה כדי ללכוד את הפרופיל:
adb shell cmd package snapshot-profile androidמחזירים את הפרופיל באמצעות הפקודה הבאה:
adb pull /data/misc/profman/android.profכדי לנווט לקובצי ה-JAR של נתיב המחלקה של האתחול, משתמשים בפקודות הבאות:
m distls $ANDROID_PRODUCT_OUT/boot.zipמריצים את הפקודה
profmanהבאה כדי ליצור את פרופיל תמונת האתחול.profman --generate-boot-image-profile --profile-file=android.prof --out-profile-path=... --out-preloaded-classes-path=...בעזרת נתונים, משנים את הפקודה
profmanבאמצעות דגלי הסף הזמינים לבחירה.--method-threshold--class-threshold--clean-class-threshold--preloaded-class-threshold--upgrade-startup-to-hot--special-package
הרשימה המלאה זמינה
profmanבדף העזרה או בקוד המקור.