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