מערכת ה-build של Android, שהושקה ב-Android 12, תומכת באופטימיזציה של מודולים של Android עם עקרונות ליצירת תוכנית באמצעות אופטימיזציה אוטומטית בהכוונה של משוב (AutoFDO). AutoFDO היא שיטת אופטימיזציה שמבוססת על דגימה. AutoFDO מתעד את התנהגות זמן הריצה של קובצי ה-binary של המערכת, ומאפשר למהדרים לבצע אופטימיזציה טובה יותר של הביצועים תוך צמצום הגודל של קובצי ה-binary. Android תומך באיסוף פרופילים ממכשירי X86, X86_64, ARM ו-ARM64, אבל אפשר להשתמש בפרופילים במגוון ארכיטקטורות.
AutoFDO הוא היורש של אופטימיזציה מבוססת-מכשור לפי פרופיל (PGO).
בהשוואה לפרופילים אחרים שמבוססים על אינסטרומנטציה, ל-AutoFDO יש את היתרונות הנוספים הבאים:
איסוף נתונים לא פולשני: אפשר לאסוף פרופילי AutoFDO ממכשירי פיתוח או מכשירים של משתמשים בלי לבצע שינויים שנועדו ליצור כללים.
ייצוג של שימוש בעולם האמיתי: AutoFDO מייצג את התנהגות השימוש בעולם האמיתי, בהנחה שהפרופילים נאספים ממכשירי המשתמשים, בעוד ש-PGO של מכשירי המדידה מייצג רק את עומס העבודה של האיסוף הסינתטי. בדרך כלל קשה ליצור עומס עבודה של קולקציה שתואמת בצורה מושלמת לשימוש בעולם האמיתי.
רוב הפרויקטים שחשובים לביצועים מגיעים עם AOSP עם פרופילים של AutoFDO. הפרופילים נאספו ממכשירי טלפון וטאבלט, והם מייצגים את דפוסי השימוש הכלליים שלהם. הפרופילים נמצאים בקטע toolchain/pgo-profiles/sampling
. התכונה AFDO מופעלת כברירת מחדל ב-AOSP.
הפעלת AutoFDO לכלל build של תוכנית אב
כדי להפעיל את AutoFDO בכללי ה-build של התוכנית, מוסיפים את הערך afdo: true
לספרייה המשותפת או לכלל הבינארי.
איסוף פרופילים
הפרופיל המצורף מראש שסופק עם AOSP לא תומך בתרחישים הספציפיים הבאים:
- הוספת פרויקטים נוספים של AutoFDO
- נוכחות של קוד שעבר שינוי באופן מקומי
- דפוסי שימוש ייחודיים שמשויכים למערכת
אם אחד מהתרחישים האלה רלוונטי לכם, עליכם לאסוף את הפרופילים ישירות ממכשירי הפיתוח או מהמכשירים של המשתמשים.
הוראות מפורטות לגבי הכנת מכשירי ARM לאיסוף פרופילים של AutoFDO זמינות במאמר איסוף נתוני ETM ל-AutoFDO.
במאמר Profcollect מוסבר איך מפעילים את האיסוף, העיבוד וההעלאה האוטומטיים של פרופיל הרקע.
ניתוח פרופילים של AutoFDO
מערכת Android משתמשת בפרופילים רגילים של LLVM AutoFDO. אפשר לקרוא את הפרופילים של AFDO באמצעות הכלי llvm-profdata
של ה-LLVM. הסקריפט afdo_summary.sh
(toolchain/pgo-profiles/scripts/afdo_summary.sh
) יוצר באופן אוטומטי את הפונקציות שמבוצעות בתדירות הגבוהה ביותר, בהתאם לפרופיל AutoFDO.