آمار توان HAL

توان زیرسیستم دستگاه اغلب در محیط آزمایشگاهی برای شرایط مختلف حالت پایدار، مانند زمانی که صفحه‌نمایش روشن است یا دستگاه در حالت توان بیکار است، اندازه‌گیری و ثبت می‌شود. این روش برای زیرسیستم‌هایی با مصرف برق ثابت یا در شرایطی که به‌راحتی در محیط آزمایشگاهی قابل‌اندازه‌گیری هستند، کار می‌کند، اما برای برخی موارد استفاده، مانند زمانی که صفحه‌نمایش ویدیو پخش می‌کند، کار نمی‌کند.

IPower.hal 1.0 رابطی برای انتقال نکات قدرت و گزارش داده‌های تجمعی درباره سنجه‌های وضعیت خواب زیرسیستم ارائه می‌دهد. در Android نسخه ۱۰ و بالاتر، عملکرد گزارش‌دهی آمار تجمعی در میاناهای برنامه‌سازی کاربردی جمع‌آوری آمار مصرف برق IPowerStats.hal قرار دارد و روشی برای بازیابی داده‌های مصرف انرژی درون دستگاه ارائه می‌دهد. این بخش جایگزین بخش جمع‌آوری آمار تجمعی رابط IPower.hal می‌شود تا عملکردها را به‌طور واضح‌تری از هم جدا کند.

قرائت‌های سرویس IPowerStats دوره‌ای نیست. این رویدادها در لحظات کلیدی رخ می‌دهند، مثلاً وقتی شارژ باتری ۱٪ کاهش می‌یابد. وقتی تخلیه باتری کم باشد، خوانش‌ها کمتر و وقتی زیاد باشد، بیشتر انجام می‌شود. داده‌ها ممکن است به سرورها برگردانده شود و ممکن است در گزارش‌های اشکال برای تجزیه‌وتحلیل و اولویت‌بندی استفاده شود. این کار از تلاش‌های جاری برای کاهش مصرف برق و افزایش عمر باتری پشتیبانی می‌کند.

IPower.hal و IPowerStats.hal

هر دو میانای IPower.hal و IPowerStats.hal در Android 10 دردسترس هستند، اما عملکرد جمع‌آوری آمار IPower.hal فقط از میانای IPowerStats.hal دردسترس است. کارکرد IPowerStats.hal شامل میاناهای برنامه‌سازی کاربردی برای دریافت و استفاده از داده‌های جمع‌آوری‌شده از اندازه‌گیری‌های توان درون‌دستگاهی برای دستگاه‌های پشتیبانی‌شده است:

  • اندازه‌گیری‌های انرژی در سطح ریل را برای هر دو مشتری فرکانس پایین (getRailInfo) و فرکانس بالا (streamEnergyData) انجام می‌دهد و انرژی انباشته‌شده از زمان راه‌اندازی را گزارش می‌کند.
  • اطلاعات مربوط به هر PowerEntity پشتیبانی‌شده را که داده‌های آن دردسترس است گزارش می‌کند. PowerEntity یک زیرسیستم پلاتفرم، دستگاه جانبی، یا دامنه توان است که بر کل مصرف توان دستگاه تأثیر می‌گذارد.
  • مجموعه وضعیت‌های نهاد قدرت (getPowerEntityStateInfo) را گزارش می‌کند که نهادهای مشخص‌شده برای آن‌ها داده‌های اقامت ارائه می‌دهند، سپس داده‌های انباشته‌شده را برای هر PowerEntity مشخص‌شده گزارش می‌کند.

میاناهای برنامه‌سازی کاربردی IPowerStats.hal توسط مشتریان زیر استفاده می‌شود:

  • ‫Statsd، برای جمع‌آوری سنجه‌های مصرف برق هر ریل.
  • Perfetto، برای مرتبط کردن مصرف برق با فعالیت CPU.
  • Batterystats، برای بهبود اسناددهی باتری بااستفاده از داده‌های اندازه‌گیری‌شده به‌جای تخمین مصرف باتری از ثابت‌های ازپیش‌تعریف‌شده در power_profile.xml.

در Android نسخه ۱۰ و بالاتر، سازنده دستگاه می‌تواند بین عملکردهای IPower.hal و IPowerStats.hal انتخاب کند، اما همه کلاینت‌ها باید به IPower.hal برگردند اگر IPowerStats.hal پیاده‌سازی نشده باشد .

گزینه‌های پیاده‌سازی IPowerStats.hal

فقط عملکردهای IPower.hal در Android 7 تا Android 9 دردسترس است. دستگاه‌هایی که به Android 10 ارتقا یافته‌اند باید دارای زیرسیستم سخت‌افزاری پایش توان یا روش‌های دیگری برای پایش و ثبت آمار توان باشند. برخی‌از «تراشه‌های سیستم» آمار مصرف برق را برایتان جمع‌آوری می‌کنند، یا می‌توانید اطلاعات مربوط به وضعیت اقامت نهاد برق را ازطریق نرم‌افزار دریافت کنید. سخت‌افزار پایش برق فقط برای پشتیبانی از getRailInfo()، getEnergyData()، و streamEnergyData() لازم است.

اگر IPowerStats.hal را بدون سخت‌افزار پایش توان، getRailInfo(), getEnergyData()، پیاده‌سازی کنید، streamEnergyData() مقدار NOT_SUPPORTED را برمی‌گرداند. به‌همین ترتیب، getPowerEntityInfo(), getPowerEntityStateInfo()، و getPowerEntityStateResidencyData()نیز ممکن است NOT_SUPPORTED را درصورتی‌که برای استفاده درنظر گرفته نشده باشد برگردانند.

نمونه‌هایی از داده‌های برگشتی توسط «میاناهای برنامه‌سازی کاربردی نظارت بر ریل» شامل موارد زیر است

  • ریل برق نمایشگر X میکرووات مصرف کرد.
  • ریل برق مودم Y میکرووات مصرف کرد.

نمونه‌هایی از داده‌های برگشتی توسط میاناهای برنامه‌سازی کاربردی وضعیت خواب زیرسیستم شامل این موارد می‌شود

  • مودم برای X میلی‌ثانیه در حالت خواب بود.
  • «سیستم روی تراشه» به‌مدت Y میلی‌ثانیه در وضعیت «افت توان» بود.
  • واحد پردازش گرافیکی به‌مدت Z میلی‌ثانیه در حالت تعلیق بود.

استفاده از زیرسیستم سخت‌افزاری نظارت بر مصرف برق

اگر طراحی دستگاهتان دارای زیرسیستم سخت‌افزاری پایش توان است، با ایجاد یک گره sysfs واحد که PowerStats.hal بتواند داده‌ها را از آن تجزیه کند، یا با ایجاد مجموعه‌ای از فراخوان‌های سیستم نوع ioctl، IPowerStats.hal را پیاده‌سازی کنید.

باید درایور هسته را به‌گونه‌ای پیاده‌سازی کنید که از سرریز شدن انباشتگر جلوگیری شود. الگوریتم مورداستفاده به طراحی زیرسیستم منحصربه‌فرد نظارت بر توان سخت‌افزار شما بستگی دارد که باید ولتاژ و جریان گذرگاه را هم به‌صورت لحظه‌ای و هم به‌صورت میانگین اندازه‌گیری کند. گرداننده هسته باید این داده‌ها را به‌گونه‌ای ضبط کند که انباشت‌گرهای انرژی را پاک نکند و باید داده‌های انرژی انباشته‌شده برای هر زیرمسیر را از زمان راه‌اندازی به‌صورت متغیری ۶۴ بیتی که با قرائت انرژی از هر پُرسمان انباشت‌گر افزایش می‌یابد حفظ کند.

آمار مربوط به یک مؤلفه معین (یا به‌صورت اختیاری، چند مؤلفه) باید در یک گره باشد. اگرچه این استفاده‌ای متعارف از sysfs نیست (که معمولاً هر گره را به یک مقدار محدود می‌کند)، اما این کار باعث می‌شود همه داده‌ها سازگار باشند.

راهنمای طراحی

  • هنگام خواندن از گره sysfs یا برقراری تماس‌های سیستمی، تأخیر را پایین نگه دارید (حداکثر ۱ میلی‌ثانیه).
  • مطمئن شوید که عملکرد پشتیبانی از آمار به‌طور قابل‌توجهی مصرف باتری را افزایش نمی‌دهد:
    • برای ردیابی پارامترهایی مثل زمان سپری‌شده در حالت خواب، تعداد بیدار شدن‌های نقطه دسترسی (AP) و/یا زیرسیستم را افزایش ندهید.
    • آمارها را بین پردازنده برنامه‌ها و میان‌افزار به‌صورت فرصت‌طلبانه همراه با ترافیک دیگر درصورت امکان انتقال دهید.
  • درصورت لزوم، زیرسیستم می‌تواند از عملکردهای درایور زیر استفاده کند:
    • داده‌ها به‌صورت داخلی ذخیره می‌شود تا از تأخیر/بیدار شدن به قیمت داده‌های کمی قدیمی جلوگیری شود.
    • انجام برون‌یابی وقتی زیرسیستم درخواب است، برای ارائه زمان خواب به‌روزرسانی‌شده بدون بیدار کردن زیرسیستم.

انتخاب عناصر، زیرسیستم‌ها، و آمار

هنگام انتخاب اینکه داده‌ها از کدام مؤلفه‌ها یا زیرسیستم‌ها جمع‌آوری شود IPowerStats.hal، هر چیزی را در دستگاه که جریان قابل‌توجهی (۵ میلی‌آمپر یا بیشتر) مصرف می‌کند یا از حالت‌های مصرف برق متعدد پشتیبانی می‌کند انتخاب کنید، مثلاً موارد زیر:

  • زیرسیستم‌های 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);