HAL statistik daya

Daya subsistem perangkat sering diukur dan dicatat di lingkungan lab untuk berbagai kondisi keadaan stabil, seperti saat layar aktif, atau perangkat dalam status daya tidak ada aktivitas. Ini berfungsi untuk subsistem dengan penggunaan daya, 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 tinggi, fungsi pelaporan statistik kumulatif berada di IPowerStats.hal API koleksi power-stat, 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.

Pembacaan layanan IPowerStats tidak berkala. Terjadi pada momen penting, seperti saat baterai menurun 1%. Lebih jarang membaca ketika baterai lemah, dan lebih sering saat baterai tinggi. Data mungkin dikirim kembali ke server, dan dapat digunakan dalam laporan {i>bug<i} untuk analisis dan triase. 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 yang tersedia dari antarmuka IPowerStats.hal. Tujuan Fungsi IPowerStats.hal menyertakan API yang akan diperoleh dan digunakan data yang dikumpulkan dari pengukuran daya di perangkat untuk perangkat yang didukung:

  • Melakukan pengukuran energi tingkat rel untuk frekuensi rendah (getRailInfo) dan frekuensi tinggi (streamEnergyData) klien, dan melaporkan akumulasi energi sejak {i>booting<i}.
  • Melaporkan informasi yang terkait dengan 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) entitas yang telah ditentukan memberikan data residensi, kemudian melaporkan akumulasi data untuk setiap PowerEntity yang ditentukan.

IPowerStats.hal API digunakan oleh klien berikut:

  • Statsd, untuk mengumpulkan metrik konsumsi daya per rel.
  • Perfetto, untuk menghubungkan konsumsi daya dengan CPU aktivitas Anda.
  • Batterystats, untuk meningkatkan atribusi baterai dengan pengukuran data daripada memperkirakan konsumsi baterai dari konstanta yang telah ditentukan dalam power_profile.xml.

Dengan Android 10 dan yang lebih baru, 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 perangkat keras, atau cara lain yang tersedia untuk memantau dan mencatat statistik daya. Beberapa SoC mengumpulkan statistik penggunaan daya untuk Anda, atau Anda dapat mendapatkan residensi status entitas daya informasi melalui perangkat lunak. Perangkat keras pemantauan daya hanya diperlukan untuk mendukung getRailInfo(), getEnergyData(), dan streamEnergyData().

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

Contoh data yang ditampilkan oleh API pemantauan kolom samping mencakup

  • Power rail untuk layar menghabiskan X μW.
  • Power rail untuk modem memakai Y μW.

Contoh data yang ditampilkan oleh API status tidur subsistem antara lain

  • Modem tidur selama X md.
  • SoC berada dalam status penciutan daya selama Y md.
  • GPU berada dalam status ditangguhkan selama Z md.

Menggunakan subsistem pemantauan daya hardware

Jika desain perangkat Anda memiliki subsistem pemantauan daya perangkat keras, 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 akumulator tambahan. Algoritma yang digunakan bergantung pada pemantauan daya hardware Anda yang unik desain subsistem, yang harus menyediakan tegangan segera dan rata-rata bus dan pengukuran saat ini. {i>Driver<i} {i>kernel<i} harus menangkap data ini dengan cara yang tidak membersihkan akumulator energi, dan harus menjaga akumulasi data energi untuk setiap sub-rel sejak boot, dalam bentuk paket 64-bit variabel yang bertambah dengan pembacaan energi dari setiap akumulator kueri.

Statistik untuk komponen tertentu (atau secara opsional, banyak komponen) harus dalam dalam satu {i>node<i}. Meskipun ini bukan penggunaan konvensional sysfs (yang biasanya membatasi setiap {i>node<i} ke satu nilai), ini memastikan semua data konsisten.

Panduan desain

  • Jaga latensi tetap rendah (1 md, maksimum) saat membaca dari sysfs atau melakukan panggilan sistem.
  • Pastikan bahwa mendukung fungsi statistik tidak secara terukur meningkatkan penggunaan daya:
    • Jangan tingkatkan bangun titik akses (AP) dan/atau 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:
    • Meng-cache data secara internal untuk menghindari latensi/aktif dengan mengorbankan sedikit data usang.
    • Melakukan ekstrapolasi saat subsistem sedang tidur, untuk memberikan informasi waktu tidur tanpa membangunkan subsistem.

Pilih komponen, subsistem, dan statistik

Ketika memilih komponen atau subsistem yang menjadi sumber data Data IPowerStats.hal, pilih apa saja di perangkat yang menggunakan arus signifikan (5 mA atau lebih), atau yang mendukung beberapa mode konsumsi daya, seperti berikut:

  • Masing-masing subsistem SoC.
  • Subsistem yang sebagian atau seluruhnya berada di luar SoC, seperti WiFi, prosesor gambar, atau pemroses keamanan.
  • Periferal seperti LED dan kamera berdaya tinggi.
  • Power domain yang menggunakan mode berbeda (seperti power domain untuk SoC secara keseluruhan).

Penyesuaian

Fitur opsional ini dapat disesuaikan. Kasus penggunaan desain dan menyesuaikan penggunaan:

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

Validasi

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

Misalnya, jika Anda memanggil getRailInfo() dan tidak menghasilkan apa pun, tes VTS gagal, karena Anda tidak menerima informasi tentang kolom samping, atau status yang ditampilkan SUCCESS. Demikian pula, jika Anda menerima info kereta api, tetapi disertai dengan NON_SUPPORTED atau Respons FILE_SYSTEM_ERROR, yang juga gagal. VTS memverifikasi spesifikasi produsen perangkat yang dipatuhi dalam file HAL, menggunakan persyaratan dalam komentar IPower.hal dan IPowerStats.hal. Channel contoh komentar yang digunakan dalam pengujian VTS ditampilkan 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);