غالبًا ما يتم قياس طاقة النظام الفرعي للجهاز وتسجيلها في بيئة معملية لمختلف ظروف الحالة المستقرة، مثل عندما تكون الشاشة قيد التشغيل، أو عندما يكون الجهاز في حالة طاقة خاملة. وينجح هذا مع الأنظمة الفرعية ذات السحب المستمر للطاقة، أو في ظل ظروف يمكن قياسها بسهولة في بيئات المختبر، ولكن ليس مع حالات استخدام معينة، مثل عندما تعرض الشاشة مقطع فيديو.
يوفر IPower.hal 1.0
واجهة لتمرير تلميحات الطاقة والإبلاغ عن البيانات التراكمية حول مقاييس حالة سكون النظام الفرعي. في نظام التشغيل Android 10 والإصدارات الأحدث، توجد وظيفة إعداد تقارير الإحصاءات التراكمية في واجهات برمجة التطبيقات لمجموعة IPowerStats.hal
power-stat، وتوفر طريقة لاسترداد بيانات استخدام الطاقة على الجهاز. ويحل هذا محل جزء تجميع الإحصائيات التراكمي لواجهة IPower.hal
، للحصول على فصل أكثر وضوحًا للوظائف.
قراءات خدمة IPowerStats
ليست دورية. وهي تحدث في لحظات مهمة، مثل عندما يكون هناك انخفاض في طاقة البطارية بنسبة 1%. تكون القراءات أقل تكرارًا عندما يكون استنزاف البطارية منخفضًا، وأكثر تكرارًا عندما يكون مرتفعًا. قد يتم إرسال البيانات مرة أخرى إلى الخوادم، ويمكن استخدامها في تقارير الأخطاء للتحليل والفرز. وهذا يدعم الجهود المستمرة لتقليل استهلاك الطاقة وزيادة عمر البطارية.
IPower.hal وIPowerStats.hal
تتوفر كل من واجهات IPower.hal
و IPowerStats.hal
على Android 10، ولكن وظيفة جمع إحصائيات IPower.hal
متاحة فقط من واجهة IPowerStats.hal
. تشتمل وظيفة IPowerStats.hal
على واجهات برمجة التطبيقات (APIs) للحصول على البيانات التي تم جمعها من قياسات الطاقة على الجهاز واستخدامها للأجهزة المدعومة:
- إجراء قياسات الطاقة على مستوى السكك الحديدية لعملاء التردد المنخفض (
getRailInfo
) والتردد العالي (streamEnergyData
)، والإبلاغ عن الطاقة المتراكمة منذ التمهيد. - تقارير المعلومات المتعلقة بكل
PowerEntity
مدعوم والتي تتوفر البيانات الخاصة بها.PowerEntity
هو نظام فرعي للنظام الأساسي أو مجال طرفي أو مجال طاقة يؤثر على إجمالي استهلاك طاقة الجهاز. - يُبلغ عن مجموعة حالات كيان الطاقة (
getPowerEntityStateInfo
) التي توفر لها الكيانات المحددة بيانات الإقامة، ثم يُبلغ عن البيانات المتراكمة لكلPowerEntity
محدد.
يتم استخدام واجهات برمجة التطبيقات IPowerStats.hal
من قبل العملاء التاليين:
-
Statsd
، لجمع مقاييس استهلاك الطاقة لكل السكك الحديدية. -
Perfetto
، لربط استهلاك الطاقة بنشاط وحدة المعالجة المركزية. -
Batterystats
، لتحسين إسناد البطارية باستخدام البيانات المقاسة بدلاً من تقدير استهلاك البطارية من ثوابت محددة مسبقًا فيpower_profile.xml.
باستخدام نظام التشغيل Android 10 والإصدارات الأحدث، يمكن للشركة المصنعة للجهاز الاختيار بين وظيفتي IPower.hal
و IPowerStats.hal
، ولكن يجب على جميع العملاء الرجوع إلى IPower.hal
إذا لم يتم تنفيذ IPowerStats.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
إذا لم يكن المقصود استخدامها.
تتضمن أمثلة البيانات التي يتم إرجاعها بواسطة واجهات برمجة التطبيقات لمراقبة السكك الحديدية ما يلي:
- استهلكت سكة الطاقة الخاصة بالشاشة X μW.
- استهلكت سكة الطاقة الخاصة بالمودم Y μW.
تتضمن أمثلة البيانات التي يتم إرجاعها بواسطة واجهات برمجة تطبيقات حالة سكون النظام الفرعي
- كان المودم في وضع السكون لمدة X مللي ثانية.
- كانت شركة SoC في حالة انهيار الطاقة لمدة Y مللي ثانية.
- كانت وحدة معالجة الرسومات في حالة التوقف المؤقت لمدة Z مللي ثانية.
استخدم نظامًا فرعيًا لمراقبة طاقة الأجهزة
إذا كان تصميم جهازك يحتوي على نظام فرعي لمراقبة طاقة الأجهزة، فقم بتطبيق IPowerStats.hal
عن طريق إنشاء عقدة sysfs واحدة يمكن لـ PowerStats.hal
تحليل البيانات منها، أو عن طريق إنشاء مجموعة من استدعاءات النظام من نوع ioctl .
يجب عليك تنفيذ برنامج تشغيل kernel الخاص بك بطريقة تمنع تجاوز سعة المجمع. تعتمد الخوارزمية المستخدمة على تصميم النظام الفرعي الفريد لمراقبة الطاقة في أجهزتك، والذي يجب أن يوفر كلاً من جهد الناقل اللحظي والمتوسط وقياسات التيار. يجب على برنامج تشغيل النواة التقاط هذه البيانات بطريقة لا تؤدي إلى مسح مراكم الطاقة، ويجب عليه الحفاظ على بيانات الطاقة المتراكمة لكل خط فرعي منذ التمهيد، في شكل متغير 64 بت يتم زيادته مع قراءة الطاقة من كل استعلام تراكم.
يجب أن تكون إحصائيات مكون معين (أو مكونات متعددة بشكل اختياري) في عقدة واحدة. على الرغم من أن هذا ليس استخدامًا تقليديًا لـ sysfs (الذي يحد عادةً كل عقدة بقيمة واحدة)، إلا أنه يضمن اتساق جميع البيانات.
توجيه التصميم
- حافظ على زمن الوصول منخفضًا (1 مللي ثانية، كحد أقصى) عند القراءة من عقدة sysfs أو إجراء مكالمات النظام.
- تأكد من أن وظيفة الإحصائيات الداعمة لا تؤدي إلى زيادة استنزاف الطاقة بشكل ملموس:
- لا تقم بزيادة عمليات تنبيه نقطة الوصول (AP) و/أو النظام الفرعي لتتبع المعلمات مثل الوقت المستغرق في وضع السكون.
- قم بنقل الإحصائيات بين معالج التطبيقات والبرامج الثابتة بشكل انتهازي مع حركة المرور الأخرى عندما يكون ذلك ممكنًا.
- إذا لزم الأمر، قد يستخدم النظام الفرعي وظائف برنامج التشغيل التالية:
- تخزين البيانات مؤقتًا داخليًا لتجنب زمن الوصول/التنبيهات على حساب البيانات القديمة قليلاً.
- إجراء الاستقراء عندما يكون النظام الفرعي نائمًا، لتوفير وقت نوم محدث دون إيقاظ النظام الفرعي.
اختر المكونات والأنظمة الفرعية والإحصائيات
عند اختيار المكونات أو الأنظمة الفرعية التي سيتم جمع بيانات IPowerStats.hal
منها، حدد أي شيء على الجهاز يستهلك تيارًا كبيرًا (5 مللي أمبير أو أكثر)، أو يدعم أوضاع استهلاك الطاقة المتعددة، مثل ما يلي:
- الأنظمة الفرعية SoC الفردية.
- الأنظمة الفرعية جزئيًا أو كليًا خارج SoC، مثل WiFi أو معالج الصور أو معالج الأمان.
- الأجهزة الطرفية مثل مصابيح 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);