אופטימיזציה אוטומטית מבוססת-משוב (גרסה 12 ואילך)

מערכת ה-build של Android, שהוצגה ב-Android 12, תומכת באופטימיזציה של מודולים מקוריים של Android שיש להם כללי build של blueprint באמצעות אופטימיזציה אוטומטית מבוססת-משוב (AutoFDO). AutoFDO היא טכניקת אופטימיזציה מבוססת-דגימה. ‫AutoFDO מתעד את התנהגות זמן הריצה של קובצי הפעלה בינאריים של המערכת, ומאפשר לקומפיילרים לבצע אופטימיזציות טובות יותר של הביצועים תוך צמצום הגודל של קובץ ההפעלה הבינארי. מערכת Android תומכת באיסוף פרופילים ממכשירי X86,‏ X86_64,‏ ARM ו-ARM64, אבל אפשר להשתמש בפרופילים בכל הארכיטקטורות.

‫AutoFDO הוא המחליף של אופטימיזציה מבוססת-מכשור (PGO) מונחית-פרופיל.

בהשוואה לפרופילים אחרים שמבוססים על מכשור, ל-AutoFDO יש את היתרונות הנוספים הבאים:

  • איסוף נתונים לא פולשני: אפשר לאסוף פרופילים של AutoFDO ממכשירי פיתוח או ממכשירי משתמשים בלי לבצע שינויים בכללי הבנייה.

  • ייצוג של שימוש בעולם האמיתי: AutoFDO מייצג התנהגות שימוש בעולם האמיתי, בהנחה שהפרופילים נאספים ממכשירי משתמשים, בעוד ש-instrumentation PGO מייצג רק את עומס העבודה של האוסף הסינתטי. בדרך כלל לא פשוט ליצור עומס עבודה של איסוף נתונים שתואם באופן מושלם לשימוש בעולם האמיתי.

‫AOSP מגיע עם פרופילים של AutoFDO לרוב הפרויקטים שבהם הביצועים הם קריטיים. הפרופילים נאספו ממכשירים ניידים ומטאבלטים, והם מייצגים את דפוסי השימוש הכלליים שלהם. הפרופילים נמצאים בנתיב toolchain/pgo-profiles/sampling. התכונה AFDO מופעלת כברירת מחדל ב-AOSP.

הפעלת AutoFDO לכלל בנייה של תוכנית אב

כדי להפעיל את AutoFDO עבור כללי בנייה של תוכניות, מוסיפים 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.