آمار قدرت HAL

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

IPower.hal 1.0 یک رابط برای ارسال نکات قدرت و گزارش داده های تجمعی در مورد معیارهای حالت خواب زیرسیستم فراهم می کند. در Android 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 ، برای ارتباط مصرف انرژی با فعالیت CPU.
  • Batterystats ، برای بهبود انتساب باتری با استفاده از داده های اندازه گیری شده به جای تخمین مصرف باتری از ثابت های از پیش تعریف شده در power_profile.xml.

با Android 10 و بالاتر، سازنده دستگاه ممکن است بین عملکردهای IPower.hal و IPowerStats.hal یکی را انتخاب کند، اما اگر IPowerStats.hal اجرا نشود، همه مشتریان باید به IPower.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 ms خواب بود.
  • SoC برای Y ms در حالت فروپاشی قدرت بود.
  • GPU برای Z ms در حالت تعلیق بود.

از یک زیرسیستم مانیتورینگ قدرت سخت افزاری استفاده کنید

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

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

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

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

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

اجزا، زیرسیستم ها و آمار را انتخاب کنید

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

  • زیرسیستم های SoC فردی
  • زیرسیستم هایی که به طور جزئی یا کامل خارج از SoC هستند، مانند وای فای، پردازشگر تصویر یا پردازنده امنیتی.
  • تجهیزات جانبی مانند LED ها و دوربین های پرقدرت.
  • دامنه‌های قدرتی که از حالت‌های مختلف استفاده می‌کنند (مانند حوزه قدرت برای SoC به عنوان یک کل).

سفارشی سازی

این ویژگی اختیاری قابل سفارشی سازی است. موارد استفاده را طراحی کنید و استفاده خود را سفارشی کنید:

  • تصمیم بگیرید که کدام ریل ها را اندازه گیری کنید و چند بار آنها را اندازه گیری کنید.
  • تصمیم بگیرید که چه زمانی داده ها را بخوانید و چگونه آن ها را تفسیر کنید.
  • بر اساس داده های خود تصمیم بگیرید که چه اقدامی انجام دهید و چه زمانی آن را انجام دهید.

اعتبار سنجی

تست‌های VTS تضمین می‌کنند که نیازمندی‌های اندروید برآورده شده‌اند. نظرات در IPowerStats.hal برای تأیید اینکه دستگاه مطابقت دارد استفاده می شود.

به عنوان مثال، اگر getRailInfo() را فراخوانی کنید و چیزی برنگرداند، آزمایش VTS ناموفق است، زیرا اطلاعاتی در مورد ریل های نظارت شده یا وضعیت بازگشتی SUCCESS دریافت نکردید. به طور مشابه، اگر اطلاعات راه آهن را دریافت کردید، اما با یک پاسخ NON_SUPPORTED یا FILE_SYSTEM_ERROR همراه بود، این نیز یک شکست است. VTS با استفاده از الزامات موجود در نظرات IPower.hal و IPowerStats.hal تأیید می کند که مشخصات سازنده دستگاه در فایل 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);