L'alimentazione del sottosistema dei dispositivi viene spesso misurata e registrata in un ambiente di laboratorio in presenza di condizioni stazionarie diverse, ad esempio quando lo schermo è acceso o il Il dispositivo è in stato di inattività. Questo funziona per i sottosistemi con una costante o in condizioni facilmente misurabili in ambienti di laboratorio, ma non per alcuni casi d'uso, come la visualizzazione di un video su una schermata.
IPower.hal 1.0
fornisce un'interfaccia per trasmettere
Suggerimenti per l'alimentazione e report di dati cumulativi sulle metriche relative allo stato di sonno del sottosistema.
In Android 10 e versioni successive, la funzione di reporting cumulativo delle statistiche
che risiede nelle IPowerStats.hal
API di raccolta delle statistiche energetiche e
consente di recuperare i dati sul consumo energetico sul dispositivo. Questo sostituisce
parte dell'interfaccia di IPower.hal
per la raccolta
delle statistiche cumulative,
per una separazione più chiara delle funzionalità.
Le letture del servizio IPowerStats
non sono periodiche. Si verificano in
momenti chiave, ad esempio un calo dell'1% della batteria. Le letture sono meno frequenti
quando la batteria è in esaurimento e più frequente quando è scarica. I dati possono essere
inviate nuovamente ai server e potrebbero essere utilizzate nelle segnalazioni di bug a scopo di analisi e classificazione.
Ciò supporta gli sforzi continui per ridurre il consumo energetico e aumentare
della batteria.
IPower.hal e IPowerStats.hal
Entrambe le interfacce IPower.hal
e
IPowerStats.hal
sono disponibili su Android 10, ma
La funzionalità di raccolta delle statistiche di IPower.hal
è disponibile solo
disponibili dall'interfaccia IPowerStats.hal
. La
La funzionalità IPowerStats.hal
include API da acquisire e utilizzare
Dati raccolti dalle misurazioni dell'alimentazione sul dispositivo per i dispositivi supportati:
- Esegue misurazioni di energia a livello ferroviario sia per le basse frequenze.
(
getRailInfo
) e ad alta frequenza (streamEnergyData
) clienti e segnala l'accumulo di energia sin dall'avvio. - Segnala le informazioni relative a ogni
PowerEntity
supportato per cui sono disponibili dati.PowerEntity
è un sottosistema della piattaforma, una periferica o un dominio di alimentazione che influisce sul totale consumo di energia dal dispositivo. - Segnala l'insieme di stati delle entità di potenza (
getPowerEntityStateInfo
) per cui le entità specificate forniscono dati sulla residenza, riporta dati accumulati per ogniPowerEntity
specificato.
Le API IPowerStats.hal
vengono utilizzate dai seguenti client:
Statsd
, per raccogliere le metriche del consumo energetico per ferrovia.Perfetto
, per mettere in relazione il consumo energetico e la CPU attività.Batterystats
, per migliorare l'attribuzione della batteria utilizzando il monitoraggio anziché stimare il consumo della batteria in base a costanti predefinite trapower_profile.xml.
Con Android 10 e versioni successive, un produttore di dispositivi può scegliere tra
le funzioni IPower.hal
e IPowerStats.hal
, ma
tutti i clienti devono tornare a IPower.hal
se
IPowerStats.hal
non è implementato .
Opzioni di implementazione di IPowerStats.hal
Su Android 7 sono disponibili solo le funzioni di IPower.hal
tramite Android 9. I dispositivi di cui è stato eseguito l'upgrade ad Android 10 devono:
disporre di un sottosistema di monitoraggio dell'alimentazione dell'hardware o di altri mezzi per monitorare
e registrare le statistiche relative all'alimentazione. Alcuni SoC raccolgono
statistiche sull'utilizzo di energia per te o potresti ottenere la residenza dello stato di power-entity
tramite software. L'hardware per il monitoraggio dell'alimentazione è necessario solo
supportano getRailInfo()
, getEnergyData()
e
streamEnergyData()
.
Se implementi IPowerStats.hal
senza il monitoraggio dell'alimentazione
hardware, getRailInfo(), getEnergyData()
e
streamEnergyData()
restituisce NOT_SUPPORTED
. Analogamente,
getPowerEntityInfo(), getPowerEntityStateInfo()
e
getPowerEntityStateResidencyData()
potrebbe anche restituire
NOT_SUPPORTED
se non è destinata all'uso.
Esempi di dati restituiti dalle API di monitoraggio ferroviario includono:
- La barra di alimentazione del display ha consumato X μW.
- La barra di alimentazione del modem ha consumato Y μW.
Esempi di dati restituiti dalle API di stato di sospensione del sottosistema:
- Il modem è rimasto in stato di sospensione per X ms.
- Il SoC era in stato di compressione per Y ms.
- La GPU era in stato di sospensione per Z ms.
Utilizza un sottosistema di monitoraggio dell'alimentazione dell'hardware
Se il design del tuo dispositivo ha un sottosistema di monitoraggio dell'alimentazione hardware, implementa
IPowerStats.hal
creando un singolo nodo sysfs
da cui PowerStats.hal
può analizzare i dati oppure mediante un
raccolta di chiamate di sistema di tipo ioctl.
Devi implementare il driver del kernel in modo da impedire l'accumulo dell'overflow. L'algoritmo utilizzato dipende dal monitoraggio specifico dell'alimentazione dell'hardware progettazione del sottosistema, che deve fornire una tensione di bus sia istantanea che media e alle misurazioni correnti. Il driver del kernel deve acquisire questi dati in modo che non cancella gli accumulatori di energia e deve mantenere il dati sull'energia accumulata per ogni subrail dall'avvio, sotto forma di codice variabile che viene incrementata con la lettura dell'energia da ciascun accumulatore query.
Le statistiche relative a un determinato componente (o, facoltativamente, a più componenti) devono essere nel formato su un singolo nodo. Anche se non è un utilizzo convenzionale di sysfs (che normalmente limita ogni nodo a un singolo valore), garantisce che tutti i dati coerente.
Linee guida per la progettazione
- Mantieni bassa la latenza (1 msec, massimo) durante la lettura sysfs o effettuare chiamate di sistema.
- Assicurati che la funzionalità delle statistiche di supporto non aumenti in modo significativo consumo eccessivo di energia:
- Non aumentare i wakeup del punto di accesso (AP) e/o del sottosistema per il monitoraggio come il tempo trascorso in modalità sonno.
- Trasferisci le statistiche tra il processore delle app e il firmware in modo opportunistico con altro traffico, se possibile.
- Se necessario, il sottosistema può utilizzare le seguenti funzioni del driver:
- Memorizzazione nella cache interna dei dati per evitare latenza/risvegli a scapito di di dati inattivi.
- Esecuzione dell'estrapolazione quando il sottosistema è in sospensione, per fornire dati ore di sonno senza riattivare il sottosistema.
Scegli componenti, sottosistemi e statistiche
Quando scegli i componenti o i sottosistemi da cui raccogliere
IPowerStats.hal
di dati; seleziona qualsiasi cosa sul dispositivo che consumi
corrente significativa (5 mA o più) o che supporti
più modalità di consumo energetico, ad esempio:
- Singoli sottosistemi SoC.
- I sottosistemi parzialmente o completamente esterni al SoC, come il Wi-Fi, processore di immagini o il processore di sicurezza.
- Periferiche come LED e videocamere ad alta potenza.
- Domini di potenza che utilizzano modalità diverse (come il dominio di potenza per il SoC nel suo complesso).
Personalizzazione
Questa funzionalità facoltativa è suscettibile di personalizzazione. Progettare casi d'uso e personalizza il tuo utilizzo:
- Decidi quali binari misurare e con quale frequenza misurarli.
- Decidi quando leggere i dati e come interpretarli.
- Decidi quale azione intraprendere e quando, in base ai tuoi dati.
Convalida
I test VTS assicurano che i requisiti di Android siano soddisfatti. I commenti in
IPowerStats.hal
viene utilizzato per verificare che un dispositivo sia in
conformità.
Ad esempio, se chiami getRailInfo()
e non restituisce nulla,
il test VTS non riesce perché non hai ricevuto informazioni sul
rail o uno stato restituito pari a SUCCESS
. Analogamente, se hai ricevuto
informazioni ferroviarie, ma era accompagnato da un linea NON_SUPPORTED
o
risposta FILE_SYSTEM_ERROR
, anche questo è un errore. VTS
verifica se la specifica del produttore del dispositivo
è rispettata nel file HAL;
utilizzando i requisiti nei commenti IPower.hal e IPowerStats.hal. Un
Di seguito è riportato un esempio di commenti utilizzati nei test VTS:
/** * 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);