לעיתים קרובות, הספק של מערכת המשנה של המכשיר נמדד ונרשם בסביבת מעבדה בתנאים שונים של מצב יציב, למשל כשהמסך דלוק או שהמכשיר נמצא במצב מנוחה. האפשרות הזו מתאימה לרכיבי משנה עם צריכת חשמל קבועה, או בתנאים שקל למדוד בסביבות מעבדה, אבל לא לתרחישי שימוש מסוימים, למשל כשמסך מציג סרטון.
IPower.hal 1.0
מספק ממשק להעברת
טיפים לחיסכון באנרגיה ולדיווח על נתונים מצטברים של מדדי מצב השינה של תת-המערכת.
ב-Android 10 ואילך, הפונקציה של דיווח על נתונים סטטיסטיים מצטברים נמצאת בממשקי ה-API של IPowerStats.hal
לאיסוף נתוני צריכת אנרגיה, ומספקת דרך לאחזר נתוני צריכת אנרגיה במכשיר. הוא מחליף את החלק של ממשק 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.
בגרסה 10 ואילך של Android, יצרן המכשיר יכול לבחור בין הפונקציות IPower.hal
ו-IPowerStats.hal
, אבל כל הלקוחות חייבים לעבור ל-IPower.hal
אם הפונקציה IPowerStats.hal
לא מיושמת .
אפשרויות הטמעה של IPowerStats.hal
רק הפונקציות IPower.hal
זמינות ב-Android מגרסה 7 ועד 9. במכשירים ששודרגו ל-Android 10 חייבת להיות מערכת משנה למעקב אחר צריכת החשמל בחומרה, או אמצעים אחרים למעקב ולתיעוד של נתונים סטטיסטיים של צריכת החשמל. חלק ממערכי ה-SoC אוספים בשבילכם נתונים סטטיסטיים על צריכת החשמל, או שתוכלו לקבל מידע על מיקום המצב של ישות החשמל באמצעות תוכנה. חומרה למעקב אחר צריכת החשמל נדרשת רק כדי לתמוך ב-getRailInfo()
, ב-getEnergyData()
וב-streamEnergyData()
.
אם מטמיעים את IPowerStats.hal
בלי חומרה למעקב אחר צריכת חשמל, הפונקציות getRailInfo(), getEnergyData()
ו-streamEnergyData()
מחזירות את הערך NOT_SUPPORTED
. באופן דומה, הפונקציות getPowerEntityInfo(), getPowerEntityStateInfo()
ו-getPowerEntityStateResidencyData()
עשויות להחזיר את הערך NOT_SUPPORTED
אם לא נועדו לשימוש.
דוגמאות לנתונים שמוחזרים על ידי ממשקי ה-API למעקב אחר רכבות:
- פסי החשמל של המסך צרכו X מיקרו-וואט.
- צריכת החשמל של המסילה לחשמל של המודם הייתה Y µW.
דוגמאות לנתונים שמוחזרים על ידי ממשקי ה-API של מצב השינה של תת-המערכת:
- המודם היה במצב שינה למשך X אלפיות השנייה.
- ה-SoC היה במצב קריסת מתח למשך Y אלפיות שנייה.
- ה-GPU היה במצב השהיה למשך Z אלפיות השנייה.
שימוש במערכת משנה למעקב אחר צריכת האנרגיה בחומרה
אם בתכנון המכשיר יש מערכת משנה למעקב אחר צריכת החשמל בחומרה, אפשר להטמיע את IPowerStats.hal
על ידי יצירת צומת sysfs יחיד שממנו PowerStats.hal
יכול לנתח נתונים, או על ידי יצירת אוסף של קריאות מערכת מסוג ioctl.
צריך להטמיע את מנהל הליבה באופן שימנע חריגה ממלאי (overflow) של המצטבר. האלגוריתם שבו נעשה שימוש תלוי בתכנון של מערכת המשנה הייחודית למעקב אחר צריכת החשמל בחומרה, שצריכה לספק מדידות של מתח וזרם מיידיים וממוצעים. מנהל ההתקן של הליבה צריך לתעד את הנתונים האלה באופן שלא מנקה את המצטברים של האנרגיה, וצריך לשמור את נתוני האנרגיה המצטברים של כל מסילה משנית מאז האתחול, בצורת משתנה של 64 ביט שמתווסף אליו קריאת האנרגיה מכל שאילתה של המצטבר.
הנתונים הסטטיסטיים של רכיב נתון (או של כמה רכיבים, אם רוצים) חייבים להיות בצומת יחיד. זהו שימוש לא קונבנציונלי ב-sysfs (בדרך כלל כל צומת מוגבל לערך יחיד), אבל הוא מבטיח שכל הנתונים יהיו עקביים.
הנחיות לעיצוב
- חשוב לשמור על זמן אחזור קצר (1 אלפית שנייה, לכל היותר) בזמן קריאה מהצומת sysfs או בזמן ביצוע קריאות למערכת.
- מוודאים שהפונקציונליות של נתונים סטטיסטיים תומכים לא מגדילה באופן משמעותי את צריכת החשמל:
- לא להגדיל את מספר ההפעלות של נקודת הגישה (AP) ו/או של תת-המערכת כדי לעקוב אחרי פרמטרים כמו הזמן שחלף במצב שינה.
- העברת נתונים סטטיסטיים בין מעבד האפליקציות לבין הקושחה באופן יזום, יחד עם תנועה אחרת כשהדבר אפשרי.
- אם יש צורך, מערכת המשנה עשויה להשתמש בפונקציות הנהג הבאות:
- אחסון נתונים במטמון פנימי כדי למנוע זמן אחזור או הפעלות מחדש, על חשבון נתונים שקצת לא מעודכנים.
- ביצוע אקסטרפולציה כשמערכת המשנה במצב שינה, כדי לספק זמן שינה מעודכן בלי להעיר את מערכת המשנה.
בחירת רכיבים, תת-מערכות ונתונים סטטיסטיים
כשבוחרים את הרכיבים או תת-המערכות שמהם רוצים לאסוף נתוני IPowerStats.hal
, צריך לבחור כל רכיב במכשיר שצורך זרם משמעותי (5 mA או יותר) או רכיב שתומך במספר מצבי צריכת אנרגיה, כמו:
- תת-מערכות SoC נפרדות.
- תת-מערכות שנמצאות מחוץ ל-SoC באופן חלקי או מלא, כמו WiFi, מעבד התמונות או מעבד האבטחה.
- ציוד היקפי כמו מצלמות ו-LEDs בהספק גבוה.
- תחומי כוח שמשתמשים במצבים שונים (כמו תחום הכוח של המעבד המשולב (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);