Ukur kekuatan komponen

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

Pabrikan sering kali memberikan informasi tentang arus yang dikonsumsi oleh masing-masing komponen. Gunakan informasi ini jika secara akurat mewakili arus yang diambil dari baterai perangkat dalam praktiknya. Namun, validasi nilai yang diberikan produsen sebelum menggunakan nilai tersebut di profil daya perangkat Anda.

Kontrol konsumsi daya

Saat melakukan pengukuran, pastikan perangkat tidak memiliki sambungan ke sumber pengisian daya eksternal, seperti sambungan 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 mengambil 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 lainnya. Aktivitas sistem yang dapat menimbulkan perubahan yang tidak diinginkan pada pengukuran daya meliputi:

  • Aktivitas penerimaan, transmisi, atau pemindaian seluler, Wi-Fi, dan Bluetooth . Saat tidak mengukur daya radio seluler, atur perangkat ke mode pesawat dan aktifkan Wi-Fi atau Bluetooth jika diperlukan.
  • 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 ditangguhkan/dilanjutkan . Status layar mati dapat memicu penghentian sistem, sehingga membuat bagian-bagian perangkat berada dalam kondisi berdaya rendah atau mati. Hal ini dapat memengaruhi konsumsi daya komponen yang diukur dan menyebabkan perbedaan besar dalam pembacaan daya saat sistem secara berkala melanjutkan pengiriman alarm, dll. Untuk detailnya, lihat Penangguhan sistem kontrol .
  • CPU mengubah kecepatan dan memasuki/keluar dari kondisi idle penjadwal berdaya rendah . Selama pengoperasian normal, sistem sering melakukan penyesuaian terhadap 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 clock dan voltase bus memori dan komponen inti sistem lainnya.
    • Aktivitas penjadwalan dapat memengaruhi persentase waktu yang dihabiskan CPU dalam kondisi idle berdaya rendah. Untuk detail tentang mencegah terjadinya penyesuaian ini selama pengujian, lihat Mengontrol kecepatan CPU .

Misalnya, Joe Droid ingin menghitung nilai screen.on untuk suatu perangkat. Dia mengaktifkan mode pesawat pada perangkat, menjalankan perangkat pada kondisi arus stabil, menjaga kecepatan CPU tetap konstan, dan menggunakan penguncian layar saat aktif sebagian untuk mencegah penangguhan sistem. Joe kemudian mematikan layar perangkat dan melakukan pengukuran (200 mA). Selanjutnya, Joe menyalakan layar perangkat pada kecerahan minimum dan melakukan pengukuran lain (300 mA). Nilai screen.on adalah 100 mA (300 - 200).

Catatan : Untuk komponen yang tidak memiliki bentuk gelombang datar konsumsi arus 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 suhu baterai yang tidak valid atau sisa kapasitas baterai 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 mudah untuk menghubungkan ke catu daya eksternal. Alternatifnya, 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 sistem tersebut mengganggu pengukuran lainnya, dan cara mengukur penarikan daya dari status penangguhan sistem saat Anda ingin mengukurnya.

Mencegah penangguhan sistem

Penangguhan sistem dapat menimbulkan varians yang tidak diinginkan dalam pengukuran daya dan menempatkan komponen sistem pada kondisi daya rendah yang tidak sesuai untuk mengukur penggunaan daya aktif. Untuk mencegah sistem ditangguhkan saat layar mati, gunakan penguncian layar saat aktif sebagian 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"

Mengukur penangguhan sistem

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 radio seluler secara bersamaan, yang mungkin berjalan pada prosesor terpisah dari bagian SoC yang dikontrol oleh penangguhan sistem.
  • Pastikan sistem dalam keadaan ditangguhkan dengan:
    • Mengkonfirmasi pembacaan saat ini mencapai nilai yang stabil. Pembacaan harus berada dalam kisaran yang diharapkan untuk konsumsi daya dari status penangguhan SoC ditambah konsumsi daya komponen sistem yang tetap diberi daya (seperti USB PHY).
    • Memeriksa keluaran konsol sistem.
    • Memperhatikan indikasi eksternal status sistem (seperti LED mati saat tidak ditangguhkan).

Kontrol kecepatan CPU

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

Saat mengukur daya CPU, atau saat menjaga daya CPU tetap konstan untuk melakukan pengukuran lainnya, jaga agar jumlah CPU yang online tetap konstan (seperti satu CPU online dan sisanya offline/hotplugged). Membiarkan semua CPU kecuali satu dalam penjadwalan menganggur dapat memberikan 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 profil daya cpu.speeds . 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 di mana jumlah inti yang online secara signifikan memengaruhi konsumsi daya, Anda mungkin perlu memodifikasi driver cpufreq atau gubernur 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 yang sama, 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 persisnya berbeda-beda, bergantung pada implementasi platform cpufreq.

Perintah-perintah ini memastikan kecepatan baru tidak berada di luar batas yang diperbolehkan, mengatur kecepatan baru, lalu mencetak kecepatan di mana CPU sebenarnya berjalan (untuk verifikasi). Jika kecepatan minimum saat ini sebelum eksekusi lebih tinggi dari 200000, Anda mungkin perlu membalikkan urutan dua baris pertama, atau menjalankan kembali baris pertama 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 yang 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 dengan kecepatan tinggi dalam jangka waktu lama). Perhatikan batasan tersebut, baik menggunakan output konsol sistem saat melakukan pengukuran atau dengan memeriksa log kernel setelah pengukuran.

Untuk nilai cpu.awake , ukur daya yang dikonsumsi saat sistem tidak dalam keadaan ditangguhkan dan tidak menjalankan tugas. CPU harus berada dalam loop idle penjadwal berdaya rendah, mungkin mengeksekusi instruksi ARM Wait For Event atau dalam status daya rendah khusus SoC dengan latensi keluar cepat yang cocok 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.

Ukur kekuatan layar

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

Beberapa teknologi tampilan memiliki konsumsi daya yang bervariasi 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 kekuatan layar yang realistis. Bidik antara layar serba hitam ekstrem (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 daya layar 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 mengizinkan pengaturan kecerahan hanya hingga minimal 10-20% dari kecerahan panel atau lampu latar yang memungkinkan, dan tidak mengizinkan pengaturan kecerahan terlalu 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 menyalakan dan mematikan panel LCD, lampu latar, dan layar sentuh, gunakan file tersebut untuk melakukan pengukuran dengan layar hidup dan mati. Jika tidak, atur wakelock parsial agar sistem tidak ditangguhkan, lalu hidupkan dan matikan layar dengan tombol daya.

Ukur daya Wi-Fi

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

Nilai wifi.on mengukur daya yang dikonsumsi saat Wi-Fi diaktifkan tetapi tidak secara aktif mengirim atau menerima. Hal ini sering kali diukur sebagai delta antara status penarikan sistem (tidur) saat ini 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 WifiManager startScan() API . Anda juga dapat membuka Pengaturan > Wi-Fi, yang melakukan pemindaian titik akses setiap beberapa detik dengan lonjakan konsumsi daya yang nyata, namun Anda harus mengurangi daya layar dari pengukuran ini.

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