توان سیستم فرعی دستگاه اغلب در محیط آزمایشگاه برای شرایط مختلف حالت ثابت اندازه گیری و ثبت می شود، مانند زمانی که صفحه نمایش روشن است یا دستگاه در حالت بیکار است. این برای زیرسیستمهایی با مصرف برق ثابت، یا در شرایطی که به راحتی در محیطهای آزمایشگاهی اندازهگیری میشوند، کار میکند، اما نه برای موارد استفاده خاص، مانند زمانی که یک صفحه یک ویدیو را نمایش میدهد.
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);