Anda dapat menentukan konsumsi daya komponen individual dengan membandingkan arus yang ditarik oleh perangkat saat komponen berada dalam status yang diinginkan (seperti aktif, aktif, memindai) dan ketika komponen nonaktif. Ukur rata-rata arus instan yang digambar pada perangkat pada tegangan nominal menggunakan monitor daya eksternal, seperti catu daya bangku atau catu daya alat pemantauan baterai (seperti software Monsoon Solution Inc. Monitor Daya dan Alat Listrik).
Produsen sering menyediakan informasi tentang daya yang dikonsumsi oleh masing-masing komponen. Gunakan informasi ini jika secara akurat mewakili arus yang diambil dari baterai perangkat dalam latihan. Namun, validasikan nilai yang disediakan produsen sebelum menggunakan nilai tersebut di perangkat Anda profil daya.
Mengontrol pemakaian daya
Saat mengukur, pastikan perangkat tidak terhubung ke sumber pengisian daya eksternal, seperti sebagai koneksi USB ke host pengembangan yang digunakan saat menjalankan Android Debug Bridge (adb). Perangkat yang sedang diuji mungkin menarik arus dari {i>host<i}, sehingga menurunkan pengukuran pada baterai. Hindari USB Koneksi On-The-Go (OTG), karena perangkat OTG mungkin menggunakan daya dari perangkat yang sedang diuji.
Dengan mengecualikan komponen yang diukur, sistem harus berjalan pada tingkat daya yang konstan konsumsi untuk menghindari pengukuran yang tidak akurat yang disebabkan oleh perubahan pada komponen lain. {i>System<i}. aktivitas yang dapat menyebabkan perubahan yang tidak diinginkan pada pengukuran daya termasuk:
- Aktivitas seluler, Wi-Fi, dan Bluetooth menerima, mengirim, atau memindai. Kapan tidak mengukur daya radio seluler, setel perangkat ke mode pesawat dan aktifkan Wi-Fi atau Bluetooth sebagai yang sesuai.
- Layar aktif/nonaktif. Warna yang ditampilkan saat layar aktif dapat memengaruhi penggunaan daya pada beberapa teknologi layar. Nonaktifkan layar saat mengukur nilai untuk komponen non-layar.
- Penangguhan/lanjutkan sistem. Status layar nonaktif dapat memicu penangguhan sistem, menempatkan komponen perangkat dalam kondisi daya rendah atau mati. Hal ini dapat memengaruhi konsumsi daya yang diukur dan memperkenalkan variasi besar dalam pembacaan daya karena sistem secara berkala melanjutkan untuk mengirim alarm, dll. Untuk mengetahui detailnya, lihat Sistem pengontrol menangguhkan.
- CPU mengubah kecepatan dan masuk/keluar dari status tidak ada aktivitas penjadwal berdaya rendah.
Selama pengoperasian normal, sistem sering melakukan
penyesuaian pada kecepatan CPU, jumlah data
Inti CPU, dan status inti sistem lainnya seperti kecepatan bus memori dan voltase power rail
yang berhubungan dengan CPU dan memori. Selama pengujian, penyesuaian ini memengaruhi pengukuran daya:
- Operasi penskalaan kecepatan CPU dapat mengurangi jumlah penskalaan jam dan voltase bus memori dan komponen inti sistem lainnya.
- Aktivitas penjadwalan dapat memengaruhi persentase waktu yang dihabiskan CPU dalam status tidak ada aktivitas berdaya rendah. Untuk detail tentang cara mencegah penyesuaian ini terjadi selama pengujian, lihat Mengontrol kecepatan CPU.
Misalnya, Joe Droid ingin menghitung nilai screen.on
untuk sebuah perangkat. Dia
mengaktifkan mode pesawat di perangkat, menjalankan perangkat pada kondisi saat ini yang stabil, menahan CPU
konstanta kecepatan, dan menggunakan wakelock parsial untuk mencegah penangguhan sistem. Joe kemudian menyalakan perangkatnya
layar nonaktif dan mengambil pengukuran (200 mA). Selanjutnya, Joe mengaktifkan
layar perangkat setidaknya
kecerahan dan mengambil pengukuran lain (300 mA). Nilai screen.on
adalah
100 mA (300 - 200).
Catatan: Untuk komponen yang tidak memiliki bentuk gelombang datar konsumsi saat ini saat aktif (seperti radio seluler atau Wi-Fi), ukur arus rata-rata seiring waktu menggunakan daya pemantauan model.
Saat menggunakan sumber daya eksternal sebagai pengganti baterai perangkat, sistem mungkin mengalami masalah akibat termistor baterai yang tidak tersambung atau pin pengukur bahan bakar terintegrasi (yaitu membaca suhu baterai atau kapasitas baterai yang tersisa dapat mematikan kernel atau Android sistem). Baterai palsu dapat memberikan sinyal pada termistor atau pin pengukur bahan bakar yang meniru suhu dan kondisi biaya untuk sistem normal, dan juga dapat memberikan prospek yang nyaman bagi menyambungkan ke catu daya eksternal. Atau, Anda bisa memodifikasi sistem untuk mengabaikan data yang tidak valid dari baterai yang hilang.
Mengontrol penangguhan sistem
Bagian ini menjelaskan cara menghindari status penangguhan sistem saat Anda tidak ingin status tersebut mengganggu dengan pengukuran lain, dan cara mengukur daya tarik status penangguhan sistem saat Anda melakukannya ingin mengukurnya.
Mencegah penangguhan sistem
Penangguhan sistem dapat menimbulkan varian 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 agar tidak menangguhkan saat layar mati, gunakan penguncian layar saat aktif parsial. Menggunakan kabel USB, hubungkan perangkat ke host pengembangan, lalu berikan perintah berikut:
adb shell "echo temporary > /sys/power/wake_lock"
Saat berada dalam wake_lock
, status layar nonaktif tidak memicu penangguhan sistem.
(Jangan lupa melepas kabel USB dari perangkat sebelum mengukur konsumsi daya.)
Untuk menghapus penguncian layar saat aktif:
adb shell "echo temporary > /sys/power/wake_unlock"
Mengukur penangguhan sistem
Untuk mengukur tarikan daya selama status penangguhan sistem, ukur nilai
cpu.idle
di profil daya. Sebelum mengukur:
- Hapus penguncian layar saat aktif yang ada (seperti dijelaskan di atas).
- Tempatkan perangkat dalam mode pesawat untuk menghindari aktivitas serentak dengan radio seluler, yang mungkin berjalan pada prosesor yang terpisah dari bagian SoC yang dikendalikan oleh penangguhan sistem.
- Pastikan sistem dalam status ditangguhkan dengan:
- Mengonfirmasi pembacaan saat ini tetap pada nilai yang stabil. Hasil pembacaan harus sesuai rentang untuk konsumsi daya status penangguhan SoC ditambah konsumsi daya sistem komponen yang tetap mendapat daya (seperti USB PHY).
- Memeriksa output konsol sistem.
- Mengawasi indikasi eksternal status sistem (seperti LED mati saat tidak berada di menangguhkan).
Mengontrol kecepatan CPU
CPU aktif dapat dibawa {i>online<i} atau diletakkan secara {i>offline<i}, memiliki kecepatan waktu dan tegangan berubah (mungkin juga memengaruhi kecepatan bus memori dan status daya inti sistem lainnya), dan dapat memasuki status tidak ada aktivitas dengan daya yang lebih rendah saat berada dalam loop tidak ada aktivitas kernel. Saat mengukur CPU yang berbeda status daya untuk profil daya, hindari varian daya tarik saat mengukur parameter lain. Profil daya mengasumsikan semua CPU memiliki kecepatan dan karakteristik daya yang tersedia yang sama.
Saat mengukur daya CPU, atau sambil menahan daya CPU untuk melakukan pengukuran lain, biarkan
jumlah CPU yang membawa konstanta online (seperti memiliki satu CPU online dan sisanya
offline/tercolokkan). Menyimpan semua CPU kecuali satu CPU dalam penjadwalan tidak ada aktivitas mungkin dapat diterima
hasil pengujian tersebut. Menghentikan framework Android dengan adb shell stop
dapat mengurangi
aktivitas penjadwalan.
Anda harus menentukan kecepatan CPU yang tersedia untuk perangkat di profil daya
cpu.speeds
entri. 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 dengan jumlah inti yang terhubung ke internet secara signifikan memengaruhi konsumsi daya, Anda mungkin perlu memodifikasi {i>driver<i} {i>cpufreq<i} atau gubernur untuk platform tersebut. Sebagian besar platform mendukung mengontrol kecepatan CPU menggunakan {i>userspace cpufreq governance<i} dan menggunakan antarmuka {i>sysfs<i} untuk mengatur kecepatan tinggi. Misalnya, untuk menyetel kecepatan 200 MHz pada sistem yang hanya memiliki 1 CPU atau semua CPU yang berbagi kebijakan cpufreq umum, 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 tepatnya akan berbeda bergantung pada implementasi cpufreq platform.
Perintah ini memastikan kecepatan baru tidak berada di luar batas yang diizinkan, menyetel kecepatan baru, mencetak kecepatan di mana CPU benar-benar berjalan (untuk verifikasi). Jika saat ini kecepatan minimum sebelum eksekusi lebih tinggi dari 200.000, Anda mungkin perlu membalikkan urutan dari dua baris pertama, atau mengeksekusi baris pertama lagi untuk menurunkan kecepatan minimum sebelum menyetel kecepatan maksimum.
Untuk mengukur arus yang dikonsumsi oleh CPU yang berjalan pada berbagai kecepatan, gunakan konsol sistem untuk menempatkan CPU dalam loop yang terikat dengan CPU menggunakan perintah:
# while true; do true; done
Lakukan pengukuran saat loop dijalankan.
Beberapa perangkat dapat membatasi kecepatan CPU maksimum saat melakukan throttling termal karena pengukuran suhu (yaitu, setelah menjalankan CPU dengan kecepatan tinggi selama periode yang berkelanjutan). Perhatikan pembatasan tersebut, baik menggunakan {i>output<i} konsol sistem saat melakukan pengukuran atau dengan memeriksa log {i>kernel<i} setelah pengukuran.
Untuk nilai cpu.awake
, ukur daya yang dikonsumsi saat sistem tidak ada
menangguhkan dan tidak
menjalankan tugas. CPU harus berada dalam loop tidak ada aktivitas penjadwal berdaya rendah
, mungkin mengeksekusi instruksi Tunggu ARM untuk Event atau dalam status daya rendah khusus SoC
dengan latensi keluar cepat yang sesuai untuk penggunaan tidak ada aktivitas.
Untuk nilai cpu.active
, ukur daya saat sistem tidak dalam mode ditangguhkan dan
tidak melaksanakan tugas. Satu CPU (biasanya CPU utama) harus menjalankan tugas sementara semua CPU lainnya
harus dalam status tidak ada aktivitas.
Ukur daya layar
Saat mengukur layar yang sedang menyala, pastikan perangkat lain biasanya dinyalakan saat layar sedang menyala juga diaktifkan. Misalnya, jika lampu latar layar sentuh dan layar biasanya menyala saat layar aktif, pastikan perangkat ini aktif saat Anda mengukur untuk mendapatkan layar penggunaan daya.
Beberapa teknologi tampilan bervariasi dalam konsumsi daya sesuai dengan warna yang ditampilkan, menyebabkan pengukuran daya menjadi sangat bervariasi tergantung pada apa yang ditampilkan di layar pada saat pengukuran. Saat mengukur, pastikan layar menampilkan sesuatu yang memiliki daya karakteristik layar realistis. Usahakan untuk berada di antara bagian ekstrem dari layar serba hitam (yang menggunakan daya terendah untuk beberapa teknologi) dan layar putih. Pilihan yang umum adalah tampilan jadwal di aplikasi kalender, yang memiliki campuran latar belakang putih dan elemen non-putih.
Ukur daya tahan layar pada kecerahan tampilan/lampu latar minimum dan maksimum. Untuk menyetel kecerahan minimum:
- Menggunakan UI Android (tidak direkomendasikan). Tetapkan Setelan > Kecerahan Layar penggeser ke kecerahan tampilan minimum. Namun, UI Android memungkinkan pengaturan kecerahan hanya untuk minimal 10-20% dari kemungkinan kecerahan panel atau lampu latar, dan tidak memungkinkan setelan kecerahan yang sangat rendah sehingga layar mungkin tidak terlihat tanpa upaya besar.
- Gunakan file sysfs (direkomendasikan). Jika tersedia, gunakan file sysfs untuk mengontrol kecerahan panelnya sampai ke kecerahan minimum yang didukung oleh perangkat keras.
Selain itu, jika file {i>sysfs<i} platform memungkinkan pengaktifan panel LCD, lampu latar, dan {i>screen reader<i} dan mematikan layar, gunakan {i>file<i} untuk melakukan pengukuran dengan layar aktif dan nonaktif. Jika tidak, setel penguncian layar saat aktif parsial agar sistem tidak ditangguhkan, lalu aktifkan dan nonaktifkan layar dengan tombol daya.
Ukur daya Wi-Fi
Lakukan pengukuran Wi-Fi pada jaringan yang relatif tenang. Menghindari memasukkan pekerjaan tambahan memproses volume lalu lintas siaran yang tinggi yang tidak terkait dengan aktivitas yang diukur.
Nilai wifi.on
mengukur daya yang dikonsumsi saat Wi-Fi aktif, tetapi tidak
secara aktif mengirim
atau menerima. Hal ini sering diukur sebagai delta di antara tarikan saat ini
status penangguhan sistem (tidur) dengan Wi-Fi diaktifkan vs. dinonaktifkan.
Nilai wifi.scan
mengukur daya yang dikonsumsi selama pemindaian Wi-Fi untuk akses
poin. Aplikasi dapat memicu pemindaian Wi-Fi menggunakan class WifiManager
startScan()
API. Anda juga dapat membuka Setelan > Wi-Fi, yang menjalankan titik akses
memindai setiap beberapa detik dengan lonjakan konsumsi daya yang jelas, tetapi Anda harus mengurangi layar
daya dari pengukuran ini.
Catatan: Gunakan penyiapan terkontrol (seperti iperf) untuk menghasilkan jaringan yang menerima dan mengirimkan kemacetan.