סטטיסטיקת כוח HAL

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

IPower.hal 1.0 מספק ממשק להעברת רמזי כוח ודיווח על נתונים מצטברים על מדדי מצב שינה של תת-מערכת. באנדרואיד 10 ומעלה, הפונקציה המצטברת של דיווח סטטיסטיקה נמצאת בממשקי ה-API של IPowerStats.hal power-stat, ומספקת דרך לאחזר נתוני שימוש באנרגיה במכשיר. זה מחליף את החלק המצטבר של איסוף הנתונים הסטטיסטיים של ממשק 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 , כדי לתאם את צריכת החשמל עם פעילות המעבד.
  • Batterystats , לשיפור ייחוס הסוללה על ידי שימוש בנתונים נמדדים במקום הערכת צריכת הסוללה מתוך קבועים מוגדרים מראש ב- power_profile.xml.

עם אנדרואיד 10 ומעלה, יצרן מכשיר רשאי לבחור בין הפונקציות IPower.hal לפונקציות IPowerStats.hal , אך כל הלקוחות חייבים לחזור ל- IPower.hal אם IPowerStats.hal אינו מיושם.

אפשרויות הטמעה של IPowerStats.hal

רק הפונקציות של IPower.hal זמינות באנדרואיד 7 עד אנדרואיד 9. מכשירים ששודרגו לאנדרואיד 10 חייבים להיות בעלי תת-מערכת לניטור כוח חומרה, או אמצעים אחרים זמינים לניטור ורישום סטטיסטיקות הספק. חלק מה-SoCs אוספים עבורך נתונים סטטיסטיים של צריכת חשמל, או שאתה עשוי לקבל מידע על תושבות המדינה של ישות כוח באמצעות תוכנה. חומרה לניטור כוח נחוצה רק כדי לתמוך ב- getRailInfo() , getEnergyData() ו- streamEnergyData() .

אם אתה מיישם IPowerStats.hal ללא חומרה לניטור כוח, getRailInfo(), getEnergyData() ו- streamEnergyData() יחזירו NOT_SUPPORTED . באופן דומה, getPowerEntityInfo(), getPowerEntityStateInfo() ו- getPowerEntityStateResidencyData() עשויים גם להחזיר NOT_SUPPORTED אם זה לא מיועד לשימוש.

דוגמאות לנתונים המוחזרים על ידי ממשקי API לניטור מסילות כוללות

  • מסילת החשמל לתצוגה צרכה X µW.
  • מסילת החשמל של המודם צרכה Y µW.

דוגמאות לנתונים המוחזרים על ידי ממשקי API של מצב שינה של תת-המערכת כוללות

  • המודם היה רדום X MS.
  • ה-SoC היה במצב קריסת כוח עבור Y ms.
  • ה-GPU היה במצב השעיה עבור Z ms.

השתמש בתת-מערכת לניטור כוח חומרה

אם לתכנון המכשיר שלך יש תת-מערכת לניטור כוח חומרה, יישם את IPowerStats.hal על ידי יצירת צומת sysfs יחיד שממנו PowerStats.hal יכול לנתח נתונים, או על ידי ביצוע אוסף של קריאות מערכת מסוג ioctl .

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

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

הנחיית עיצוב

  • שמור על זמן אחזור נמוך (1 msec, מקסימום) בעת קריאה מצומת sysfs או ביצוע שיחות מערכת.
  • ודא שהפונקציונליות התומכת בסטטיסטיקה אינה מגדילה באופן מדיד את צריכת החשמל:
    • אל תגדיל את נקודות הגישה (AP) ו/או את ההתעוררות של תת-מערכת כדי לעקוב אחר פרמטרים כגון זמן השהייה במצב שינה.
    • העבר נתונים סטטיסטיים בין מעבד היישומים לקושחה בצורה אופורטוניסטית עם תעבורה אחרת במידת האפשר.
  • במידת הצורך, תת-המערכת עשויה להשתמש בפונקציות מנהל ההתקן הבאות:
    • שמירה פנימית של נתונים במטמון כדי להימנע מהשהייה/התעוררות על חשבון נתונים מעט מיושנים.
    • ביצוע אקסטרפולציה כאשר תת המערכת ישנה, ​​כדי לספק זמן שינה מעודכן מבלי להעיר את תת המערכת.

בחר רכיבים, מערכות משנה וסטטיסטיקות

בעת בחירה מאילו רכיבים או תת-מערכות לאסוף נתוני IPowerStats.hal , בחר כל דבר במכשיר שצורך זרם משמעותי (5 mA או יותר), או שתומך במספר מצבי צריכת חשמל, כגון:

  • תת-מערכות SoC בודדות.
  • תת-מערכות מחוץ ל-SoC באופן חלקי או מלא, כגון WiFi, מעבד התמונה או מעבד האבטחה.
  • ציוד היקפי כגון נוריות LED ומצלמות בעוצמה גבוהה.
  • תחומי כוח המשתמשים במצבים שונים (כגון תחום הכוח עבור ה-SoC בכללותו).

התאמה אישית

תכונה אופציונלית זו ניתנת להתאמה אישית. עצב מקרי שימוש והתאם אישית את השימוש שלך:

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

מַתַן תוֹקֵף

בדיקות VTS מבטיחות שדרישות אנדרואיד מתקיימות. ההערות ב- 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);