قياس طاقة المكوّن

يمكنك تحديد استهلاك الطاقة لكل مكوّن على حدة من خلال مقارنة التيار المستهلك من الجهاز عندما يكون المكوّن في الحالة المطلوبة (مثل التشغيل أو النشاط أو المسح الضوئي) ووقت إيقاف المكوّن. يمكنك قياس متوسط التيار الفوري المستهلك على الجهاز عند جهد كهربائي اسمي باستخدام جهاز مراقبة طاقة خارجي، مثل مصدر طاقة احتياطي أو أدوات متخصصة لمراقبة البطارية (مثل برنامج Power Monitor وPower Tool من شركة Monsoon Solution Inc.).

غالبًا ما تقدّم الشركات المصنّعة معلومات عن التيار المستهلك من مكوّن فردي. استخدِم هذه المعلومات إذا كانت تمثّل بدقة التيار المستخرَج من بطارية الجهاز في الممارسة. ومع ذلك، عليك التحقّق من صحة القيم التي تقدّمها الشركة المصنّعة قبل استخدامها في ملف استهلاك الطاقة الخاص بالجهاز.

التحكّم في استهلاك الطاقة

عند إجراء القياس، تأكَّد من أنّ الجهاز غير متصل بمصدر شحن خارجي، مثل توصيله عبر USB بمضيف تطوير يُستخدَم عند تشغيل Android Debug Bridge (adb). قد يستهلك الجهاز المُختبَر تيارًا من المضيف، ما يؤدي إلى خفض القياسات في البطارية. تجنَّب عمليات التوصيل عبر USB On-The-Go (OTG)، لأنّ جهاز OTG قد يستهلك طاقة من الجهاز الذي يتم اختباره.

باستثناء المكوّن الذي يتم قياسه، يجب أن يعمل النظام بمستوى ثابت من استهلاك الطاقة لتجنّب القياسات غير الدقيقة الناتجة عن التغييرات في المكوّنات الأخرى. تشمل أنشطة النظام التي يمكن أن تؤدي إلى تغييرات غير مرغوب فيها في قياسات الطاقة ما يلي:

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

على سبيل المثال، يريد "جو درويد" احتساب قيمة screen.on لجهاز معيّن. ويقوم بتشغيل وضع الطيران على الجهاز، وتشغيل الجهاز في حالة حالية ثابتة، والحفاظ على سرعة وحدة المعالجة المركزية ثابتة، واستخدام قفل تشغيل جزئي لمنع تعليق النظام. بعد ذلك، يُطفئ "جو" شاشة الجهاز ويأخذ قياسًا (200 مللي أمبير). بعد ذلك، شغّل "جو" شاشة الجهاز على الحد الأدنى من مستوى السطوع وأجرى قياسًا آخر (300 مللي أمبير). قيمة screen.on هي 100 مللي أمبير (300 - 200).

ملاحظة: بالنسبة إلى المكوّنات التي لا تتضمّن شكلاً موجيًا ثابتًا لاستهلاك التيار عندما تكون نشِطة (مثل الراديو الخلوي أو شبكة Wi-Fi)، يمكنك قياس متوسط التيار بمرور الوقت باستخدام أداة مراقبة الطاقة.

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

تعليق نظام التحكّم

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

منع تعليق النظام

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

adb shell "echo temporary > /sys/power/wake_lock"

أثناء استخدام wake_lock، لا تؤدي حالة إيقاف الشاشة إلى تعليق النظام. (تذكَّر فصل كابل USB عن الجهاز قبل قياس استهلاك الطاقة).

لإزالة قفل التنشيط:

adb shell "echo temporary > /sys/power/wake_unlock"

تعليق نظام القياس

لقياس استهلاك الطاقة أثناء حالة تعليق النظام، يمكنك قياس قيمة cpu.idle في الملف الشخصي للطاقة. قبل القياس:

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

التحكّم في سرعات وحدة المعالجة المركزية

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

أثناء قياس طاقة وحدة المعالجة المركزية (CPU)، أو أثناء إبقاء طاقة وحدة المعالجة المركزية ثابتة لإجراء قياسات أخرى، يجب إبقاء عدد وحدات المعالجة المركزية التي تم توصيلها بالإنترنت ثابتًا (مثل توصيل وحدة معالجة مركزية واحدة بالإنترنت والبقية غير متصلة بالإنترنت أو غير متصلة بالطاقة). قد يؤدي إبقاء جميع وحدات المعالجة المركزية باستثناء وحدة واحدة في وضع الخمول إلى تحقيق نتائج مقبولة. يمكن أن يؤدي إيقاف إطار عمل Android باستخدام adb shell stop إلى تقليل نشاط برمجة النظام.

يجب تحديد سرعات وحدة المعالجة المركزية المتاحة لجهازك في إدخال ملف تعريف الطاقة cpu.speeds. للحصول على قائمة بسرعات وحدة المعالجة المركزية المتاحة، يمكنك تنفيذ:

adb shell cat /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state

تتطابق هذه السرعات مع قياسات الطاقة المقابلة في القيمة cpu.active.

بالنسبة إلى المنصات التي يؤثر فيها عدد النوى التي يتم تشغيلها على استهلاك الطاقة بشكل كبير، قد تحتاج إلى تعديل برنامج تشغيل cpufreq أو أداة التحكّم في السرعة للمنصة. تتيح معظم الأنظمة الأساسية التحكّم في سرعة وحدة المعالجة المركزية باستخدام أداة التحكّم في معدّل تكرار التردد cpufreq في مساحة المستخدم واستخدام واجهات sysfs لضبط السرعة. على سبيل المثال، لضبط السرعة على 200 ميغاهرتز على نظام يحتوي على وحدة معالجة مركزية واحدة فقط أو جميع وحدات المعالجة المركزية التي تشترك في سياسة cpufreq الشائعة، استخدِم وحدة تحكّم النظام أو adb shell لتشغيل الأوامر التالية:

echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo 200000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo 200000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
echo 200000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq

ملاحظة: تختلف الأوامر الدقيقة حسب طريقة تنفيذ cpufreq على النظام الأساسي.

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

لقياس التيار المستهلك من وحدة المعالجة المركزية (CPU) التي تعمل بسرعات مختلفة، استخدِم وحدة تحكّم النظام لوضع وحدة المعالجة المركزية في حلقة مرتبطة بوحدة المعالجة المركزية باستخدام الأمر:

# while true; do true; done

يمكنك إجراء القياس أثناء تنفيذ الحلقة.

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

بالنسبة إلى القيمة cpu.awake، يمكنك قياس الطاقة المستهلكَة عندما لا يكون النظام في حالة تعليق ولا ينفذ المهام. يجب أن تكون وحدة المعالجة المركزية في حلقة الخمول الخاصة بجدول التشغيل المنخفض الطاقة، وربما تنفِّذ تعليمات ARM Wait For Event أو تكون في حالة منخفضة الطاقة خاصة بوحدة المعالجة المُدمجة مع وقت استجابة سريع للخروج مناسب للاستخدام في وضع السكون.

بالنسبة إلى القيمة cpu.active، يجب قياس الطاقة عندما لا يكون النظام في وضع التعليق وعدم تنفيذ المهام. يجب أن تُشغِّل وحدة معالجة مركزية واحدة (عادةً وحدة المعالجة المركزية الأساسية) المهمة بينما يجب أن تكون جميع وحدات المعالجة المركزية الأخرى في حالة الخمول.

قياس طاقة الشاشة

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

تختلف تكنولوجيات العرض في استهلاك الطاقة حسب الألوان المعروضة، ما يؤدي إلى اختلاف قياسات استهلاك الطاقة بشكل كبير حسب ما يتم عرضه على الشاشة في وقت القياس. عند إجراء القياس، تأكَّد من أنّ الشاشة تعرض محتوى يتسم بخصائص شاشة واقعية. احرص على استخدام شاشة سوداء بالكامل (تستهلك أقل طاقة لبعض التقنيات) أو شاشة بيضاء بالكامل. من الخيارات الشائعة عرض جدول زمني في تطبيق التقويم يتضمّن خلفية بيضاء وعناصر غير بيضاء.

قياس سطوع الشاشة عند الحد الأدنى والحد الأقصى لسطوع الشاشة/الإضاءة الخلفية لضبط الحدّ الأدنى للسطوع:

  • استخدام واجهة مستخدم Android (غير مستحسن) انتقِل إلى الإعدادات > سطوع الشاشة واضبط شريط التمرير على الحد الأدنى لسطوع الشاشة. ومع ذلك، لا تسمح واجهة مستخدم Android بضبط السطوع إلا على ‎varied من ‎10% إلى ‎20% من الحد الأقصى لسطوع اللوحة أو الإضاءة الخلفية، ولا تسمح بضبط السطوع على مستوى منخفض جدًا قد يؤدي إلى عدم ظهور الشاشة بدون مجهود كبير.
  • استخدام ملف sysfs (إجراء يُنصح به) استخدِم ملف sysfs، في حال توفّره، للتحكّم في سطوع اللوحة وصولاً إلى أدنى مستوى سطوع يتيحّه الجهاز.

بالإضافة إلى ذلك، إذا كان ملف sysfs للنظام الأساسي يتيح تشغيل لوحة LCD والإضاءة الخلفية والشاشة التي تعمل باللمس وإيقافها، استخدِم الملف لإجراء قياسات عندما تكون الشاشة مفعَّلة أو غير مفعَّلة. بخلاف ذلك، شغِّل الشاشة وأوقِفها باستخدام زر التشغيل.

قياس طاقة شبكة Wi-Fi

يمكنك إجراء قياسات Wi-Fi على شبكة هادئة نسبيًا. تجنَّب إدخال عمل إضافي من خلال معالجة أعداد كبيرة من زيارات البث التي لا صلة لها بالنشاط الذي يتم قياسه.

تقيس قيمة wifi.on الطاقة المستهلكَة عندما يكون اتصال Wi-Fi مفعّلاً ولكن ليس هناك إرسال أو استقبال نشط. ويتم قياس ذلك غالبًا على أنّه الفرق بين استهلاك الطاقة الحالي في حالة تعليق (الاستراحة) النظام مع تفعيل شبكة Wi-Fi أو إيقافها.

تقيس قيمة wifi.scan الطاقة المستهلكَة أثناء عملية البحث عن نقاط اتصال Wi-Fi. يمكن للتطبيقات بدء عمليات فحص شبكة Wi-Fi باستخدام فئة WifiManager startScan()API. يمكنك أيضًا فتح الإعدادات > Wi-Fi، التي تُجري عمليات بحث عن نقطة اتصال كل بضع ثوانٍ مع قفزة واضحة في استهلاك الطاقة، ولكن عليك طرح طاقة screen من هذه القياسات.

ملاحظة: استخدِم عملية إعداد خاضعة للرقابة (مثل iperf) لإنشاء ملف تعريف اتّصال بالشبكة.