מערכת ה-build של Android, שהושקה ב-Android 12, תומכת באופטימיזציה של מודולים מקומיים של Android שיש להם כללי build של תוכנית אב באמצעות אופטימיזציה אוטומטית מבוססת-משוב (AutoFDO). הכלי AutoFDO מבוסס על דגימה לעיבוד טקסט. AutoFDO מתעד את התנהגות המערכת בסביבת זמן הריצה בינאריים, מה שמאפשר מהדרים לבצע אופטימיזציות טובות יותר של ביצועים, והקטנת הגודל הבינארי. מערכת 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.
למידע על ההפעלה של איסוף אוטומטי של פרופילים ברקע, בעיבוד ובהעלאה: Profcollect.
ניתוח פרופילים של AutoFDO
מערכת Android משתמשת בפרופילים רגילים של LLVM AutoFDO. ניתן לקרוא את הפרופילים של AFDO
באמצעות הכלי llvm-profdata
של ה-LLVM. הסקריפט afdo_summary.sh
(toolchain/pgo-profiles/scripts/afdo_summary.sh
) יוצר באופן אוטומטי את הפונקציות שמבוצעות בתדירות הגבוהה ביותר, בהתאם לפרופיל AutoFDO.