Anda dapat menentukan konsumsi daya setiap komponen dengan membandingkan arus yang diambil oleh perangkat saat komponen berada dalam status yang diinginkan (seperti aktif, aktif, memindai) dan saat komponen nonaktif. Ukur arus sesaat rata-rata yang diambil pada perangkat pada voltase nominal menggunakan monitor daya eksternal, seperti catu daya bench atau alat pemantauan baterai khusus (seperti software Power Monitor dan Power Tool Monsoon Solution Inc.).
Produsen sering kali memberikan informasi tentang arus yang digunakan oleh setiap komponen. Gunakan informasi ini jika secara akurat merepresentasikan arus yang diambil dari baterai perangkat dalam praktiknya. Namun, validasi nilai yang diberikan produsen sebelum menggunakan nilai tersebut dalam profil daya perangkat Anda.
Mengontrol konsumsi daya
Saat mengukur, pastikan perangkat tidak memiliki koneksi ke sumber pengisian daya eksternal, seperti koneksi USB ke host pengembangan yang digunakan saat menjalankan Android Debug Bridge (adb). Perangkat yang sedang diuji mungkin menarik arus dari host, sehingga menurunkan pengukuran pada baterai. Hindari koneksi USB On-The-Go (OTG), karena perangkat OTG dapat menarik arus dari perangkat yang sedang diuji.
Tidak termasuk komponen yang diukur, sistem harus berjalan pada tingkat konsumsi daya yang konstan untuk menghindari pengukuran yang tidak akurat yang disebabkan oleh perubahan pada komponen lain. Aktivitas sistem yang dapat menyebabkan perubahan yang tidak diinginkan pada pengukuran daya meliputi:
- Aktivitas penerimaan, transmisi, atau pemindaian seluler, Wi-Fi, dan Bluetooth. Saat tidak mengukur daya radio seluler, setel perangkat ke mode pesawat dan aktifkan Wi-Fi atau Bluetooth sesuai kebutuhan.
- Layar aktif/nonaktif. Warna yang ditampilkan saat layar aktif dapat memengaruhi daya yang digunakan pada beberapa teknologi layar. Nonaktifkan layar saat mengukur nilai untuk komponen non-layar.
- Menangguhkan/melanjutkan sistem. Status layar nonaktif dapat memicu penangguhan sistem, yang menempatkan bagian perangkat dalam status daya rendah atau nonaktif. Hal ini dapat memengaruhi konsumsi daya komponen yang diukur dan menyebabkan variasi besar dalam pembacaan daya saat sistem secara berkala melanjutkan untuk mengirim alarm, dll. Untuk mengetahui detailnya, lihat Mengontrol penangguhan sistem.
- CPU yang mengubah kecepatan dan memasuki/keluar dari status nonaktif penjadwal daya rendah.
Selama operasi normal, sistem sering melakukan penyesuaian pada kecepatan CPU, jumlah core CPU
online, dan status core sistem lainnya seperti kecepatan bus memori dan voltase power rail
yang terkait dengan CPU dan memori. Selama pengujian, penyesuaian ini memengaruhi pengukuran daya:
- Operasi penskalaan kecepatan CPU dapat mengurangi jumlah penskalaan clock dan voltase bus memori dan komponen inti sistem lainnya.
- Aktivitas penjadwalan dapat memengaruhi persentase waktu yang dihabiskan CPU dalam status tidak ada aktivitas dengan daya rendah. Untuk mengetahui detail tentang cara mencegah penyesuaian ini terjadi selama pengujian, lihat Mengontrol kecepatan CPU.
Misalnya, Joe Droid ingin menghitung nilai screen.on
untuk perangkat. Dia
mengaktifkan mode pesawat di perangkat, menjalankan perangkat pada status arus yang stabil, mempertahankan kecepatan
CPU secara konstan, dan menggunakan wakelock parsial untuk mencegah penangguhan sistem. Kemudian, Joe mematikan layar
perangkat dan mengambil pengukuran (200 mA). Selanjutnya, Joe mengaktifkan layar perangkat dengan kecerahan minimum
dan mengambil pengukuran lain (300 mA). Nilai screen.on
adalah
100 mA (300 - 200).
Catatan: Untuk komponen yang tidak memiliki bentuk gelombang konsumsi arus yang datar saat aktif (seperti radio seluler atau Wi-Fi), ukur arus rata-rata dari waktu ke waktu menggunakan alat pemantauan daya.
Saat menggunakan sumber daya eksternal sebagai pengganti baterai perangkat, sistem mungkin mengalami masalah karena termistor baterai yang tidak terhubung atau pin pengukur bahan bakar terintegrasi (yaitu pembacaan yang tidak valid untuk suhu baterai atau kapasitas baterai yang tersisa dapat menonaktifkan kernel atau sistem Android). Baterai palsu dapat memberikan sinyal pada pin termistor atau pengukur bahan bakar yang meniru pembacaan suhu dan status pengisian daya untuk sistem normal, dan juga dapat memberikan kabel yang mudah untuk terhubung ke catu daya eksternal. Atau, Anda dapat memodifikasi sistem untuk mengabaikan data yang tidak valid dari baterai yang hilang.
Penangguhan sistem kontrol
Bagian ini menjelaskan cara menghindari status penangguhan sistem jika Anda tidak ingin status tersebut mengganggu pengukuran lainnya, dan cara mengukur daya yang digunakan status penangguhan sistem jika Anda ingin mengukurnya.
Mencegah penangguhan sistem
Penonaktifan sistem dapat menyebabkan variasi yang tidak diinginkan dalam pengukuran daya dan menempatkan komponen sistem dalam status daya rendah yang tidak sesuai untuk mengukur penggunaan daya aktif. Untuk mencegah sistem dijeda saat layar nonaktif, gunakan wakelock parsial sementara. Dengan menggunakan kabel USB, hubungkan perangkat ke host pengembangan, lalu berikan perintah berikut:
adb shell "echo temporary > /sys/power/wake_lock"
Saat berada di wake_lock
, status layar nonaktif tidak memicu penangguhan sistem.
(Jangan lupa untuk melepaskan kabel USB dari perangkat sebelum mengukur konsumsi daya.)
Untuk menghapus wakelock:
adb shell "echo temporary > /sys/power/wake_unlock"
Penangguhan sistem pengukuran
Untuk mengukur daya yang digunakan selama status penangguhan sistem, ukur nilai
cpu.idle
dalam profil daya. Sebelum mengukur:
- Hapus wakelock yang ada (seperti yang dijelaskan di atas).
- Tempatkan perangkat dalam mode pesawat untuk menghindari aktivitas serentak oleh radio seluler, yang mungkin berjalan di prosesor yang terpisah dari bagian SoC yang dikontrol oleh penangguhan sistem.
- Pastikan sistem dalam status ditangguhkan dengan:
- Mengonfirmasi bahwa pembacaan saat ini stabil pada nilai yang stabil. Pembacaan harus berada dalam rentang yang diharapkan untuk konsumsi daya status penangguhan SoC ditambah konsumsi daya komponen sistem yang tetap diberi daya (seperti PHY USB).
- Memeriksa output konsol sistem.
- Mengamati indikasi eksternal status sistem (seperti LED yang mati saat tidak dalam mode tunda).
Mengontrol kecepatan CPU
CPU aktif dapat diaktifkan atau dinonaktifkan, kecepatan clock dan voltase terkait dapat diubah (mungkin juga memengaruhi kecepatan bus memori dan status daya core sistem lainnya), dan dapat memasuki status tidak ada aktivitas dengan daya lebih rendah saat berada dalam loop tidak ada aktivitas kernel. Saat mengukur status daya CPU yang berbeda untuk profil daya, hindari varian daya tarik saat mengukur parameter lainnya. Profil daya mengasumsikan bahwa semua CPU memiliki karakteristik daya dan kecepatan yang tersedia sama.
Saat mengukur daya CPU, atau saat mempertahankan daya CPU tetap untuk melakukan pengukuran lain, pertahankan
jumlah CPU yang diaktifkan secara online (seperti memiliki satu CPU yang online dan sisanya
offline/di-hotplug). Membiarkan semua CPU kecuali satu dalam penjadwalan tidak ada aktivitas dapat menghasilkan hasil
yang dapat diterima. Menghentikan framework Android dengan adb shell stop
dapat mengurangi aktivitas
penjadwalan sistem.
Anda harus menentukan kecepatan CPU yang tersedia untuk perangkat di entri
cpu.speeds
profil daya. Untuk mendapatkan daftar kecepatan CPU yang tersedia, jalankan:
adb shell cat /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state
Kecepatan ini cocok dengan pengukuran daya yang sesuai dalam nilai cpu.active
.
Untuk platform yang jumlah core-nya yang diaktifkan secara online secara signifikan memengaruhi konsumsi daya, Anda mungkin perlu mengubah driver atau pengontrol cpufreq untuk platform tersebut. Sebagian besar platform mendukung pengontrolan kecepatan CPU menggunakan pengontrol cpufreq ruang pengguna dan menggunakan antarmuka sysfs untuk menetapkan kecepatan. Misalnya, untuk menetapkan kecepatan 200 MHz pada sistem dengan hanya 1 CPU atau semua CPU yang memiliki kebijakan cpufreq yang sama, gunakan konsol sistem atau shell adb untuk menjalankan perintah berikut:
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
Catatan: Perintah yang tepat berbeda-beda bergantung pada penerapan cpufreq platform.
Perintah ini memastikan kecepatan baru tidak berada di luar batas yang diizinkan, menetapkan kecepatan baru, lalu mencetak kecepatan saat CPU benar-benar berjalan (untuk verifikasi). Jika kecepatan minimum saat ini sebelum eksekusi lebih tinggi dari 200.000, Anda mungkin perlu membalikkan urutan dua baris pertama, atau mengeksekusi baris pertama lagi untuk menurunkan kecepatan minimum sebelum menetapkan kecepatan maksimum.
Untuk mengukur arus yang digunakan oleh CPU yang berjalan pada berbagai kecepatan, gunakan konsol sistem untuk menempatkan CPU dalam loop yang terikat CPU menggunakan perintah:
# while true; do true; done
Lakukan pengukuran saat loop dieksekusi.
Beberapa perangkat dapat membatasi kecepatan CPU maksimum saat melakukan throttling termal karena pengukuran suhu yang tinggi (yaitu, setelah menjalankan CPU dengan kecepatan tinggi selama jangka waktu yang berkelanjutan). Perhatikan pembatasan tersebut, baik menggunakan output konsol sistem saat melakukan pengukuran atau dengan memeriksa log kernel setelah melakukan pengukuran.
Untuk nilai cpu.awake
, ukur daya yang digunakan saat sistem tidak
dijeda dan tidak menjalankan tugas. CPU harus berada dalam loop tidak ada aktivitas
penjadwal daya rendah, yang mungkin mengeksekusi petunjuk ARM Wait For Event atau dalam status daya rendah khusus SoC
dengan latensi keluar cepat yang cocok untuk penggunaan tidak ada aktivitas.
Untuk nilai cpu.active
, ukur daya saat sistem tidak dalam mode penangguhan dan
tidak menjalankan tugas. Satu CPU (biasanya CPU utama) harus menjalankan tugas, sedangkan semua CPU lainnya
harus dalam status tidak ada aktivitas.
Mengukur daya layar
Saat mengukur daya layar, pastikan perangkat lain yang biasanya diaktifkan saat layar diaktifkan juga aktif. Misalnya, jika layar sentuh dan lampu latar layar biasanya menyala saat layar menyala, pastikan perangkat ini menyala saat Anda melakukan pengukuran untuk mendapatkan contoh realistis penggunaan daya layar menyala.
Beberapa teknologi layar memiliki konsumsi daya yang bervariasi sesuai dengan warna yang ditampilkan, sehingga pengukuran daya bervariasi secara signifikan bergantung pada apa yang ditampilkan di layar pada saat pengukuran. Saat mengukur, pastikan layar menampilkan sesuatu yang memiliki karakteristik daya layar yang realistis. Bidik antara ekstrem layar hitam-hitam (yang menggunakan daya terendah untuk beberapa teknologi) dan layar putih-putih. Pilihan umum adalah tampilan jadwal di aplikasi kalender, yang memiliki campuran latar belakang putih dan elemen non-putih.
Ukur daya layar pada kecerahan layar/lampu latar minimum dan maksimum. Untuk menetapkan kecerahan minimum:
- Gunakan UI Android (tidak direkomendasikan). Setel penggeser Setelan > Kecerahan Tampilan ke kecerahan tampilan minimum. Namun, UI Android hanya mengizinkan setelan kecerahan hingga minimum 10-20% dari kemungkinan kecerahan panel atau lampu latar, dan tidak mengizinkan setelan kecerahan yang sangat rendah sehingga layar mungkin tidak terlihat tanpa upaya besar.
- Menggunakan file sysfs (direkomendasikan). Jika tersedia, gunakan file sysfs untuk mengontrol kecerahan panel hingga kecerahan minimum yang didukung oleh hardware.
Selain itu, jika file sysfs platform memungkinkan pengaktifan dan penonaktifan panel LCD, lampu latar, dan layar sentuh, gunakan file tersebut untuk mengambil pengukuran dengan layar aktif dan nonaktif. Jika tidak, tetapkan wakelock sebagian agar sistem tidak ditangguhkan, lalu aktifkan dan nonaktifkan layar dengan tombol daya.
Mengukur daya Wi-Fi
Lakukan pengukuran Wi-Fi di jaringan yang relatif sepi. Hindari memperkenalkan pekerjaan tambahan yang memproses traffic siaran dalam volume tinggi yang tidak terkait dengan aktivitas yang diukur.
Nilai wifi.on
mengukur daya yang digunakan saat Wi-Fi diaktifkan, tetapi tidak
secara aktif mengirimkan atau menerima. Hal ini sering diukur sebagai delta antara arus saat ini dalam
status penangguhan (tidur) sistem dengan Wi-Fi diaktifkan vs. dinonaktifkan.
Nilai wifi.scan
mengukur daya yang digunakan selama pemindaian Wi-Fi untuk titik
akses. Aplikasi dapat memicu pemindaian Wi-Fi menggunakan class WifiManager
startScan()
API. Anda juga dapat membuka Setelan > Wi-Fi, yang melakukan pemindaian titik akses
setiap beberapa detik dengan lonjakan konsumsi daya yang jelas, tetapi Anda harus mengurangi daya
layar dari pengukuran ini.
Catatan: Gunakan penyiapan terkontrol (seperti iperf) untuk menghasilkan traffic terima dan transmisi jaringan.