Statistik daya HAL

Daya subsistem perangkat sering kali diukur dan dicatat di lingkungan laboratorium untuk berbagai kondisi kondisi tetap, seperti saat layar menyala, atau perangkat dalam kondisi daya idle. Ini berfungsi untuk subsistem dengan penggunaan daya yang konstan, atau dalam kondisi yang mudah diukur di lingkungan laboratorium, namun tidak untuk kasus penggunaan tertentu, seperti saat layar menampilkan video.

IPower.hal 1.0 menyediakan antarmuka untuk meneruskan petunjuk daya dan melaporkan data kumulatif pada metrik kondisi tidur subsistem. Di Android 10 dan yang lebih tinggi, fungsi pelaporan statistik kumulatif berada di API pengumpulan status daya IPowerStats.hal , dan menyediakan cara untuk mengambil data penggunaan energi di perangkat. Ini menggantikan bagian pengumpulan statistik kumulatif dari antarmuka IPower.hal , untuk pemisahan fungsionalitas yang lebih jelas.

Pembacaan layanan IPowerStats tidak berkala. Hal ini terjadi pada saat-saat penting, misalnya saat baterai habis 1%. Pembacaan akan lebih jarang dilakukan saat daya baterai rendah, dan lebih sering saat daya baterai tinggi. Data dapat dikirim kembali ke server, dan dapat digunakan dalam laporan bug untuk analisis dan triase. Hal ini mendukung upaya berkelanjutan untuk mengurangi konsumsi daya dan meningkatkan masa pakai baterai.

IPower.hal dan IPowerStats.hal

Antarmuka IPower.hal dan IPowerStats.hal tersedia di Android 10, tetapi fungsi pengumpulan statistik IPower.hal hanya tersedia dari antarmuka IPowerStats.hal . Fungsionalitas IPowerStats.hal mencakup API untuk memperoleh dan menggunakan data yang dikumpulkan dari pengukuran daya pada perangkat untuk perangkat yang didukung:

  • Melakukan pengukuran energi tingkat rel untuk klien frekuensi rendah ( getRailInfo ) dan frekuensi tinggi ( streamEnergyData ), dan melaporkan akumulasi energi sejak booting.
  • Melaporkan informasi terkait setiap PowerEntity yang didukung yang datanya tersedia. PowerEntity adalah subsistem platform, periferal, atau domain daya yang memengaruhi total konsumsi daya perangkat.
  • Melaporkan kumpulan status entitas daya ( getPowerEntityStateInfo ) yang data residensinya disediakan oleh entitas tertentu, lalu melaporkan akumulasi data untuk setiap PowerEntity yang ditentukan.

API IPowerStats.hal digunakan oleh klien berikut:

  • Statsd , untuk mengumpulkan metrik konsumsi daya per rel.
  • Perfetto , untuk mengkorelasikan konsumsi daya dengan aktivitas CPU.
  • Batterystats , untuk meningkatkan atribusi baterai dengan menggunakan data terukur, bukan memperkirakan konsumsi baterai dari konstanta yang telah ditentukan sebelumnya di power_profile.xml.

Dengan Android 10 dan yang lebih tinggi, produsen perangkat dapat memilih antara fungsi IPower.hal dan IPowerStats.hal , namun semua klien harus kembali ke IPower.hal jika IPowerStats.hal tidak diterapkan .

Opsi implementasi IPowerStats.hal

Hanya fungsi IPower.hal yang tersedia di Android 7 hingga Android 9. Perangkat yang telah diupgrade ke Android 10 harus memiliki subsistem pemantauan daya perangkat keras, atau sarana lain yang tersedia untuk memantau dan mencatat statistik daya. Beberapa SoC mengumpulkan statistik penggunaan daya untuk Anda, atau Anda dapat memperoleh informasi tempat tinggal di negara bagian entitas listrik melalui perangkat lunak. Perangkat keras pemantauan daya hanya diperlukan untuk mendukung getRailInfo() , getEnergyData() , dan streamEnergyData() .

Jika Anda menerapkan IPowerStats.hal tanpa perangkat keras pemantau daya, getRailInfo(), getEnergyData() , dan streamEnergyData() akan mengembalikan NOT_SUPPORTED . Demikian pula, getPowerEntityInfo(), getPowerEntityStateInfo() , dan getPowerEntityStateResidencyData() juga dapat mengembalikan NOT_SUPPORTED jika tidak dimaksudkan untuk digunakan.

Contoh data yang dikembalikan oleh API pemantauan kereta api meliputi

  • Rel daya untuk layar mengonsumsi X µW.
  • Rel daya untuk modem mengkonsumsi Y µW.

Contoh data yang dikembalikan oleh API kondisi tidur subsistem meliputi

  • Modem tertidur selama X ms.
  • SoC berada dalam kondisi mati listrik selama Y ms.
  • GPU berada dalam status penangguhan selama Z ms.

Gunakan subsistem pemantauan daya perangkat keras

Jika desain perangkat Anda memiliki subsistem pemantauan daya perangkat keras, terapkan IPowerStats.hal dengan membuat satu simpul sysfs tempat PowerStats.hal dapat mengurai data, atau dengan membuat kumpulan panggilan sistem tipe ioctl .

Anda harus mengimplementasikan driver kernel Anda sedemikian rupa untuk mencegah kelebihan akumulator. Algoritme yang digunakan bergantung pada desain subsistem pemantauan daya perangkat keras unik Anda, yang harus menyediakan pengukuran tegangan dan arus bus sesaat dan rata-rata. Driver kernel harus menangkap data ini dengan cara yang tidak menghapus akumulator energi, dan harus menjaga akumulasi data energi untuk setiap subrel sejak boot, dalam bentuk variabel 64-bit yang bertambah seiring dengan pembacaan energi dari setiap permintaan akumulator.

Statistik untuk komponen tertentu (atau opsional, beberapa komponen) harus berada dalam satu node. Meskipun ini bukan penggunaan sysfs konvensional (yang biasanya membatasi setiap node pada satu nilai), ini memastikan semua data konsisten.

Panduan desain

  • Pertahankan latensi tetap rendah (maksimum 1 mdetik) saat membaca dari node sysfs atau melakukan panggilan sistem.
  • Pastikan fungsi statistik pendukung tidak meningkatkan konsumsi daya secara signifikan:
    • Jangan menambah titik akses (AP) dan/atau bangun subsistem untuk melacak parameter seperti waktu yang dihabiskan dalam mode tidur.
    • Transfer statistik antara prosesor aplikasi dan firmware secara oportunistik dengan lalu lintas lain jika memungkinkan.
  • Jika perlu, subsistem dapat menggunakan fungsi driver berikut:
    • Menyimpan data dalam cache secara internal untuk menghindari latensi/pembangunan dengan mengorbankan data yang sedikit basi.
    • Melakukan ekstrapolasi ketika subsistem tertidur, untuk memberikan waktu tidur yang diperbarui tanpa membangunkan subsistem.

Pilih komponen, subsistem, dan statistik

Saat memilih komponen atau subsistem mana yang akan digunakan untuk mengumpulkan data IPowerStats.hal , pilih apa pun pada perangkat yang mengonsumsi arus signifikan (5 mA atau lebih), atau yang mendukung beberapa mode konsumsi daya, seperti yang berikut:

  • Subsistem SoC individu.
  • Subsistem yang sebagian atau seluruhnya berada di luar SoC, seperti WiFi, pemroses gambar, atau pemroses keamanan.
  • Periferal seperti LED dan kamera berdaya tinggi.
  • Domain daya yang menggunakan mode berbeda (seperti domain daya untuk SoC secara keseluruhan).

Kustomisasi

Fitur opsional ini dapat disesuaikan. Rancang kasus penggunaan dan sesuaikan penggunaan Anda:

  • Putuskan rel mana yang akan diukur, dan seberapa sering mengukurnya.
  • Putuskan kapan membaca data, dan bagaimana menafsirkannya.
  • Putuskan tindakan apa yang harus diambil dan kapan melakukannya, berdasarkan data Anda.

Validasi

Tes VTS memastikan persyaratan Android terpenuhi. Komentar di IPowerStats.hal digunakan untuk memverifikasi bahwa perangkat mematuhi.

Misalnya, jika Anda memanggil getRailInfo() dan tidak mengembalikan apa pun, pengujian VTS akan gagal, karena Anda tidak menerima informasi tentang rel yang dipantau, atau status SUCCESS yang dikembalikan. Demikian pula, jika Anda menerima info kereta api, namun disertai dengan respons NON_SUPPORTED atau FILE_SYSTEM_ERROR , itu juga merupakan kegagalan. VTS memverifikasi bahwa spesifikasi pabrikan perangkat dipatuhi dalam file HAL, menggunakan persyaratan dalam komentar IPower.hal dan IPowerStats.hal. Contoh komentar yang digunakan dalam pengujian VTS ditunjukkan di bawah ini:

/**
* Rail information:
* Reports information related to the rails being monitored.
*
* @return rails Information about monitored rails.
* @return status SUCCESS on success or NOT_SUPPORTED if
* feature is not enabled or FILESYSTEM_ERROR on filesystem nodes
* access error.
*/
getRailInfo()
generates(vec<e;RailInfo>e; rails, Status status);