HAL statistik daya

Daya subsistem perangkat sering diukur dan dicatat di lingkungan lab untuk berbagai kondisi steady state, seperti saat layar menyala, atau perangkat dalam status daya tidak ada aktivitas. Hal ini berfungsi untuk subsistem dengan daya draw konstanta, atau dalam kondisi yang mudah diukur di lingkungan lab, tetapi 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 status tidur subsistem. Di Android 10 dan yang lebih baru, fungsi pelaporan statistik kumulatif berada di API pengumpulan statistik daya IPowerStats.hal, dan menyediakan cara untuk mengambil data penggunaan energi di perangkat. Hal ini menggantikan bagian pengumpulan statistik kumulatif dari antarmuka IPower.hal, untuk pemisahan fungsi yang lebih jelas.

Pengukuran layanan IPowerStats tidak bersifat berkala. Hal ini terjadi pada momen penting, seperti saat baterai turun 1%. Pengukuran lebih jarang jika daya baterai rendah, dan lebih sering jika daya baterai tinggi. Data dapat dikirim kembali ke server, dan dapat digunakan dalam laporan bug untuk analisis dan pemilihan prioritas. Hal ini mendukung upaya berkelanjutan untuk mengurangi konsumsi daya dan meningkatkan daya tahan 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. Fungsi IPowerStats.hal mencakup API untuk memperoleh dan menggunakan data yang dikumpulkan dari pengukuran daya di perangkat untuk perangkat yang didukung:

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

API IPowerStats.hal digunakan oleh klien berikut:

  • Statsd, untuk mengumpulkan metrik konsumsi daya per rel.
  • Perfetto, untuk mengaitkan konsumsi daya dengan aktivitas CPU.
  • Batterystats, untuk meningkatkan atribusi baterai dengan menggunakan data yang diukur, 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, tetapi semua klien harus kembali ke IPower.hal jika IPowerStats.hal tidak diterapkan .

Opsi penerapan 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 hardware, atau cara lain yang tersedia untuk memantau dan mencatat statistik daya. Beberapa SoC mengumpulkan statistik penggunaan daya untuk Anda, atau Anda dapat memperoleh informasi residensi status entitas daya melalui software. Hardware pemantauan daya hanya diperlukan untuk mendukung getRailInfo(), getEnergyData(), dan streamEnergyData().

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

Contoh data yang ditampilkan oleh API pemantauan kereta api meliputi

  • Power rail untuk layar menghabiskan X µW.
  • Power rail untuk modem menghabiskan Y µW.

Contoh data yang ditampilkan oleh API status tidur subsistem mencakup

  • Modem tidur selama X md.
  • SoC berada dalam status penghentian daya selama Y md.
  • GPU berada dalam status penangguhan selama Z md.

Menggunakan subsistem pemantauan daya hardware

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

Anda harus mengimplementasikan driver kernel dengan cara yang mencegah kelebihan accumulator. Algoritma yang digunakan bergantung pada desain subsistem pemantauan daya hardware unik Anda, yang harus memberikan pengukuran voltase bus dan arus seketika dan rata-rata. Driver kernel harus mengambil data ini dengan cara yang tidak menghapus akumulator energi, dan harus mempertahankan data energi yang terakumulasi untuk setiap sub-jalur sejak booting, dalam bentuk variabel 64-bit yang bertambah dengan pembacaan energi dari setiap kueri akumulator.

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

Panduan desain

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

Memilih komponen, subsistem, dan statistik

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

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

Penyesuaian

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

  • Tentukan kolom mana yang akan diukur, dan seberapa sering kolom tersebut diukur.
  • Tentukan kapan harus membaca data, dan cara menafsirkannya.
  • Tentukan tindakan yang akan diambil dan kapan harus diambil, berdasarkan data Anda.

Validasi

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

Misalnya, jika Anda memanggil getRailInfo() dan tidak menampilkan apa pun, pengujian VTS akan gagal, karena Anda tidak menerima informasi tentang rail yang dipantau, atau status SUCCESS yang ditampilkan. Demikian pula, jika Anda menerima info kereta api, tetapi disertai dengan respons NON_SUPPORTED atau FILE_SYSTEM_ERROR, hal itu juga merupakan kegagalan. VTS memverifikasi bahwa spesifikasi produsen 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);