בדרך כלל, ההספק של מערכת המשנה של המכשיר נמדד ומתועד בסביבת שיעור ה-Lab במצבים שונים של מצב יציב, כמו למשל כשהמסך מופעל, המכשיר נמצא במצב אספקת חשמל לא פעיל. הפעולה הזאת פועלת במערכות משנה עם ערך קבוע באמצעות צריכת חשמל, או בתנאים שניתן למדוד בקלות בסביבות של שיעור Lab, אך לא בתרחישי שימוש מסוימים, למשל כאשר מוצג במסך סרטון.
IPower.hal 1.0
מספק ממשק למעבר
רמזים לעוצמה ודיווח על נתונים מצטברים לגבי מדדי מצב שינה של מערכת משנה.
ב-Android מגרסה 10 ואילך, הפונקציה לדיווח על נתונים סטטיסטיים מצטברים
נמצא ב-IPowerStats.hal
ממשקי ה-API לאיסוף סטטיסטיקות כוח, וכן
מספק דרך לאחזר את נתוני השימוש באנרגיה במכשיר. היא מחליפה את
חלק מהנתונים המצטברים של ממשק IPower.hal
,
כדי לאפשר הפרדה ברורה יותר בין הפונקציונליות.
מדידות השירות של IPowerStats
לא תקופתיות. הן מתרחשות בתאריך
רגעים משמעותיים, למשל כאשר יש ירידה של 1% בסוללה. הקריאות מתבצעות בתדירות נמוכה יותר
כשרמת הטעינה של הסוללה נמוכה, ובתדירות גבוהה יותר כשרמת הטעינה גבוהה. הנתונים עשויים להיות
נשלחים בחזרה לשרתים, ויכול להיות שישמשו בדוחות באגים לצורכי ניתוח ותעדוף.
המצב הזה תומך במאמצים השוטפים להפחית את צריכת החשמל ולהגדיל את
חיי הסוללה.
IPower.hal ו-IPowerStats.hal
גם הממשק IPower.hal
וגם הממשק
IPowerStats.hal
זמינים ב-Android 10, אבל
IPower.hal
הפונקציונליות של איסוף נתונים סטטיסטיים היא רק
זמין בממשק של IPowerStats.hal
.
הפונקציונליות של IPowerStats.hal
כוללת ממשקי API להוספה ולשימוש
נתונים שנאספים ממדידות של צריכת החשמל במכשיר לגבי מכשירים נתמכים:
- ביצוע מדידות אנרגיה ברמת הרכבת עבור תדר נמוך
(
getRailInfo
) ותדירות גבוהה (streamEnergyData
) ומדווח על אנרגיה שנצברה מאז האתחול. - דיווח על מידע שקשור לכל
PowerEntity
נתמך שלנתונים זמינים.PowerEntity
הוא תת-מערכת של פלטפורמה, ציוד היקפי או דומיין חשמל שמשפיע על של צריכת החשמל במכשיר. - מדווח על קבוצת המצבים של ישות החזקה (
getPowerEntityStateInfo
) שלגביהן הישויות שצוינו מספקות נתוני מיקום, ואז ידווחו על הנתונים שנצברו לכלPowerEntity
שצוין.
ממשקי ה-API של IPowerStats.hal
נמצאים בשימוש על ידי הלקוחות הבאים:
Statsd
, כדי לאסוף מדדים של צריכת חשמל לפי רכבת.Perfetto
, כדי להתאים בין צריכת החשמל למעבד (CPU) פעילות.Batterystats
, כדי לשפר את שיוך הסוללה על ידי שימוש במדידה נתונים ולא להעריך את צריכת הסוללה על סמך קבועים מוגדרים מראש בעודpower_profile.xml.
עם Android 10 ואילך, יצרן המכשיר יכול לבחור מבין האפשרויות הבאות
את הפונקציות IPower.hal
ואת IPowerStats.hal
, אבל
כל הלקוחות חייבים לחזור אל IPower.hal
אם
IPowerStats.hal
לא הוטמע .
אפשרויות יישום של IPowerStats.hal
רק הפונקציות של IPower.hal
זמינות ב-Android 7
באמצעות Android 9. מכשירים ששודרגו ל-Android 10 חייבים
כוללים מערכת משנה לניטור צריכת חשמל, או אמצעים אחרים שזמינים לניטור
ומתעדים סטטיסטיקות כוח. מתבצע איסוף של חלק מרכיבי ה-SoC
נתונים סטטיסטיים של השימוש בחשמל. לחלופין, אפשר לקבל תושבות של מצב של ישות חשמל.
מידע באמצעות תוכנה. חומרת המעקב אחר חשמל נחוצה רק כדי
תמיכה ב-getRailInfo()
, ב-getEnergyData()
וב
streamEnergyData()
.
אם מטמיעים את IPowerStats.hal
ללא ניטור כוח
חומרה, getRailInfo(), getEnergyData()
, ו-
streamEnergyData()
מחזירה NOT_SUPPORTED
. באופן דומה,
getPowerEntityInfo(), getPowerEntityStateInfo()
, וגם
getPowerEntityStateResidencyData()
עשוי גם לחזור
NOT_SUPPORTED
אם לא התכוונת להשתמש בו.
דוגמאות לנתונים שהוחזרו על ידי ממשקי API למעקב אחרי רכבות:
- מסילת החשמל של המסך צריכה לצרוך X μW.
- מסילת החשמל של המודם צריכה Y μW.
דוגמאות לנתונים שמוחזרים על ידי ממשקי API של מצב שינה במערכת המשנה:
- המודם היה במצב שינה במשך X אלפיות השנייה.
- ה-SoC היה במצב כיווץ כוח עבור Y אלפיות השנייה.
- ה-GPU היה במצב השעיה של Z אלפיות השנייה.
שימוש במערכת משנה למעקב אחרי צריכת חשמל בחומרה
אם בעיצוב המכשיר שלך יש מערכת משנה למעקב אחרי צריכת חשמל, צריך להטמיע
IPowerStats.hal
על ידי יצירת צומת sysfs יחיד
שממנה PowerStats.hal
יוכל לנתח נתונים, או על ידי יצירת
אוסף של קריאות מערכת מסוג ioctl.
עליכם להטמיע את מנהל התקן הליבה באופן שמונע צבירה גלישה. האלגוריתם שבו נעשה שימוש תלוי בניטור החשמל הייחודי שלך בחומרה תת-מערכת, שחייבת לספק גם מתח מיידי וגם מתח ממוצע באוטובוס והמדידות הנוכחיות שלו. מנהל ההתקן של הליבה צריך לתעד את הנתונים האלה באופן שלא מנקה את מאגרי האנרגיה, והוא חייב לשמור את נתוני האנרגיה המצטברים של כל רכבת משנה מאז האתחול, בצורת משתנה שהועלה עם קריאת האנרגיה מכל מצבר שאילתה.
הנתונים הסטטיסטיים עבור רכיב נתון (או לחלופין, מספר רכיבים) חייבים להיות צומת יחיד. זה לא שימוש רגיל ב-sysf (שבדרך כלל מגביל כל צומת לערך אחד), מבטיח שכל הנתונים עקביים.
הנחיות לעיצוב
- חשוב לשמור על זמן אחזור קצר (אלפיות שנייה, מקסימום) בקריאה מ sysfs או ביצוע קריאות מערכת.
- מוודאים שתמיכה בפונקציונליות של נתונים סטטיסטיים לא מגדילה באופן ניתן למדידה התרוקנות אנרגיה:
- אין להגדיל את נקודת הגישה (AP) ו/או את אירועי היציאה של מערכת המשנה למעקב פרמטרים כמו משך הזמן שהוקדש במצב שינה.
- העברת נתונים סטטיסטיים בין מעבד האפליקציות לקושחה מדי פעם עם תנועה אחרת, כשהדבר אפשרי.
- במקרה הצורך, מערכת המשנה עשויה להשתמש בפונקציות הבאות של מנהלי התקנים:
- שמירת נתונים במטמון באופן פנימי כדי למנוע זמן אחזור/התעוררות על חשבון מעט נתונים מיושנים.
- ביצוע אקסטרפולציה כשמערכת המשנה במצב שינה, כדי לספק נתונים מעודכנים מבלי להוציא את מערכת המשנה ממצב שינה.
בחירה של רכיבים, מערכות משנה ונתונים סטטיסטיים
כשבוחרים מאילו רכיבים או מערכות משנה שמהם יתאספו
נתונים של IPowerStats.hal
, יש לבחור את כל הפריטים במכשיר שצורכים
זרם משמעותי (5 מיליאמפר לשעה או יותר), או שתומך ב
כמה מצבים של צריכת חשמל, כמו:
- מערכות משנה נפרדות של SoC.
- מערכות משנה מחוץ ל-SoC באופן חלקי או מלא, כמו Wi-Fi, במעבד התמונה או במעבד האבטחה.
- ציוד היקפי כמו נורות LED בעוצמה גבוהה ומצלמות.
- דומיינים מתקדמים שמשתמשים במצבים שונים (למשל, דומיין הכוח של ה-SoC בכללותו).
התאמה אישית
התכונה האופציונלית הזו ניתנת להתאמה אישית. עיצוב תרחישים לדוגמה ולהתאים אישית את השימוש:
- צריך להחליט אילו מסילות למדוד ובאיזו תדירות למדוד אותן.
- מחליטים מתי לקרוא את הנתונים ואיך לפרש אותם.
- מחליטים איזו פעולה לבצע ומתי לבצע אותה על סמך הנתונים שלכם.
אימות
בדיקות VTS מוודאות שה-Android עומד בדרישות. התגובות ב
באמצעות IPowerStats.hal
ניתן לאמת שהמכשיר נמצא
תאימות למדיניות.
לדוגמה, אם קוראים לפונקציה getRailInfo()
ולא מקבלים תשובה,
בדיקת VTS נכשלה כי לא קיבלת מידע על
או סטטוס מוחזר של SUCCESS
. באופן דומה, אם קיבלתם
מידע על הרכבת, אבל הוא ליווה NON_SUPPORTED
או
התשובה FILE_SYSTEM_ERROR
, גם הפעולה הזו נכשלה. VTS
מאמת את תאימות מפרט יצרן המכשיר בקובץ ה-HAL,
באמצעות הדרישות בתגובות של IPower.hal ו-IPowerStats.hal.
דוגמה להערות שנעשה בהן שימוש בבדיקת VTS מוצגת למטה:
/** * Rail information: * Reports information related to the rails being monitored. * * @return rails Information about monitored rails. * @return status SUCCESS on success or NOT_SUPPORTED if * feature is not enabled or FILESYSTEM_ERROR on filesystem nodes * access error. */ getRailInfo() generates(vec<e;RailInfo>e; rails, Status status);