ב-Android מגרסה 11 ומעלה יש תמיכה ביצירת פרופילים של תמונות אתחול, שמכילים מידע על הקוד של רכיבים שונים ברמת המערכת, כמו שרת המערכת ונתיב המחלקה של האתחול. Android Runtime (ART) משתמש במידע הזה כדי לבצע אופטימיזציות ברמת המערכת. חלק מהאופטימיזציות האלה חיוניות לביצועים של Android ומשפיעות על ההרצה של כל הקוד הלא מקורי (ברמת המערכת או האפליקציה). במקרים מסוימים, פרופילים של תמונות אתחול יכולים להשפיע על ביצועי ההרצה ועל צריכת הזיכרון באחוזים דו-ספרתיים.
קבלת מידע על פרופיל ההפעלה
פרופילים של תמונות אתחול נגזרים מהפרופילים של אפליקציות שמופעלות במהלך תהליכים קריטיים שעוברים משתמשים (CUJ). בהגדרת מכשיר ספציפית, ART מתעד (כחלק מפרופילי ה-JIT) את השיטות והמחלקות של נתיב המחלקות של אתחול שמשמשות אפליקציות, ואז מתעד את המידע הזה בפרופיל האפליקציה (לדוגמה, /data/misc/profiles/cur/0/com.android.chrome/primary.prof
), שבו הוא עובר אינדוקס על ידי קובץ Dalvik EXecutable (DEX) של נתיב המחלקות של אתחול (ראו פורמט פרופיל ART).
כדאי לעיין בפרופילים של האפליקציות שתועדו במהלך CUJ כדי לקבוע באיזה חלק של נתיב המחלקה של האתחול נעשה הכי הרבה שימוש ומה הכי חשוב לאופטימיזציה (לדוגמה, אפשר לעיין בפורמט הפרופיל של 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 כולל בפרופיל גם את נתיב המחלקה של האתחול ואת קובצי ה-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 root
adb shell stop
adb shell setprop dalvik.vm.profilebootclasspath true
adb shell setprop dalvik.vm.profilesystemserver true
adb 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.prop
adb reboot
אפשרות 3: משתמשים בהגדרות המכשיר כדי להגדיר את המאפיינים הבאים בצד השרת:
adb shell device_config put runtime_native_boot profilebootclasspath true adb shell device_config put runtime_native_boot profilesystemserver true
יצירת פרופילים של תמונות אתחול
כדי ליצור פרופיל בסיסי של תמונת אתחול באמצעות בדיקה במכשיר יחיד, פועלים לפי ההוראות הבאות.
מגדירים את המכשיר.
מגדירים את המכשיר כמו שמתואר במאמר הגדרת מכשירים.
(אופציונלי) לוקח זמן עד שפורמט הפרופיל החדש מנקה ומחליף את הפרופילים האחרים. כדי להאיץ את איסוף הפרופילים, מאפסים את כל הפרופילים במכשיר.
adb shell stop
adb 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 dist
ls $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
.