קיבולת היא הכמות הכוללת של משאב כלשהו (CPU, GPU וכו') שיש למכשיר במשך פרק זמן מסוים. דף זה מתאר כיצד לזהות ולטפל בבעיות זבל הקשורות לקיבולת.
המושל איטי בתגובה
כדי למנוע תקלות, מושל תדר ה-CPU צריך להיות מסוגל להגיב במהירות לעומסי עבודה מתפרצים. רוב יישומי ממשק המשתמש עוקבים אחר אותו דפוס בסיסי:
- המשתמש קורא את המסך.
- משתמש נוגע במסך: מקיש על כפתור, גלילה וכו'.
- גלילה על המסך, משנה פעילות או הנפשה בדרך כלשהי בתגובה לקלט.
- המערכת נפסקת עם הצגת תוכן חדש.
- המשתמש חוזר לקרוא את המסך.
מכשירי Pixel ו-Nexus מיישמים חיזוק מגע כדי לשנות את התנהגות מושל תדר (ומתזמן) של המעבד במגע. כדי למנוע רמפה איטית לתדר שעון גבוה (שיכול לגרום למכשיר להפיל מסגרות במגע), הגברת מגע מגדירה בדרך כלל רצפת תדר במעבד כדי להבטיח שקיבולת מעבד רבה זמינה במגע. רצפה מחזיקה מעמד למשך זמן מסוים לאחר המגע (בדרך כלל בסביבות שתי שניות).
Pixel משתמשת גם ב-cgroup schedtune שמסופקת על ידי Energy Aware Scheduling (EAS) כאות חיזוק מגע נוסף: יישומים מובילים מקבלים משקל נוסף באמצעות schedtune כדי להבטיח שהם מקבלים מספיק קיבולת CPU כדי לפעול במהירות. ל-Nexus 5X ול-6P יש פער ביצועים גדול בהרבה בין אשכולות ה-CPU הקטנים והגדולים (A53 ו-A57, בהתאמה) מאשר ה-Pixel עם ה-Kryo CPU. מצאנו שאשכול ה-CPU הקטן לא תמיד התאים לעיבוד חלק של ממשק המשתמש, במיוחד לאור מקורות אחרים של ריצוד במכשיר.
בהתאם לכך, ב-Nexus 5X ו-6P, הגברת מגע משנה את התנהגות המתזמן כדי להגדיל את הסיכוי שיישומי חזית יעברו לליבות הגדולות (זה דומה מבחינה רעיונית לקומה בתדר המעבד). ללא שינוי המתזמן כדי להגדיל את הסיכוי שיישומי חזית יעברו לאשכול ה-CPU הגדול, לאפליקציות הקדמיות עשוי להיות קיבולת מעבד לא מספקת לעיבוד עד שהמתזמן החליט להטעין את ה-thread לליבת מעבד גדולה. על ידי שינוי התנהגות המתזמן במהלך הגברת מגע, סביר יותר שהשרשור של ממשק המשתמש ירוץ מיד על ליבה גדולה וימנע ג'אנק מבלי לאלץ אותו לפעול תמיד על ליבה גדולה, דבר שעלול להיות בעל השפעות חמורות על צריכת החשמל.
מצערת תרמית
מצערת תרמית מתרחשת כאשר המכשיר חייב להפחית את התפוקה התרמית הכוללת שלו, המבוצעת בדרך כלל על ידי הפחתת שעוני CPU, GPU ו-DRAM. באופן לא מפתיע, זה גורם לעתים קרובות לחוסר תקינות מכיוון שהמערכת לא תוכל עוד לספק מספיק קיבולת לעיבוד בתוך פרק זמן נתון. הדרך היחידה להימנע ממצערת תרמית היא להשתמש בפחות חשמל. אין הרבה דרכים לעשות זאת, אבל בהתבסס על הניסיון שלנו עם SOCs בעבר, יש לנו כמה המלצות לספקי מערכות.
ראשית, בעת בניית SOC חדש עם ארכיטקטורות CPU הטרוגניות, ודא שעקומות הביצועים/W של אשכולות ה-CPU חופפים. עקומת הביצועים/W הכוללת עבור המעבד כולו צריכה להיות קו רציף. חוסר המשכיות בעקומת ה-perf/W מאלצת את המתזמן ומושל התדרים לנחש מה צריך עומס עבודה; כדי למנוע ג'אנק, מתזמן ומושל התדרים טועים בצד של לתת לעומס העבודה יותר קיבולת ממה שהוא דורש. זה מביא להוצאת יותר מדי כוח, מה שתורם למצערת תרמית.
תארו לעצמכם SOC היפותטי עם שני אשכולות מעבד:
- אשכול 1, האשכול הקטן, יכול להוציא בין 100-300mW ומקבל ציונים של 100-300 במדד תפוקה בהתאם לשעונים.
- Cluster 2, האשכול הגדול, יכול להוציא בין 1000 ל-1600mW ומקבל ציונים בין 800 ל-1200 באותו רף תפוקה בהתאם לשעונים.
במדד זה, ציון גבוה יותר מהיר יותר. אמנם לא רצוי יותר מאשר איטי יותר, מהיר יותר == צריכת חשמל גדולה יותר.
אם המתזמן מאמין שעומס עבודה של ממשק המשתמש ידרוש את הציון המקביל לציון של 310 במדד התפוקה הזה, האפשרות הטובה ביותר שלו להימנע מהפרעות היא להפעיל את האשכול הגדול בתדירות הנמוכה ביותר, ובזבוז כוח משמעותי. (זה תלוי בהתנהגות cpuidle ובמירוץ לסרק; קל יותר לבצע אופטימיזציה עבור SOCs עם עקומות פרf/W רציפות).
שנית, השתמש ב-cpusets. ודא שהפעלת cpusets בקרנל שלך וב- BoardConfig.mk
שלך. עליך גם להגדיר את הקצאות המעבד בפועל ב- init.rc
הספציפי למכשיר שלך. חלק מהספקים משאירים את זה מושבת ב-BSPs שלהם בתקווה שיוכלו להשתמש ברמזים אחרים כדי להשפיע על התנהגות המתזמן; אנחנו מרגישים שזה לא הגיוני. cpusets שימושיים להבטחת איזון העומס בין המעבדים נעשה באופן שמשקף את מה שהמשתמש עושה בפועל במכשיר.
ActivityManager מקצה אפליקציות למערכות הפעלה שונות על סמך החשיבות היחסית של אותן אפליקציות (עליון, חזית, רקע), כאשר יישומים חשובים יותר מקבלים יותר גישה לליבות מעבד. זה עוזר להבטיח איכות שירות עבור אפליקציות מובילות בחזית.
cpusets שימושיים בתצורות CPU הומוגניות, אך אין לשלוח מכשיר עם תצורת CPU הטרוגנית ללא cpusets מופעלים. Nexus 6P הוא מודל טוב לשימוש בערכות cpus על תצורות CPU הטרוגניות; השתמש בזה כבסיס לתצורת המכשיר שלך.
ערכות cpus מציעות גם יתרונות צריכת חשמל על ידי הבטחת שרשורי רקע שאינם קריטיים לביצועים לעולם אינם מאוזנים עומסים לליבות מעבד גדולות, שם הם יכולים להוציא הרבה יותר כוח ללא כל תועלת הנתפסת על ידי המשתמש. זה יכול לעזור למנוע גם מצערת תרמית. בעוד שמצערת תרמית היא בעיית קיבולת, לשיפורי ריצוד יש השפעה גדולה על ביצועי ממשק המשתמש בעת מצערת תרמית. מכיוון שהמערכת תרוץ קרוב יותר ליכולתה לרנדר 60FPS, דרוש פחות ריצוד כדי לגרום להורדת מסגרת.