Mengukur Daya Komponen

Anda dapat menentukan konsumsi daya masing-masing komponen dengan membandingkan arus yang ditarik oleh perangkat saat komponen dalam kondisi yang diinginkan (hidup, aktif, pemindaian, dll.) dan saat komponen mati. Ukur arus sesaat rata-rata yang ditarik pada perangkat pada tegangan nominal menggunakan monitor daya eksternal, seperti catu daya bangku atau alat pemantau baterai khusus (seperti Monsoon Solution Inc. Power Monitor dan perangkat lunak Power Tool).

Produsen sering memberikan informasi tentang arus yang dikonsumsi oleh komponen individu. Gunakan informasi ini jika secara akurat mewakili arus yang diambil dari baterai perangkat dalam praktik. Namun, validasi nilai yang diberikan pabrikan sebelum menggunakan nilai tersebut di 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 diuji mungkin menarik arus dari host, sehingga menurunkan pengukuran pada baterai. Hindari koneksi USB On-The-Go (OTG), karena perangkat OTG mungkin menarik arus dari perangkat yang 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:

  • Seluler, Wi-Fi, dan Bluetooth menerima, mengirim, atau aktivitas pemindaian . Saat tidak mengukur daya radio seluler, atur perangkat ke mode pesawat dan aktifkan Wi-Fi atau Bluetooth sebagaimana mestinya.
  • Layar hidup/mati . Warna yang ditampilkan saat layar menyala dapat memengaruhi penggunaan daya pada beberapa teknologi layar. Matikan layar saat mengukur nilai untuk komponen non-layar.
  • Sistem menangguhkan/melanjutkan . Status layar mati dapat memicu penangguhan sistem, menempatkan bagian perangkat dalam kondisi daya rendah atau mati. Hal ini dapat memengaruhi konsumsi daya komponen yang diukur dan menyebabkan perbedaan besar dalam pembacaan daya karena sistem secara berkala melanjutkan untuk mengirim alarm, dll. Untuk detailnya, lihat Mengontrol penangguhan sistem .
  • CPU mengubah kecepatan dan memasuki/keluar dari status idle penjadwal daya rendah . Selama operasi normal, sistem sering melakukan penyesuaian kecepatan CPU, jumlah inti CPU online, dan status inti sistem lainnya seperti kecepatan bus memori dan voltase rel daya yang terkait dengan CPU dan memori. Selama pengujian, penyesuaian ini memengaruhi pengukuran daya:
    • Operasi penskalaan kecepatan CPU dapat mengurangi jumlah penskalaan jam dan tegangan bus memori dan komponen inti sistem lainnya.
    • Aktivitas penjadwalan dapat memengaruhi persentase waktu yang dihabiskan CPU dalam status siaga berdaya rendah. Untuk detail tentang 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 pada perangkat, menjalankan perangkat pada kondisi stabil saat ini, mempertahankan kecepatan CPU konstan, dan menggunakan wakelock parsial untuk mencegah sistem ditangguhkan. Joe kemudian mematikan layar perangkat dan melakukan pengukuran (200mA). Selanjutnya, Joe menyalakan layar perangkat pada kecerahan minimum dan melakukan pengukuran lain (300mA). Nilai screen.on adalah 100mA (300 - 200).

Catatan : Untuk komponen yang tidak memiliki konsumsi arus bentuk gelombang datar saat aktif (seperti radio seluler atau Wi-Fi), ukur arus rata-rata dari waktu ke waktu menggunakan alat pemantau 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 mematikan kernel atau sistem Android) . Baterai palsu dapat memberikan sinyal pada termistor atau pin pengukur bahan bakar yang meniru pembacaan suhu dan status pengisian daya untuk sistem normal, dan juga dapat memberikan petunjuk yang nyaman untuk menghubungkan ke catu daya eksternal. Atau, Anda dapat 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 mengganggu pengukuran lain, dan cara mengukur penarikan daya status penangguhan sistem saat Anda ingin mengukurnya.

Mencegah penangguhan sistem

Penangguhan sistem dapat menimbulkan perbedaan 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 ditangguhkan saat layar mati, gunakan wakelock parsial sementara. Menggunakan kabel USB, sambungkan perangkat ke host pengembangan, lalu jalankan perintah berikut:

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

Saat berada di wake_lock , status layar mati tidak memicu penangguhan sistem. (Ingatlah untuk melepaskan kabel USB dari perangkat sebelum mengukur konsumsi daya.)

Untuk menghapus wakelock:

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

Sistem pengukuran ditangguhkan

Untuk mengukur penarikan daya selama status penangguhan sistem, ukur nilai cpu.idle di profil daya. Sebelum mengukur:

  • Hapus wakelock yang ada (seperti dijelaskan di atas).
  • Tempatkan perangkat dalam mode pesawat untuk menghindari aktivitas serentak oleh radio seluler, yang mungkin berjalan pada prosesor yang terpisah dari bagian SoC yang dikendalikan oleh sistem yang ditangguhkan.
  • Pastikan sistem dalam status ditangguhkan dengan:
    • Mengkonfirmasi pembacaan saat ini menetap ke nilai yang stabil. Pembacaan harus berada dalam kisaran yang diharapkan untuk konsumsi daya status penangguhan SoC ditambah konsumsi daya komponen sistem yang tetap menyala (seperti USB PHY).
    • Memeriksa keluaran konsol sistem.
    • Menonton indikasi eksternal status sistem (seperti LED mati saat tidak dalam penundaan).

Mengontrol kecepatan CPU

CPU aktif dapat dibawa online atau offline, memiliki kecepatan clock dan voltase terkait yang berubah (mungkin juga memengaruhi kecepatan bus memori dan status daya inti sistem lainnya), dan dapat memasuki status idle daya yang lebih rendah saat berada di loop idle kernel. Saat mengukur status daya CPU yang berbeda untuk profil daya, hindari perbedaan penarikan daya saat mengukur parameter lainnya. Profil daya mengasumsikan semua CPU memiliki kecepatan dan karakteristik daya yang sama.

Saat mengukur daya CPU, atau sambil menahan daya CPU konstan untuk melakukan pengukuran lainnya, jaga agar jumlah CPU yang dibawa online konstan (seperti memiliki satu CPU online dan sisanya offline/hotplugged). Menjaga semua CPU kecuali satu dalam penjadwalan menganggur 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 Anda 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 sesuai dengan pengukuran daya yang sesuai dalam nilai cpu.active .

Untuk platform di mana jumlah core yang dibawa online secara signifikan mempengaruhi konsumsi daya, Anda mungkin perlu memodifikasi driver cpufreq atau governor untuk platform tersebut. Sebagian besar platform mendukung pengontrolan kecepatan CPU menggunakan gubernur cpufreq userspace dan menggunakan antarmuka sysfs untuk mengatur kecepatan. Misalnya, untuk menyetel kecepatan 200MHz pada sistem dengan hanya 1 CPU atau semua CPU yang berbagi kebijakan cpufreq umum, gunakan konsol sistem atau adb shell 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 tergantung pada implementasi cpufreq platform.

Perintah-perintah ini memastikan kecepatan baru tidak di luar batas yang diizinkan, atur kecepatan baru, lalu cetak kecepatan di mana CPU benar-benar berjalan (untuk verifikasi). Jika kecepatan minimum saat ini sebelum eksekusi lebih tinggi dari 200000, Anda mungkin perlu membalik urutan dua baris pertama, atau mengeksekusi baris pertama lagi untuk menurunkan kecepatan minimum sebelum mengatur kecepatan maksimum.

Untuk mengukur arus yang dikonsumsi oleh CPU yang berjalan pada berbagai kecepatan, gunakan konsol sistem untuk menempatkan CPU dalam loop terikat-CPU menggunakan perintah:

# while true; do true; done

Lakukan pengukuran saat loop dijalankan.

Beberapa perangkat dapat membatasi kecepatan CPU maksimum saat melakukan pelambatan termal karena pengukuran suhu tinggi (yaitu setelah menjalankan CPU pada kecepatan tinggi untuk periode yang berkelanjutan). Perhatikan pembatasan tersebut, baik menggunakan keluaran konsol sistem saat melakukan pengukuran atau dengan memeriksa log kernel setelah pengukuran.

Untuk nilai cpu.awake , ukur daya yang dikonsumsi saat sistem tidak dalam penundaan dan tidak menjalankan tugas. CPU harus berada dalam loop idle penjadwal berdaya rendah , mungkin menjalankan instruksi ARM Wait For Event atau dalam status daya rendah khusus SoC dengan latensi keluar cepat yang sesuai untuk penggunaan idle.

Untuk nilai cpu.active , ukur daya saat sistem tidak dalam mode tunda dan tidak menjalankan tugas. Satu CPU (biasanya CPU utama) harus menjalankan tugas sementara semua CPU lainnya harus dalam keadaan idle.

Mengukur kekuatan layar

Saat mengukur layar pada daya, pastikan perangkat lain yang biasanya dihidupkan saat layar diaktifkan juga menyala. Misalnya, jika layar sentuh dan lampu latar layar biasanya menyala saat layar menyala, pastikan perangkat ini menyala saat Anda mengukur untuk mendapatkan contoh layar yang realistis tentang penggunaan daya.

Beberapa teknologi tampilan bervariasi dalam konsumsi daya sesuai dengan warna yang ditampilkan, menyebabkan pengukuran daya sangat bervariasi tergantung pada apa yang ditampilkan di layar pada saat pengukuran. Saat mengukur, pastikan layar menampilkan sesuatu yang memiliki karakteristik daya layar realistis. Bidik antara bagian ekstrem dari layar serba hitam (yang mengonsumsi daya paling rendah untuk beberapa teknologi) dan layar serba putih. Pilihan umum adalah tampilan jadwal di aplikasi kalender, yang memiliki campuran elemen latar belakang putih dan non-putih.

Ukur layar dengan daya pada kecerahan tampilan/lampu latar minimum dan maksimum . Untuk mengatur kecerahan minimum:

  • Gunakan UI Android (tidak disarankan). Atur penggeser Pengaturan > Kecerahan Tampilan ke kecerahan tampilan minimum. Namun, UI Android memungkinkan pengaturan kecerahan hanya ke minimum 10-20% dari kemungkinan kecerahan panel/lampu latar, dan tidak mengizinkan pengaturan kecerahan sangat rendah sehingga layar mungkin tidak terlihat tanpa usaha keras.
  • Gunakan file sysfs (disarankan). Jika tersedia, gunakan file sysfs untuk mengontrol kecerahan panel hingga kecerahan minimum yang didukung oleh perangkat keras.

Selain itu, jika file sysfs platform memungkinkan menghidupkan dan mematikan panel LCD, lampu latar, dan layar sentuh, gunakan file tersebut untuk melakukan pengukuran dengan layar hidup dan mati. Jika tidak, atur penguncian layar sebagian agar sistem tidak ditangguhkan, lalu hidupkan dan matikan layar dengan tombol daya.

Mengukur daya Wi-Fi

Lakukan pengukuran Wi-Fi pada jaringan yang relatif tenang. Hindari memperkenalkan pekerjaan tambahan yang memproses volume lalu lintas siaran yang tinggi yang tidak terkait dengan aktivitas yang sedang diukur.

Nilai wifi.on mengukur daya yang dikonsumsi saat Wi-Fi diaktifkan tetapi tidak secara aktif mengirim atau menerima. Ini sering diukur sebagai delta antara penarikan saat ini dalam keadaan sistem ditangguhkan (tidur) dengan Wi-Fi diaktifkan vs dinonaktifkan.

Nilai wifi.scan mengukur daya yang dikonsumsi selama pemindaian Wi-Fi untuk titik akses. Aplikasi dapat memicu pemindaian Wi-Fi menggunakan kelas startScan() API . Anda juga dapat membuka Pengaturan > Wi-Fi, yang melakukan pemindaian titik akses setiap beberapa detik dengan lonjakan konsumsi daya yang nyata, tetapi Anda harus mengurangi daya layar dari pengukuran ini.

Catatan : Gunakan pengaturan terkontrol (seperti iperf ) untuk menghasilkan lalu lintas penerimaan dan pengiriman jaringan.