HAL لإحصاءات الطاقة

غالبًا ما يتم قياس طاقة النظام الفرعي للجهاز وتسجيلها في بيئة مختبر لحالات مختلفة من حالة الاتزان، مثل عندما تكون الشاشة مفعّلة أو يكون الجهاز في حالة طاقة في وضع السكون. يمكن استخدام هذا الأسلوب مع الأنظمة الفرعية التي تسحب طاقة باستمرار، أو في ظروف يمكن قياسها بسهولة في البيئات الاختبارية، ولكنه لا يناسب حالات استخدام معيّنة، مثل عرض فيديو على الشاشة.

يوفّر IPower.hal 1.0 واجهة لنقل نصائح حول استهلاك الطاقة وإعداد تقارير عن البيانات التراكمية لمقاييس حالة السكون للنظام الفرعي. في الإصدار 10 من Android والإصدارات الأحدث، تتعلّق وظيفة إعداد تقارير الإحصاءات التراكمية بواجهات برمجة التطبيقات IPowerStats.hal لجمع إحصاءات الطاقة، وتوفر طريقة لاسترداد بيانات استخدام الطاقة على الجهاز. ويحلّ هذا القسم محلّ القسم المخصّص لجمع الإحصاءات التراكمية في واجهة IPower.hal، لفصل الوظائف بشكل أوضح.

إنّ قراءات خدمة IPowerStats ليست دورية. تحدث هذه التنبيهات في اللحظات الرئيسية، مثل عند انخفاض مستوى شحن البطارية بنسبة% 1. تكون القراءات أقل تكرارًا عندما يكون معدّل استهلاك البطارية منخفضًا، وتكون أكثر تكرارًا عندما يكون مرتفعًا. قد تتم إعادة توجيه البيانات إلى الخوادم، وقد يتم استخدامها في تقارير الأخطاء لتحليلها وتحديد أولوياتها. ويساعد ذلك في الجهود المتواصلة لتقليل استهلاك الطاقة وزيادة عمر البطارية.

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، لربط استهلاك الطاقة بنشاط وحدة المعالجة المركزية
  • Batterystats، لتحسين تحديد مصدر استخدام البطارية باستخدام data measured بدلاً من تقدير استهلاك البطارية من خلال ثوابت مُحدَّدة مسبقًا في power_profile.xml.

مع الإصدار 10 من Android والإصدارات الأحدث، يمكن للشركة المصنّعة للجهاز الاختيار بين وظيفتَي IPower.hal وIPowerStats.hal، ولكن يجب أن يعود جميع العملاء إلى IPower.hal في حال عدم تنفيذ IPowerStats.hal .

خيارات تنفيذ IPowerStats.hal

لا تتوفّر سوى وظائف IPower.hal على الإصدار 7 من نظام التشغيل Android وحتى الإصدار 9. يجب أن تتضمّن الأجهزة التي تمت ترقيتها إلى الإصدار 10 من نظام التشغيل Android نظامًا فرعيًا لمراقبة الطاقة في الأجهزة، أو وسائل أخرى متاحة لمراقبة إحصاءات الطاقة وتسجيلها. تجمع بعض أنظمة SoC إحصاءات استخدام الطاقة نيابةً عنك، أو يمكنك الحصول على معلومات عن مدة الإقامة في حالة عنصر الطاقة من خلال البرامج. لا يلزم استخدام أجهزة مراقبة الطاقة إلا لتوفير getRailInfo() وgetEnergyData() و streamEnergyData().

في حال تنفيذ IPowerStats.hal بدون استخدام برمجية مراقبة الطاقة، تعرض getRailInfo(), getEnergyData() و streamEnergyData() القيمة NOT_SUPPORTED. وبالمثل، قد يعرض كل من getPowerEntityInfo(), getPowerEntityStateInfo() و getPowerEntityStateResidencyData() أيضًا NOT_SUPPORTED إذا لم يكن مقصودًا استخدامه.

تشمل أمثلة البيانات التي تعرضها واجهات برمجة التطبيقات لمراقبة السكك الحديدية ما يلي:

  • استهلك خط الطاقة للشاشة X µW.
  • استهلك خط الطاقة للمودم Y µW.

تشمل أمثلة البيانات التي تعرضها واجهات برمجة التطبيقات لحالة السكون في النظام الفرعي ما يلي:

  • كان المودم في وضع السكون لمدة X ملي ثانية.
  • كان المعالج الدقيق في حالة إيقاف الطاقة لمدة Y ملي ثانية.
  • كانت وحدة معالجة الرسومات في حالة تعليق لمدة Z ملي ثانية.

استخدام نظام فرعي لمراقبة الطاقة في الأجهزة

إذا كان تصميم جهازك يتضمّن نظامًا فرعيًا لمراقبة الطاقة في الأجهزة، يمكنك تنفيذ IPowerStats.hal عن طريق إنشاء عقدة sysfs واحدة يمكن من خلالها لـ PowerStats.hal تحليل البيانات، أو عن طريق إنشاء مجموعة من طلبات النظام من النوع ioctl.

يجب تنفيذ برنامج تشغيل kernel بطريقة تمنع تراكُم القيم. تعتمد الخوارزمية المستخدَمة على تصميم المنظومة الفرعية الفريدة لمراقبة طاقة الأجهزة، والتي يجب أن تقدّم قياسات فورية ومتوسطة لفولتية المجمع والتيار. يجب أن يجمع برنامج تشغيل kernel هذه البيانات بطريقة لا تؤدي إلى محو حسابات الطاقة، ويجب أن يحتفظ ببيانات الطاقة المتراكمة لكل سكة فرعية منذ بدء التشغيل، في شكل متغيّر بسعة 64 بت يتم زيادته مع قراءة الطاقة من كل طلب حساب.

يجب أن تكون الإحصاءات لمكوّن معيّن (أو مكوّنات متعددة اختياريًا) في عقدة واحدة. على الرغم من أنّ هذا الاستخدام ليس تقليديًا لنظام sysfs (الذي يحدّ عادةً من كل عقدة بقيمة واحدة)، إلا أنّه يضمن اتساق جميع البيانات.

إرشادات التصميم

  • يجب إبقاء وقت الاستجابة منخفضًا (1 ملي ثانية بحد أقصى) عند القراءة من عقدة sysfs أو إجراء مكالمات نظام.
  • تأكَّد من أنّ وظائف الإحصاءات الداعمة لا تزيد بشكلٍ ملحوظ من استهلاك الطاقة:
    • لا تُكثِّف عمليات تنشيط نقطة الوصول و/أو النظام الفرعي لتتبُّع المَعلمات، مثل الوقت الذي يقضيه الجهاز في وضع السكون.
    • نقل الإحصاءات بين معالج التطبيقات والبرامج الثابتة بشكل انتهازي مع الزيارات الأخرى متى أمكن
  • قد يستخدم النظام الفرعي دوالّ برنامج التشغيل التالية إذا لزم الأمر:
    • تخزين البيانات مؤقتًا داخليًا لتجنُّب وقت الاستجابة/عمليات الاستيقاظ على حساب حصولك على بيانات قديمة قليلاً
    • إجراء الاستقراء عندما يكون النظام الفرعي في وضع السكون، لتوفير وقت نوم معدَّل بدون إيقاظ النظام الفرعي

اختيار المكوّنات والأنظمة الفرعية والإحصاءات

عند اختيار المكوّنات أو الأنظمة الفرعية التي تريد جمع dataIPowerStats.hal منها، اختَر أيّ جهاز على الجهاز يستهلك تيارًا كبيرًا (5 مللي أمبير أو أكثر) أو يتوافق مع أوضاع متعددة لاستهلاك الطاقة، مثل ما يلي:

  • الأنظمة الفرعية الفردية للمنظومة على الرقاقة
  • الأنظمة الفرعية التي تكون خارج شريحة المعالجة المتكاملة جزئيًا أو كليًا، مثل شبكة Wi-Fi أومعالج الصور أومعالج الأمان
  • الأجهزة الملحقة، مثل مصابيح LED عالية الطاقة والكاميرات
  • نطاقات الطاقة التي تستخدم أوضاعًا مختلفة (مثل نطاق الطاقة لوحدة المعالجة المركزية (SoC) ككل)

التخصيص

هذه الميزة الاختيارية قابلة للتخصيص. تصميم حالات الاستخدام وتخصيص الاستخدام:

  • حدِّد القضبان التي تريد قياسها ومعدّل قياسها.
  • تحديد وقت قراءة البيانات وكيفية تفسيرها
  • تحديد الإجراء الذي يجب اتّخاذه ووقت اتّخاذه استنادًا إلى بياناتك

التحقُّق

تضمن اختبارات VTS استيفاء متطلبات Android. تُستخدَم التعليقات في IPowerStats.hal للتأكّد من امتثال الجهاز للمتطلبات.

على سبيل المثال، إذا طلبت getRailInfo() ولم يتم عرض أي معلومات، سيتعذّر اختبار VTS لأنّك لم تتلقّ معلومات عن خطوط المراقبة أو حالة SUCCESS. وبالمثل، إذا تلقّيت معلومات عن مسار الإحالة الناجحة، ولكن كان مصحوبًا بردّ NON_SUPPORTED أو FILE_SYSTEM_ERROR، يعني ذلك أيضًا أنّ عملية الربط قد تعذّرت. يتحقّق VTS من الالتزام بمواصفات الشركة المصنّعة للجهاز في ملف HAL، باستخدام المتطلبات الواردة في تعليقات IPower.hal وIPowerStats.hal. في ما يلي مثال على التعليقات المستخدَمة في اختبار ميزة "التحقّق من الفيديو":

/**
* 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);