אנדרואיד 11 ומעלה תומך ביצירת פרופילי תמונת אתחול, המקיפים מידע על הקוד של רכיבים שונים ברמת המערכת, כגון שרת מערכת ומסלול אתחול. Android Runtime (ART) משתמש במידע זה כדי לבצע אופטימיזציות כלל-מערכתיות, שחלקן קריטיות לביצועים של אנדרואיד ומשפיעות על ביצוע כל הקוד הלא מקורי (ברמת המערכת או האפליקציה). במקרים מסוימים, פרופילי תמונת אתחול יכולים להשפיע על ביצועי הביצוע וצריכת הזיכרון באחוזים דו ספרתיים.
קבל מידע על פרופיל האתחול
פרופילי תמונת אתחול נגזרים מהפרופילים של אפליקציות המופעלות במהלך מסעות משתמש קריטיים (CUJs). בתצורת מכשיר ספציפית, ART לוכד (כחלק מפרופילי JIT) את שיטות האתחול והמחלקות המשמשות את האפליקציות, ולאחר מכן מתעד מידע זה בפרופיל האפליקציה (לדוגמה, /data/misc/profiles/cur/0/com.android.chrome/primary.prof
), שבו הוא מתווסף לאינדקס על ידי קובץ האתחול בכיתה Dalvik EXEcutable (DEX) (ראה פורמט פרופיל ART ).
סקור את פרופילי האפליקציה שנרשמו במהלך CUJs כדי לקבוע איזה חלק ממסלול האתחול משמש הכי הרבה והכי חשוב לבצע אופטימיזציה (לדוגמה, ראה פורמט פרופיל ART ). הכללת כל השיטות או המחלקות משפיעה לרעה על הביצועים, לכן התמקד בנתיבי הקוד הנפוצים ביותר. לדוגמה, אם שיטה ממסלול האתחול משמשת אפליקציה בודדת, היא לא אמורה להיות חלק מפרופילי האתחול. כל מכשיר צריך להגדיר את בחירת השיטה/מחלקה בהתבסס על בחירת ה-CUJ וכמות הנתונים שהופקו על ידי בדיקה.
כדי לצבור מידע classpath אתחול מכל פרופילי האפליקציה הבודדים במכשיר, הפעל את פקודת adb shell cmd package snapshot-profile android
. אתה יכול להשתמש במידע המצטבר כבסיס לעיבוד ולבחירת שיטה/מעמד מבלי לצבור פרופילים בודדים באופן ידני (אם כי אתה יכול לעשות זאת אם תרצה).
איור 1. תהליך לקבלת פרופילי תמונת אתחול
נתוני פרופיל תמונת אתחול
פרופילי תמונת אתחול כוללים את הקבצים והנתונים הבאים.
פרופיל עבור כיתת האתחול (
frameworks/base/config/boot-image-profile.txt
). קובע אילו שיטות ממסלול האתחול עוברות אופטימיזציה, איזו מחלקה נכללת בתמונת האתחול.art
וכיצד קובצי DEX התואמים מונחים.רשימה של שיעורים טעונים מראש . קובע אילו מחלקות נטענות מראש ב-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
) או לשיטות שאולי לא נעשה בהן שימוש נפוץ אך עדיין חשובות (לדוגמה, שיטות בהן משתמש אפליקציית מצלמה).
פורמט הפרופיל מציין באופן פנימי כל שיטה עם מספר דגלים (אתחול, לאחר הפעלה, hotness, abi), וזה יותר ממה שמוצג בפורמט של dump בלבד. כדי לעשות שימוש בכל האותות, שנה את הסקריפטים הזמינים.
המלצות
השתמש בהנחיות הבאות לקבלת התוצאות הטובות ביותר.
פרוס את התצורה להפקת פרופילי תמונת אתחול במספר התקני בדיקה וצבור את התוצאות לפני יצירת פרופיל תמונת האתחול הסופי. הכלי
profman
תומך בצבירה ובחירת פרופילי תמונת אתחול מרובים, אך הוא פועל רק עם אותה גרסה של תמונת האתחול (אותו נתיב אתחול).תן עדיפות לבחירה לשיטות/מחלקות המשמשות את תהליכי המערכת. שיטות/מחלקות אלו עשויות להשתמש בקוד שאינו משמש לעתים קרובות על ידי אפליקציות אחרות, אך עדיין קריטי לביצוע אופטימיזציה.
צורת הנתונים מהפעלת מכשיר בודד נראית שונה מאוד בהשוואה למכשירי בדיקה שמבצעים CUJs בעולם האמיתי. אם אין לך צי גדול של התקני בדיקה, השתמש באותו מכשיר כדי להפעיל מספר CUJs כדי להגביר את הביטחון שהאופטימיזציות של פרופיל תמונת האתחול יעבדו היטב בייצור (תרחיש זה מתואר להלן).
הגדר התקנים
כדי לאפשר תצורת פרופיל אתחול דרך מאפייני מערכת, השתמש באחת מהשיטות הבאות.
אפשרות 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: השתמש בתצורת המכשיר כדי להגדיר את המאפיינים הבאים בצד השרת:
persist.device_config.runtime_native_boot.profilesystemserver persist.device_config.runtime_native_boot.profilebootclasspath`
צור פרופילי תמונת אתחול
השתמש בהוראות הבאות כדי ליצור פרופיל תמונת אתחול בסיסי באמצעות בדיקה במכשיר בודד.
הגדר את המכשיר.
הגדר את ההתקן כמתואר בהגדרת התקנים .
(אופציונלי) לוקח זמן לפורמט הפרופיל החדש לנקות ולהחליף את הפרופילים האחרים. כדי להאיץ את איסוף הפרופילים, אפס את כל הפרופילים במכשיר.
adb shell stop
adb shell find "/data/misc/profiles -name *.prof -exec truncate -s 0 {} \;"
adb shell start
הפעל את ה-CUJs במכשיר.
צלם את הפרופיל באמצעות הפקודה הבאה:
adb shell cmd package snapshot-profile android
חלץ את הפרופיל באמצעות הפקודה הבאה:
adb pull /data/misc/profman/android.prof
נווט אל קבצי JAR של classpath האתחול באמצעות הפקודות הבאות:
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
או בקוד המקור.-