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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

لإزالة Wakelock:

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

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

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

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

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

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

أثناء قياس طاقة وحدة المعالجة المركزية، أو أثناء الحفاظ على ثبات طاقة وحدة المعالجة المركزية لإجراء قياسات أخرى، حافظ على ثبات عدد وحدات المعالجة المركزية التي يتم توصيلها عبر الإنترنت (مثل وجود وحدة معالجة مركزية واحدة متصلة بالإنترنت والباقي غير متصل/متصل بالإنترنت). إن إبقاء كافة وحدات المعالجة المركزية (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، فقد تحتاج إلى عكس ترتيب السطرين الأولين، أو تنفيذ السطر الأول مرة أخرى لإسقاط الحد الأدنى للسرعة قبل تعيين السرعة القصوى.

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

# while true; do true; done

خذ القياس أثناء تنفيذ الحلقة.

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

بالنسبة لقيمة cpu.awake ، قم بقياس الطاقة المستهلكة عندما لا يكون النظام في حالة تعليق ولا يقوم بتنفيذ المهام. يجب أن تكون وحدة المعالجة المركزية في حلقة خاملة لجدولة منخفضة الطاقة، وربما تنفذ تعليمات ARM Wait For Event أو في حالة طاقة منخفضة خاصة بـ SoC مع زمن انتقال سريع للخروج مناسب للاستخدام الخامل.

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

قياس قوة الشاشة

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

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

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

  • استخدم واجهة مستخدم Android (غير مستحسن). اضبط شريط التمرير "الإعدادات" > "سطوع العرض" على الحد الأدنى من سطوع الشاشة. ومع ذلك، تسمح واجهة مستخدم Android بضبط السطوع على ما لا يقل عن 10-20% من سطوع اللوحة أو الإضاءة الخلفية، ولا تسمح بضبط السطوع على مستوى منخفض للغاية بحيث قد لا تكون الشاشة مرئية دون بذل جهد كبير.
  • استخدم ملف sysfs (مستحسن). إذا كان ذلك متاحًا، فاستخدم ملف sysfs للتحكم في سطوع اللوحة وصولاً إلى الحد الأدنى من السطوع الذي يدعمه الجهاز.

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

قياس قوة الواي فاي

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

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

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

ملاحظة : استخدم إعدادًا متحكمًا (مثل iperf ) لإنشاء حركة مرور لاستقبال ونقل الشبكة.