ניהול ביצועים

ניהול העוצמה והביצועים של מכשירי אנדרואיד יכול לעזור להבטיח שיישומים יפעלו באופן עקבי וחלק על מגוון רחב של חומרה. באנדרואיד 7.0 ואילך, יצרני OEM יכולים ליישם תמיכה ברמזים לביצועים מתמשכים המאפשרים לאפליקציות לשמור על ביצועי מכשיר עקביים ולציין ליבה בלעדית כדי לשפר את הביצועים עבור יישומי קדמה עתירי CPU.

ביצועים מתמשכים

עבור יישומים ארוכי טווח (משחקים, מצלמה, RenderScript , עיבוד אודיו), הביצועים עשויים להשתנות באופן דרמטי ככל שמגיעים למגבלות טמפרטורת המכשיר ומנועי מערכת על שבב (SoC) מצטמצמים. מפתחי אפליקציות היוצרים אפליקציות בעלות ביצועים גבוהים וארוכי טווח מוגבלות מכיוון שהיכולות של הפלטפורמה הבסיסית הן מטרה נעה כאשר המכשיר מתחיל להתחמם.

כדי לטפל במגבלות אלו, אנדרואיד 7.0 הציגה תמיכה בביצועים מתמשכים, המאפשרת ליצרני OEM לספק רמזים לגבי יכולות ביצועי המכשיר עבור יישומים ארוכי טווח. מפתחי אפליקציות יכולים להשתמש ברמזים אלה כדי לכוונן יישומים לרמה צפויה ועקבית של ביצועי המכשיר לאורך תקופות זמן ארוכות.

ארכיטקטורה

אפליקציית אנדרואיד יכולה לבקש מהפלטפורמה להיכנס למצב ביצועים מתמשכים שבו מכשיר האנדרואיד יכול לשמור על רמת ביצועים עקבית לפרקי זמן ממושכים.

איור 1. ארכיטקטורת מצב ביצועים מתמשכים

יישום

כדי לתמוך בביצועים מתמשכים באנדרואיד 7.0 ואילך, יצרני OEM חייבים:

  • בצע שינויים ספציפיים למכשיר ב-HAL הכוח כדי לנעול את תדרי המעבד/GPU המקסימליים או לבצע אופטימיזציות אחרות כדי למנוע מצערת תרמית.
  • יישם את הרמז החדש POWER_HINT_SUSTAINED_PERFORMANCE בכוח HAL.
  • הצהר על תמיכה על ידי החזרת TRUE דרך ה-API isSustainedPerformanceModeSupported() .
  • יישום Window.setSustainedPerformanceMode .

ביישום ההתייחסות של Nexus, רמז הכוח מגביל את התדרים המקסימליים של ה-CPU וה-GPU ברמות הקיימות הגבוהות ביותר. זכור שהורדת סרגל ה-MAX בתדר CPU/GPU תוריד את קצב הפריימים, אך קצב נמוך יותר זה מועדף במצב זה בשל קיימותו. לדוגמה, מכשיר המשתמש בשעונים מקסימליים רגילים עשוי להיות מסוגל לרנדר ב-60 FPS למשך מספר דקות, אך לאחר שהמכשיר מתחמם, הוא עשוי להגיע ל-30 FPS בתום 30 דקות. בעת שימוש במצב מתמשך, המכשיר יכול, למשל, לבצע רינדור עקבי ב-45 FPS במשך כל 30 הדקות. המטרה היא קצב פריימים בעת שימוש במצב שהוא גבוה (או גבוה יותר) מקצב הפריימים כאשר לא משתמשים במצב, ועקבי לאורך זמן כך שמפתחים לא יצטרכו לרדוף אחרי מטרה נעה.

אנו ממליצים בחום ליישם מצב מתמשך כך שהמכשיר ישיג את הביצועים המתמשכים הגבוהים ביותר האפשריים - לא רק את הערכים המינימליים הנדרשים כדי לעבור את הבדיקה (למשל בחר את מכסי התדר הגבוהים ביותר האפשריים של MAX שלא גורמים למכשיר להצטמצם תרמית לאורך זמן).

הערה : אין צורך במכסה של קצבי שעון MAX כדי ליישם מצב מתמשך.

מַתַן תוֹקֵף

יצרני ציוד מקורי יכולים להשתמש במבחן CTS (אנדרואיד 7.0 ואילך) כדי לאמת את היישום שלהם של API לביצועים מתמשכים. הבדיקה מפעילה עומס עבודה למשך כ-30 דקות ומעמידה את הביצועים עם ובלי מצב מתמשך מופעל:

  • כאשר מצב מתמשך מופעל, קצב הפריימים חייב להישאר קבוע יחסית (הבדיקה מודדת את אחוז השינוי בקצב הפריימים לאורך זמן ודורשת שינוי של <5%).
  • כאשר מצב מתמשך מופעל, קצב הפריימים לא יהיה נמוך מקצב הפריימים בתום 30 דקות כשהמצב מושבת.

בנוסף, אתה יכול לבדוק באופן ידני את ההטמעה שלך עם מספר עומסי עבודה עתירי CPU ו-GPU כדי להבטיח שהמכשיר אינו מצער תרמית לאחר 30 דקות של שימוש. בבדיקות פנימיות, השתמשנו בעומסי עבודה לדוגמה, כולל משחקים ואפליקציות בנצ'מרק (למשל gfxbench ).

ליבות בלעדיות

עבור עומסי עבודה עתירי מעבד ורגישים לזמן, הקדמה על ידי שרשור אחר יכול להיות ההבדל בין ביצוע מועדי מסגרת או לא. עבור אפליקציות שיש להן דרישות חביון וקצב פריימים קפדניות (כגון אפליקציות שמע או מציאות מדומה), ליבת מעבד בלעדית יכולה להבטיח רמת ביצועים מקובלת.

מכשירים המריצים אנדרואיד 7.0 ואילך יכולים כעת לשמור ליבה אחת באופן מפורש עבור יישום החזית העליון, לשפר את הביצועים עבור כל אפליקציות החזית ולהעניק לאפליקציות עם עומסי עבודה בעוצמה גבוהה יותר שליטה על האופן שבו העבודה שלהם מוקצית על פני ליבות המעבד.

כדי לתמוך בליבה בלעדית במכשיר:

  • הפעל cpusets והגדר cpuset שמכיל רק את יישום החזית העליון.
  • ודא שליבה אחת (זוהי הליבה הבלעדית) שמורה לשרשורים מ- cpuset זה.
  • יישם את ה-API של getExclusiveCores כדי להחזיר את מספר הליבה של הליבה הבלעדית.

כדי לקבוע אילו תהליכים מתוזמנים באילו ליבות, השתמש systrace בזמן הפעלת עומס עבודה כלשהו וודא שאין שרשורי מרחב משתמש מיישומים מלבד יישום החזית העליון מתוזמנים בליבה הבלעדית.

כדי להציג יישום עזר עבור Nexus 6P, עיין ב- android//device/huawei/angler/power/power.c .