נתוני כוח: HAL

בדרך כלל, ההספק של מערכת המשנה של המכשיר נמדד ומתועד בסביבת שיעור ה-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);