Güç istatistikleri HAL

Cihaz alt sistemi gücü genellikle ekranın açık olması veya cihazın boş güç durumunda olması gibi çeşitli sabit durum koşulları için laboratuvar ortamında ölçülür ve kaydedilir. Bu, sabit güç çekişine sahip alt sistemler için veya laboratuvar ortamlarında kolayca ölçülebilen koşullar altında işe yarar, ancak ekranın video görüntülemesi gibi belirli kullanım durumları için işe yaramaz.

IPower.hal 1.0 güç ipuçlarını iletmek ve alt sistem uyku durumu ölçümlerine ilişkin kümülatif verileri raporlamak için bir arayüz sağlar. Android 10 ve sonraki sürümlerde, kümülatif istatistik raporlama işlevi IPowerStats.hal güç istatistikleri toplama API'lerinde bulunur ve cihazdaki enerji kullanımı verilerini almanın bir yolunu sağlar. Bu, işlevselliklerin daha net bir şekilde ayrılması için IPower.hal arayüzünün kümülatif istatistik toplama kısmının yerini alır.

IPowerStats hizmet okumaları periyodik değildir. Bunlar, pilin %1 oranında azalması gibi önemli anlarda meydana gelir. Pil tüketimi düşük olduğunda okumalar daha az sıklıkta yapılır, yüksek olduğunda ise daha sık okunur. Veriler sunuculara geri gönderilebilir ve analiz ve önceliklendirme için hata raporlarında kullanılabilir. Bu, güç tüketimini azaltma ve pil ömrünü artırmaya yönelik devam eden çabaları desteklemektedir.

IPower.hal ve IPowerStats.hal

Hem IPower.hal hem de IPowerStats.hal arayüzleri Android 10'da mevcuttur, ancak IPower.hal istatistik toplama işlevi yalnızca IPowerStats.hal arayüzünden kullanılabilir. IPowerStats.hal işlevi, desteklenen cihazlar için cihaz üzeri güç ölçümlerinden toplanan verileri almaya ve kullanmaya yönelik API'leri içerir:

  • Hem düşük frekanslı ( getRailInfo ) hem de yüksek frekanslı ( streamEnergyData ) istemciler için demiryolu düzeyinde enerji ölçümleri gerçekleştirir ve önyüklemeden bu yana biriken enerjiyi raporlar.
  • Verilerin mevcut olduğu desteklenen her PowerEntity ile ilgili bilgileri raporlar. PowerEntity toplam cihaz güç tüketimini etkileyen bir platform alt sistemi, çevre birimi veya güç etki alanıdır.
  • Belirtilen varlıkların ikamet verileri sağladığı güç varlık durumları kümesini ( getPowerEntityStateInfo ) raporlar, ardından belirtilen her PowerEntity için birikmiş verileri raporlar.

IPowerStats.hal API'leri aşağıdaki istemciler tarafından kullanılır:

  • Statsd demiryolu başına güç tüketimi ölçümlerini toplamak için.
  • Perfetto , güç tüketimini CPU etkinliğiyle ilişkilendirmek için.
  • Batterystats , power_profile.xml.

Android 10 ve üzeri sürümlerde, bir cihaz üreticisi IPower.hal ve IPowerStats.hal işlevleri arasında seçim yapabilir ancak IPowerStats.hal uygulanmazsa tüm istemcilerin IPower.hal geri dönmesi gerekir.

IPowerStats.hal uygulama seçenekleri

Android 7'den Android 9'a kadar yalnızca IPower.hal işlevleri mevcuttur. Android 10'a yükseltilmiş cihazların bir donanım güç izleme alt sistemine veya güç istatistiklerini izlemek ve kaydetmek için başka araçlara sahip olması gerekir. Bazı SoC'ler sizin için güç kullanımı istatistiklerini toplar veya yazılım aracılığıyla güç sahibi kuruluş durumu ikamet bilgilerini alabilirsiniz. Güç izleme donanımı yalnızca getRailInfo() , getEnergyData() ve streamEnergyData() desteklemek için gereklidir.

IPowerStats.hal güç izleme donanımı olmadan uygularsanız, getRailInfo(), getEnergyData() ve streamEnergyData() NOT_SUPPORTED değerini döndürür. Benzer şekilde, getPowerEntityInfo(), getPowerEntityStateInfo() ve getPowerEntityStateResidencyData() da eğer kullanılması amaçlanmamışsa NOT_SUPPORTED değerini döndürebilir.

Demiryolu izleme API'leri tarafından döndürülen verilere örnekler:

  • Ekranın güç rayı X µW tüketiyordu.
  • Modemin güç rayı Y µW tüketiyordu.

Alt sistem uyku durumu API'leri tarafından döndürülen verilere örnekler şunları içerir:

  • Modem X ms boyunca uykudaydı.
  • SoC, Y ms boyunca güç kesintisi durumundaydı.
  • GPU Z ms boyunca askıya alma durumundaydı.

Donanım güç izleme alt sistemi kullanma

Cihaz tasarımınızda donanım güç izleme alt sistemi varsa, PowerStats.hal verileri ayrıştırabileceği tek bir sysfs düğümü oluşturarak veya ioctl tipi sistem çağrılarından oluşan bir koleksiyon oluşturarak IPowerStats.hal uygulayın.

Çekirdek sürücünüzü akümülatör taşmasını önleyecek şekilde uygulamanız gerekir. Kullanılan algoritma, hem anlık hem de ortalama veri yolu voltajı ve akım ölçümleri sağlaması gereken benzersiz donanım güç izleme alt sistemi tasarımınıza bağlıdır. Çekirdek sürücüsü, bu verileri enerji akümülatörlerini temizlemeyecek bir şekilde yakalamalı ve önyüklemeden bu yana her bir alt ray için biriken enerji verilerini, enerji okumasıyla artan 64 bitlik bir değişken biçiminde korumalıdır. her akümülatör sorgusu.

Belirli bir bileşene (veya isteğe bağlı olarak birden fazla bileşene) ilişkin istatistikler tek bir düğümde olmalıdır. Bu, sysfs'in (normalde her düğümü tek bir değerle sınırlandıran) geleneksel bir kullanımı olmasa da, tüm verilerin tutarlı olmasını sağlar.

Tasarım rehberliği

  • Sysfs düğümünden okurken veya sistem çağrıları yaparken gecikmeyi düşük tutun (maksimum 1 msn).
  • Destekleyici istatistik işlevselliğinin güç tüketimini ölçülebilir şekilde artırmadığından emin olun:
    • Uyku modunda geçirilen süre gibi parametreleri izlemek için erişim noktası (AP) ve/veya alt sistem uyandırmalarını artırmayın.
    • Mümkün olduğunda diğer trafikle birlikte uygulama işlemcisi ve ürün yazılımı arasındaki istatistikleri fırsatçı bir şekilde aktarın.
  • Gerekirse alt sistem aşağıdaki sürücü işlevlerini kullanabilir:
    • Biraz eskimiş veriler pahasına gecikmeyi/uyanmayı önlemek için verileri dahili olarak önbelleğe almak.
    • Alt sistemi uyandırmadan güncellenmiş uyku süresini sağlamak için alt sistem uykudayken ekstrapolasyon yapılması.

Bileşenleri, alt sistemleri ve istatistikleri seçin

IPowerStats.hal verilerinin toplanacağı bileşenleri veya alt sistemleri seçerken, cihazda önemli miktarda akım tüketen (5 mA veya daha fazla) veya aşağıdakiler gibi birden fazla güç tüketimi modunu destekleyen herhangi bir şeyi seçin:

  • Bireysel SoC alt sistemleri.
  • WiFi, görüntü işlemcisi veya güvenlik işlemcisi gibi kısmen veya tamamen SoC'nin dışındaki alt sistemler.
  • Yüksek güçlü LED'ler ve kameralar gibi çevre birimleri.
  • Farklı modlar kullanan güç alanları (bir bütün olarak SoC'nin güç alanı gibi).

Özelleştirme

Bu isteğe bağlı özellik özelleştirmeye uygundur. Kullanım senaryoları tasarlayın ve kullanımınızı özelleştirin:

  • Hangi rayların ölçüleceğine ve ne sıklıkta ölçüleceğine karar verin.
  • Verilerin ne zaman okunacağına ve nasıl yorumlanacağına karar verin.
  • Verilerinize dayanarak hangi eylemi ve ne zaman gerçekleştireceğinize karar verin.

Doğrulama

VTS testleri Android gereksinimlerinin karşılanmasını sağlar. IPowerStats.hal yorumlar bir cihazın uyumlu olduğunu doğrulamak için kullanılır.

Örneğin, getRailInfo() öğesini çağırırsanız ve hiçbir şey döndürmezseniz, izlenen raylar hakkında bilgi veya döndürülen SUCCESS durumu hakkında bilgi almadığınız için VTS testi başarısız olur. Benzer şekilde, demiryolu bilgisi aldıysanız ancak buna NON_SUPPORTED veya FILE_SYSTEM_ERROR yanıtı eşlik ettiyse bu da bir başarısızlıktır. VTS, IPower.hal ve IPowerStats.hal yorumlarındaki gereksinimleri kullanarak HAL dosyasında cihaz üreticisi spesifikasyonlarına uyulduğunu doğrular. VTS testinde kullanılan yorumların bir örneği aşağıda gösterilmiştir:

/**
* 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);