اندازه‌گیری توان عنصر

می‌توانید مصرف برق هر قطعه را با مقایسه جریان کشیده‌شده توسط دستگاه وقتی قطعه در وضعیت مطلوب (مانند روشن، فعال، درحال اسکن) است و وقتی قطعه خاموش است تعیین کنید. میانگین جریان لحظه‌ای کشیده‌شده در دستگاه را در ولتاژ اسمی بااستفاده از یک پایشگر برق خارجی، مانند منبع تغذیه رومیزی یا ابزارهای تخصصی پایش باتری (مانند نرم‌افزار Monsoon Solution Inc. Power Monitor و Power Tool) اندازه‌گیری کنید.

سازندگان اغلب اطلاعاتی درباره جریان مصرف‌شده توسط یک جزء خاص ارائه می‌دهند. اگر این اطلاعات به‌طور دقیق جریان مصرفی از باتری دستگاه را در عمل نشان می‌دهد، از آن استفاده کنید. بااین‌حال، قبل‌از استفاده از مقادیر ارائه‌شده توسط سازنده در نمایه مصرف برق دستگاهتان، آن‌ها را اعتبارسنجی کنید.

کنترل مصرف انرژی

هنگام اندازه‌گیری، مطمئن شوید که دستگاه به منبع شارژ خارجی متصل نباشد، مثلاً اتصال USB به میزبان توسعه که هنگام اجرای Android Debug Bridge (adb) استفاده می‌شود. دستگاه تحت آزمایش ممکن است از میزبان جریان بکشد، بنابراین اندازه‌گیری‌های باتری کاهش می‌یابد. از اتصال «دردسترس» (OTG) با USB اجتناب کنید، زیرا دستگاه OTG ممکن است از دستگاه تحت آزمایش جریان بکشد.

به‌جز مؤلفه‌ای که اندازه‌گیری می‌شود، سیستم باید در سطح ثابتی از مصرف برق کار کند تا از اندازه‌گیری‌های نادرست ناشی از تغییرات در سایر مؤلفه‌ها جلوگیری شود. فعالیت‌های سیستم که می‌توانند تغییرات ناخواسته‌ای در اندازه‌گیری‌های مصرف برق ایجاد کنند عبارت‌اند از:

  • فعالیت دریافت، انتقال، یا اسکن «شبکه تلفن همراه»، «Wi-Fi»، و «بلوتوث». وقتی توان رادیو سلولی را اندازه‌گیری نمی‌کنید، دستگاه را روی حالت هواپیما تنظیم کنید و Wi-Fi یا بلوتوث را درصورت لزوم فعال کنید.
  • روشن/خاموش بودن صفحه‌نمایش. رنگ‌های نمایش‌داده‌شده درحالی‌که صفحه‌نمایش روشن است می‌تواند بر مصرف انرژی در برخی‌از فناوری‌های صفحه‌نمایش تأثیر بگذارد. هنگام اندازه‌گیری مقادیر برای عناصر غیرصفحه‌نمایش، صفحه‌نمایش را خاموش کنید.
  • تعلیق/ازسرگیری سیستم. خاموش بودن صفحه‌نمایش می‌تواند باعث تعلیق سیستم شود، و بخش‌هایی از دستگاه را در حالت کم‌مصرف یا خاموش قرار دهد. این امر می‌تواند بر مصرف برق مؤلفه درحال اندازه‌گیری تأثیر بگذارد و باعث ایجاد تفاوت‌های بزرگ در خوانش‌های برق شود، زیرا سیستم به‌طور دوره‌ای برای ارسال هشدارها و غیره ازسر گرفته می‌شود. برای جزئیات، به کنترل تعلیق سیستم مراجعه کنید.
  • واحد‌های پردازش مرکزی درحال تغییر سرعت و ورود/خروج از حالت آماده به‌کار زمان‌بندی کم‌مصرف. درطول عملکرد عادی، سیستم به‌طور مکرر سرعت واحد پردازش مرکزی، تعداد هسته‌های واحد پردازش مرکزی آنلاین، و دیگر وضعیت‌های هسته سیستم مانند سرعت گذرگاه حافظه و ولتاژهای ریل‌های برق مرتبط با واحد پردازش مرکزی و حافظه را تنظیم می‌کند. درطول آزمایش، این اصلاحات بر اندازه‌گیری‌های توان تأثیر می‌گذارد:
    • عملیات مقیاس‌بندی سرعت واحد پردازش مرکزی می‌تواند میزان مقیاس‌بندی ولتاژ و ساعت گذرگاه‌های حافظه و دیگر مؤلفه‌های هسته سیستم را کاهش دهد.
    • فعالیت زمان‌بندی می‌تواند بر درصد زمانی که واحدهای پردازش مرکزی در حالت‌های کم‌مصرف درانتظار می‌گذرانند تأثیر بگذارد. برای جزئیات بیشتر درباره جلوگیری از وقوع این تنظیمات درطول آزمایش، به کنترل سرعت واحد پردازش مرکزی مراجعه کنید.

برای مثال، «علی اندرویدی» می‌خواهد مقدار screen.on را برای دستگاهی محاسبه کند. او حالت هواپیما را در دستگاه فعال می‌کند، دستگاه را در وضعیت جریان پایدار اجرا می‌کند، سرعت CPU را ثابت نگه می‌دارد، و از قفل بیداری جزئی برای جلوگیری از تعلیق سیستم استفاده می‌کند. سپس جو صفحه‌نمایش دستگاه را خاموش می‌کند و اندازه‌گیری می‌کند (۲۰۰ میلی‌آمپر). سپس، جو صفحه‌نمایش دستگاه را با حداقل روشنایی روشن می‌کند و اندازه‌گیری دیگری انجام می‌دهد (۳۰۰ میلی‌آمپر). مقدار screen.on برابر با ۱۰۰ میلی‌آمپر (۳۰۰ - ۲۰۰) است.

توجه: برای مؤلفه‌هایی که هنگام فعال بودن، شکل موج مصرف جریان آن‌ها صاف نیست (مثل رادیو سلولی یا Wi-Fi)، جریان میانگین را درطول زمان بااستفاده از ابزار پایش توان اندازه‌گیری کنید.

هنگام استفاده از منبع برق خارجی به‌جای باتری دستگاه، ممکن است سیستم به‌دلیل متصل نبودن ترمیستور باتری یا پایه‌های سنجشگر سوخت یکپارچه با مشکل مواجه شود (یعنی خوانش نامعتبر دمای باتری یا ظرفیت باتری باقی‌مانده می‌تواند باعث خاموش شدن هسته یا سیستم Android شود). باتری‌های تقلبی می‌توانند سیگنال‌هایی را روی پین‌های دماسنج یا نشانگر سوخت ارائه دهند که خوانش‌های دما و وضعیت شارژ را برای یک سیستم عادی تقلید می‌کنند، و همچنین ممکن است سیم‌های مناسبی برای اتصال به منابع تغذیه خارجی ارائه دهند. یا می‌توانید سیستم را تغییر دهید تا داده‌های نامعتبر مربوط به باتری ازدست‌رفته را نادیده بگیرد.

تعلیق سیستم کنترل

این بخش توضیح می‌دهد که چگونه وقتی نمی‌خواهید حالت تعلیق سیستم با اندازه‌گیری‌های دیگر تداخل داشته باشد از آن اجتناب کنید، و چگونه وقتی می‌خواهید آن را اندازه‌گیری کنید، میزان مصرف برق حالت تعلیق سیستم را اندازه‌گیری کنید.

جلوگیری از تعلیق سیستم

تعلیق سیستم می‌تواند تغییرات ناخواسته در اندازه‌گیری‌های توان ایجاد کند و اجزای سیستم را در حالت‌های کم‌توان نامناسب برای اندازه‌گیری مصرف توان فعال قرار دهد. برای جلوگیری از تعلیق سیستم درحالی‌که صفحه‌نمایش خاموش است، از «بیدارباش جزئی موقت» استفاده کنید. بااستفاده از کابل USB، دستگاه را به میزبان توسعه متصل کنید، سپس فرمان زیر را صادر کنید:

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

وقتی در wake_lock هستید، حالت خاموش بودن صفحه‌نمایش باعث تعلیق سیستم نمی‌شود. (به‌یاد داشته باشید که قبل‌از اندازه‌گیری مصرف برق، کابل USB را از دستگاه جدا کنید.)

برای برداشتن قفل بیداری:

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

تعلیق سیستم اندازه‌گیری

برای اندازه‌گیری میزان مصرف برق در حالت تعلیق سیستم، مقدار cpu.idle را در نمایه‌ قدرت اندازه‌گیری کنید. قبل‌از اندازه‌گیری:

  • قفل‌های بیدار موجود را بردارید (همان‌طور که در بالا توضیح داده شد).
  • دستگاه را در حالت هواپیما قرار دهید تا از فعالیت هم‌زمان رادیو سلولی جلوگیری شود، زیرا رادیو سلولی ممکن است روی پردازنده‌ای جدا از بخش‌های SoC که توسط تعلیق سیستم کنترل می‌شوند اجرا شود.
  • با انجام موارد زیر مطمئن شوید سیستم در حالت تعلیق است:
    • تأیید اینکه خوانش‌های فعلی روی مقدار ثابتی قرار می‌گیرد. مقادیر باید در محدوده موردانتظار برای مصرف برق حالت تعلیق SoC به‌علاوه مصرف برق اجزای سیستم که برق آن‌ها همچنان وصل است (مثل USB PHY) باشد.
    • درحال بررسی برونداد کنسول سیستم.
    • مراقب نشانه‌های خارجی وضعیت سیستم باشید (مثلاً خاموش شدن LED وقتی در حالت تعلیق نیست).

کنترل سرعت‌های واحد پردازش مرکزی

پردازنده‌های فعال را می‌توان آنلاین کرد یا آفلاین کرد، سرعت ساعت و ولتاژهای مرتبط آن‌ها را تغییر داد (احتمالاً بر سرعت گذرگاه حافظه و دیگر وضعیت‌های توان هسته سیستم نیز تأثیر می‌گذارد)، و می‌توانند درحالی‌که در حلقه بیکار هسته هستند وارد وضعیت‌های بیکار با توان پایین‌تر شوند. هنگام اندازه‌گیری وضعیت‌های مختلف توان CPU برای نمایه توان، هنگام اندازه‌گیری پارامترهای دیگر، از تغییرات مصرف برق جلوگیری کنید. نمایه توان فرض می‌کند که همه واحدهای پردازش مرکزی سرعت‌های دردسترس و مشخصه‌های توان یکسانی دارند.

هنگام اندازه‌گیری توان CPU، یا هنگام ثابت نگه داشتن توان CPU برای انجام اندازه‌گیری‌های دیگر، تعداد CPUهای آنلاین را ثابت نگه دارید (مثلاً یک CPU آنلاین باشد و بقیه آفلاین/جداشده باشند). نگه داشتن همه CPUها به‌جز یکی در حالت بیکار زمان‌بندی ممکن است نتایج قابل‌قبولی تولید کند. متوقف کردن چارچوب Android با adb shell stop می‌تواند فعالیت زمان‌بندی سیستم را کاهش دهد.

باید سرعت‌های واحد پردازش مرکزی دردسترس برای دستگاهتان را در ورودی cpu.speeds نمایه توان مشخص کنید. برای دریافت فهرست سرعت‌های CPU دردسترس، این دستور را اجرا کنید:

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

این سرعت‌ها با اندازه‌گیری‌های توان مربوطه در مقدار cpu.active مطابقت دارد.

برای پلاتفرم‌هایی که تعداد هسته‌های آنلاین تأثیر قابل‌توجهی بر مصرف برق دارد، ممکن است لازم باشد درایور یا کنترل‌کننده cpufreq را برای پلاتفرم اصلاح کنید. اکثر پلاتفرم‌ها از کنترل سرعت واحد پردازش مرکزی بااستفاده از مدیر cpufreq فضای کاربر و استفاده از میاناهای sysfs برای تنظیم سرعت پشتیبانی می‌کنند. برای مثال، برای تنظیم سرعت روی ۲۰۰ مگاهرتز در سیستمی که فقط ۱ واحد پردازش مرکزی دارد یا همه واحدهای پردازش مرکزی آن از خط‌مشی cpufreq مشترکی استفاده می‌کنند، از کنسول سیستم یا پوسته adb برای اجرای فرمان‌های زیر استفاده کنید:

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 پلاتفرم متفاوت است.

این فرمان‌ها تضمین می‌کنند که سرعت جدید خارج از محدوده‌های مجاز نباشد، سرعت جدید را تنظیم می‌کنند، سپس سرعتی را که CPU در آن اجرا می‌شود (برای درستی‌سنجی) چاپ می‌کنند. اگر سرعت حداقلی فعلی قبل‌از اجرا بیشتر از ۲۰۰٬۰۰۰ باشد، ممکن است لازم باشد ترتیب دو خط اول را معکوس کنید یا خط اول را دوباره اجرا کنید تا سرعت حداقلی قبل‌از تنظیم سرعت حداکثری کاهش یابد.

برای اندازه‌گیری جریان مصرف‌شده توسط واحد پردازش مرکزی که با سرعت‌های مختلف کار می‌کند، از کنسول سیستم استفاده کنید تا واحد پردازش مرکزی را بااستفاده از فرمان زیر در حلقه محدود به واحد پردازش مرکزی قرار دهید:

# while true; do true; done

اندازه‌گیری را درحین اجرای حلقه انجام دهید.

برخی‌از دستگاه‌ها می‌توانند هنگام انجام «کاهش سرعت حرارتی» به‌دلیل اندازه‌گیری دمای بالا (یعنی پس‌از اجرای CPU با سرعت بالا برای دوره‌های طولانی)، حداکثر سرعت CPU را محدود کنند. هنگام اندازه‌گیری، بااستفاده از خروجی کنسول سیستم یا با بررسی گزارش هسته پس‌از اندازه‌گیری، مراقب این محدودیت‌ها باشید.

برای مقدار cpu.awake، میزان برق مصرفی را در زمانی که سیستم در حالت تعلیق نیست و وظایف را اجرا نمی‌کند اندازه‌گیری کنید. واحد پردازش مرکزی باید در حلقه بیکار زمان‌بندی کم‌مصرف باشد، احتمالاً دستور «منتظر رویداد ARM» را اجرا می‌کند یا در حالت کم‌مصرف مخصوص SoC با تأخیر خروج سریع مناسب برای استفاده در حالت بیکار است.

برای مقدار cpu.active، توان را زمانی اندازه‌گیری کنید که سیستم در حالت تعلیق نباشد و تکالیف را اجرا نکند. یک CPU (معمولاً CPU اصلی) باید تکلیف را اجرا کند و همه CPUهای دیگر باید در حالت آماده‌به‌کار باشند.

اندازه‌گیری مصرف باتری صفحه‌نمایش

هنگام اندازه‌گیری صفحه‌نمایش در حالت روشن، مطمئن شوید که دستگاه‌های دیگری که معمولاً هنگام فعال بودن صفحه‌نمایش روشن می‌شوند نیز روشن باشند. برای مثال، اگر معمولاً وقتی صفحه‌نمایش روشن است، نور پس‌زمینه نمایشگر و صفحه لمسی روشن است، هنگام اندازه‌گیری مطمئن شوید این دستگاه‌ها روشن باشند تا نمونه واقعی از مصرف انرژی صفحه‌نمایش روشن به‌دست آورید.

برخی‌از فناوری‌های نمایشگر براساس رنگ‌های نمایش‌داده‌شده مصرف برق متفاوتی دارند، که باعث می‌شود اندازه‌گیری‌های برق بسته به آنچه در زمان اندازه‌گیری روی صفحه‌نمایش نمایش داده می‌شود، تفاوت قابل‌توجهی داشته باشد. هنگام اندازه‌گیری، مطمئن شوید که صفحه‌نمایش چیزی را نشان می‌دهد که دارای ویژگی‌های مصرف انرژی یک صفحه‌نمایش واقعی است. هدف این است که بین دو حالت افراطی صفحه کاملاً سیاه (که کمترین مصرف برق را برای برخی فناوری‌ها دارد) و صفحه کاملاً سفید قرار بگیرید. یک انتخاب رایج، نمای برنامه زمانی در برنامه تقویم است که ترکیبی از پس‌زمینه سفید و عناصر غیرسفید دارد.

اندازه‌گیری مصرف برق صفحه‌نمایش در حداقل و حداکثر روشنایی نمایشگر/نور پس‌زمینه. برای تنظیم حداقل روشنایی:

  • استفاده از رابط کاربری Android (توصیه نمی‌شود). لغزنده «تنظیمات > روشنایی نمایشگر» را روی حداقل روشنایی نمایشگر تنظیم کنید. بااین‌حال، واسط کاربر Android اجازه می‌دهد روشنایی فقط تا حداقل ۱۰ تا ۲۰٪ از روشنایی ممکن پانل یا نور پس‌زمینه تنظیم شود، و اجازه نمی‌دهد روشنایی آنقدر کم شود که صفحه‌نمایش بدون تلاش زیاد قابل‌مشاهده نباشد.
  • از فایل sysfs استفاده کنید (توصیه می‌شود). درصورت دردسترس بودن، از فایل sysfs برای کنترل روشنایی پانل تا حداقل روشنایی پشتیبانی‌شده توسط سخت‌افزار استفاده کنید.

علاوه‌براین، اگر فایل sysfs پلاتفرم امکان روشن و خاموش کردن پانل LCD، نور پس‌زمینه، و صفحه لمسی را فراهم می‌کند، از این فایل برای اندازه‌گیری با صفحه‌نمایش روشن و خاموش استفاده کنید. درغیراین‌صورت، قفل بیداری جزئی تنظیم کنید تا سیستم تعلیق نشود، سپس صفحه‌نمایش را با دکمه روشن/خاموش روشن و خاموش کنید.

اندازه‌گیری قدرت Wi-Fi

اندازه‌گیری‌های Wi-Fi را در شبکه‌ای نسبتاً آرام انجام دهید. از معرفی کار اضافی پردازش حجم بالای ترافیک همه‌فرستی که با فعالیت درحال اندازه‌گیری بی‌ارتباط است خودداری کنید.

مقدار wifi.on میزان مصرف انرژی را وقتی Wi-Fi فعال است اما به‌طور فعال درحال انتقال یا دریافت نیست اندازه‌گیری می‌کند. این مقدار اغلب به‌عنوان تفاوت بین جریان مصرفی در حالت تعلیق سیستم (خواب) با Wi-Fi فعال درمقایسه با Wi-Fi غیرفعال اندازه‌گیری می‌شود.

مقدار wifi.scan میزان انرژی مصرف‌شده درطول اسکن Wi-Fi برای نقاط دسترسی را اندازه‌گیری می‌کند. برنامه‌ها می‌توانند بااستفاده از کلاس WifiManager startScan()API، اسکن‌های Wi-Fi را راه‌اندازی کنند. همچنین می‌توانید «تنظیمات > Wi-Fi» را باز کنید که هر چند ثانیه یک‌بار نقطه‌های دسترسی را اسکن می‌کند و به‌نظر می‌رسد مصرف انرژی را به‌طور ناگهانی افزایش می‌دهد، اما باید انرژی صفحه‌نمایش را از این اندازه‌گیری‌ها کم کنید.

توجه: از راه‌اندازی کنترل‌شده (مثل iperf) برای تولید ترافیک دریافت و ارسال شبکه استفاده کنید.