Energiestatistiken HAL

Die Leistung des Gerätesubsystems wird häufig in einer Laborumgebung gemessen und aufgezeichnet für verschiedene stabile Statusbedingungen, z. B. wenn der Bildschirm eingeschaltet ist, das Gerät sich im Ruhezustand befindet. Dies funktioniert für Subsysteme mit einer konstanten oder unter Bedingungen, die in Laborumgebungen einfach gemessen werden können, aber nicht für bestimmte Anwendungsfälle, z. B. wenn auf einem Bildschirm ein Video wiedergegeben wird.

IPower.hal 1.0 stellt eine Schnittstelle zur Übergabe von bereit. Leistungshinweise und die Bereitstellung kumulativer Daten zu Messwerten für den Schlafzustand des Subsystems. Unter Android 10 und höher wird die Berichtsfunktion für kumulative Statistiken verwendet. befindet sich in den IPowerStats.hal APIs zur Erfassung von Energiestatistiken und ermöglicht es, den Energieverbrauch auf dem Gerät abzurufen. Dies ersetzt die Teil der IPower.hal-Benutzeroberfläche zum Erfassen von kumulativen Statistiken für eine deutlichere Trennung der Funktionen.

Die Messwerte des IPowerStats-Dienstes sind nicht regelmäßig. Sie treten am in wichtigen Momenten, etwa der Akku um 1% abfällt. Lesevorgänge werden seltener durchgeführt bei niedrigem Akkustand und häufiger bei hoher Akkuladung. Daten können an Server zurückgesendet und können in Fehlerberichten zur Analyse und Ersteinschätzung verwendet werden. Dies ermöglicht kontinuierliche Bemühungen, den Stromverbrauch zu senken Akkulaufzeit.

IPower.hal und IPowerStats.hal

Sowohl die IPower.hal- als auch die IPowerStats.hal-Oberfläche sind unter Android 10 verfügbar, aber die Die Funktionalität der IPower.hal-stats-Sammlung ist nur verfügbar über die IPowerStats.hal-Oberfläche. Die Die IPowerStats.hal-Funktionalität umfasst APIs, die erworben und verwendet werden können Daten, die bei der Leistungsmessung auf dem Gerät für unterstützte Geräte erhoben werden:

  • Führt Energiemessungen auf Bahnebene sowohl für niedrige Frequenzen (getRailInfo) und hohe Häufigkeit (streamEnergyData) und meldet die seit dem Start gesammelte Energie.
  • Meldet Informationen zu jedem unterstützten PowerEntity, für den Daten verfügbar sind. Ein PowerEntity ist ein Plattform-Subsystem, ein Peripheriegerät oder eine Energiedomäne, die sich auf die Gesamtmenge Stromverbrauch des Geräts.
  • Meldet die Gruppe von Energieentitätenstatus (getPowerEntityStateInfo) für die die angegebenen Entitäten Standortdaten bereitstellen, meldet dann die akkumulierte Daten für jeden angegebenen PowerEntity.

Die IPowerStats.hal APIs werden von den folgenden Clients verwendet:

  • Statsd, um Messwerte zum Energieverbrauch pro Schiene zu erfassen.
  • Perfetto, um den Energieverbrauch mit der CPU zu korrelieren Aktivitäten.
  • Batterystats, um die Akku-Attribution durch gemessene anstatt den Akkuverbrauch anhand vordefinierter Konstanten zu schätzen in power_profile.xml.

Bei Android 10 und höher kann ein Gerätehersteller zwischen die Funktionen IPower.hal und IPowerStats.hal, aber müssen alle Clients auf IPower.hal zurückgreifen, wenn IPowerStats.hal ist nicht implementiert .

Implementierungsoptionen für IPowerStats.hal

Unter Android 7 sind nur die IPower.hal-Funktionen verfügbar bis Android 9. Geräte mit einem Upgrade auf Android 10 müssen über ein Subsystem zur Hardware-Leistungsüberwachung oder andere Möglichkeiten verfügen, und Leistungsstatistiken aufzeichnen. Einige SoCs Stromnutzungsstatistiken für Sie oder Sie können den Standort der Power-Entity abrufen. durch Software zu verstehen. Die Hardware zur Stromüberwachung ist nur für unterstützen getRailInfo(), getEnergyData() und streamEnergyData()

Wenn Sie IPowerStats.hal ohne Energieüberwachung implementieren Hardware, getRailInfo(), getEnergyData() und streamEnergyData() gibt NOT_SUPPORTED zurück. In ähnlicher Weise getPowerEntityInfo(), getPowerEntityStateInfo() und getPowerEntityStateResidencyData()möglicherweise auch NOT_SUPPORTED, wenn sie nicht bestimmungsgemäß verwendet werden.

Beispiele für Daten, die von den Rail-Monitoring APIs zurückgegeben werden:

  • Die Stromschiene für das Display verbraucht X μW.
  • Die Stromschiene des Modems verbraucht Y μW.

Beispiele für Daten, die von den Sleep-State-APIs des Subsystems zurückgegeben werden:

  • Das Modem war X ms lang im Ruhemodus.
  • Das SoC war Y ms lang im Power-Minimierung-Zustand.
  • Die GPU war Z ms im Ruhemodus.

Subsystem zur Hardware-Leistungsüberwachung verwenden

Wenn Ihr Gerätedesign ein Subsystem zur Hardware-Leistungsüberwachung hat, implementieren Sie IPowerStats.hal durch Erstellen eines einzelnen sysfs-Knotens aus denen PowerStats.hal Daten parsen kann, oder indem Sie eine Sammlung von Systemaufrufen des Typs ioctl.

Sie müssen den Kernel-Treiber so implementieren, dass Akkumulatoren verhindert werden Überlauf. Der verwendete Algorithmus hängt von der individuellen Leistungsüberwachung der Hardware ab Subsystemdesign, das sowohl die sofortige als auch die durchschnittliche Busspannung und aktuelle Messungen. Der Kernel-Treiber muss diese Daten so erfassen, das die Akkumulatoren nicht löscht, und die akkumulierte Energiedaten für jede Unterschienenbahn seit dem Start in Form eines 64-Bit- Variable, die mit den von jedem Akkumulatoren gemessenen Energie erhöht wird Abfrage.

Statistiken für eine bestimmte Komponente (oder optional mehrere Komponenten) müssen in auf einen einzelnen Knoten. Dies ist zwar keine konventionelle Verwendung von sysfs normalerweise auf einen einzigen Wert begrenzt, wird sichergestellt, dass alle Daten einheitlich sind.

Hinweise zum Design

  • Halten Sie die Latenz beim Lesen aus dem sysfs-Knoten konfiguriert oder Systemaufrufe vorgenommen werden.
  • Sicherstellen, dass die unterstützende Statistikfunktion den Wert nicht messbar erhöht Spitzenverbrauch:
    • Erhöhen Sie nicht die Zugriffspunkte (AP) und/oder Subsystem-Wakeups, um sie zu verfolgen Parameter wie die im Schlafmodus verbrachte Zeit.
    • Statistiken zwischen dem App-Prozessor und der Firmware nach Bedarf übertragen wenn möglich mit anderem Traffic.
  • Bei Bedarf kann das Subsystem die folgenden Treiberfunktionen verwenden:
    • Internes Caching von Daten zur Vermeidung von Latenzen/Wakeups auf Kosten von leichten veraltete Daten.
    • Hochrechnungen durchführen, während sich das Subsystem im Ruhemodus befindet, um aktualisierte ohne das Subsystem zu wecken.

Komponenten, Subsysteme und Statistiken auswählen

Bei der Auswahl, aus welchen Komponenten oder Subsystemen IPowerStats.hal-Daten, wählen Sie einen beliebigen Wert auf dem Gerät aus, mit ausreichend Strom (5 mA oder mehr) Stromverbrauchsmodi verwenden, z. B.:

  • Einzelne SoC-Subsysteme.
  • Subsysteme, die sich teilweise oder vollständig außerhalb des SoC befinden, wie z. B. WLAN, oder den Sicherheitsprozessor.
  • Peripheriegeräte wie Hochleistungs-LEDs und Kameras
  • Power-Domains mit verschiedenen Modi (z. B. die Power-Domain für das SoC insgesamt).

Personalisierung

Diese optionale Funktion kann angepasst werden. Designanwendungsfälle und die Nutzung anpassen:

  • Entscheiden Sie, welche Schienen gemessen werden sollen und wie häufig.
  • Entscheiden Sie, wann Sie die Daten lesen und wie Sie sie interpretieren.
  • Entscheide anhand deiner Daten, welche Maßnahmen du ergreifen möchtest und wann.

Zertifizierungsstufe

Durch VTS-Tests wird sichergestellt, dass die Android-Anforderungen erfüllt werden. Die Kommentare in IPowerStats.hal wird verwendet, um zu prüfen, ob sich ein Gerät befindet Compliance.

Wenn Sie z. B. getRailInfo() aufrufen und keine Antwort zurückgegeben wird, der VTS-Test schlägt fehl, da Sie keine Informationen zum überwachten oder den zurückgegebenen Status SUCCESS haben. Wenn Sie eine Benachrichtigung erhalten haben, Zugfahrkarteninformationen, die aber von einer NON_SUPPORTED- oder FILE_SYSTEM_ERROR zurückgegeben wird, ist dies ebenfalls ein Fehler. Der VTS ob die Spezifikationen des Geräteherstellers in der HAL-Datei eingehalten werden, unter Verwendung der Anforderungen in den Kommentaren von IPower.hal und IPowerStats.hal. Eine Hier ein Beispiel für Kommentare, die in VTS-Tests verwendet werden:

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