L'alimentazione del sottosistema del dispositivo viene spesso misurata e registrata in un ambiente di laboratorio per varie condizioni di stato stazionario, ad esempio quando lo schermo è acceso o il dispositivo è in uno stato di alimentazione inattivo. Questo metodo funziona per i sottosistemi con un assorbimento di corrente costante o in condizioni facilmente misurabili in ambienti di laboratorio, ma non per determinati casi d'uso, ad esempio quando uno schermo mostra un video.
IPower.hal 1.0
fornisce un'interfaccia per trasmettere
suggerimenti per il risparmio energetico e generare report sui dati cumulativi delle metriche relative allo stato di sospensione del sottosistema.
In Android 10 e versioni successive, la funzione di generazione di report sulle statistiche cumulative si trova nelle API di raccolta delle statistiche relative all'alimentazione IPowerStats.hal
e fornisce un modo per recuperare i dati sull'utilizzo di energia sul dispositivo. Questa opzione sostituisce la parte di raccolta delle statistiche cumulative dell'interfaccia IPower.hal
per una separazione più chiara delle funzionalità.
Le letture del servizio IPowerStats
non sono periodiche. Si verificano in momenti chiave, ad esempio quando la batteria si scarica dell'1%. Le letture sono meno frequenti quando il consumo della batteria è basso e più frequenti quando è alto. I dati possono essere nuovamente inviati ai server e utilizzati nei report di bug per analisi e triage.
Ciò supporta gli sforzi continui per ridurre il consumo energetico e aumentare la durata 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 IPower.hal
è disponibile solo dall'interfaccia IPowerStats.hal
. La funzionalità IPowerStats.hal
include API per acquisire e utilizzare i dati raccolti dalle misurazioni della potenza sul dispositivo per i dispositivi supportati:
- Esegue misurazioni dell'energia a livello di rail sia per i client a bassa frequenza (
getRailInfo
) sia per quelli ad alta frequenza (streamEnergyData
) e registra l'energia accumulata dall'avvio. - Segnala informazioni relative a ogni
PowerEntity
supportato per cui sono disponibili dati. UnPowerEntity
è un sottosistema della piattaforma, una periferica o un dominio di alimentazione che influisce sul consumo di energia totale del dispositivo. - Segnala l'insieme degli stati delle persone giuridiche di potere (
getPowerEntityStateInfo
) per i quali le persone giuridiche specificate forniscono dati sulla residenza, quindi registra i dati accumulati per ogniPowerEntity
specificato.
Le API IPowerStats.hal
vengono utilizzate dai seguenti client:
Statsd
per raccogliere le metriche relative al consumo di energia per rotaia.Perfetto
, per correlare il consumo di energia all'attività della CPU.Batterystats
, per migliorare l'attribuzione della batteria utilizzando i dati misurati anziché stimare il consumo della batteria dalle costanti predefinite inpower_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 client devono eseguire il fallback su IPower.hal
se IPowerStats.hal
non è implementato .
Opzioni di implementazione di IPowerStats.hal
Solo le funzioni IPower.hal
sono disponibili su Android 7
e versioni successive. I dispositivi di cui è stato eseguito l'upgrade ad Android 10 devono avere un sottosistema di monitoraggio dell'alimentazione hardware o altri mezzi disponibili per monitorare e registrare le statistiche sull'alimentazione. Alcuni SoC raccolgono
statistiche sull'utilizzo dell'alimentazione per te oppure puoi ottenere informazioni sulla residenza
dell'entità di alimentazione tramite software. L'hardware di monitoraggio dell'alimentazione è necessario solo per supportare getRailInfo()
, getEnergyData()
e streamEnergyData()
.
Se implementi IPowerStats.hal
senza hardware di monitoraggio dell'alimentazione, getRailInfo(), getEnergyData()
e
streamEnergyData()
restituisci NOT_SUPPORTED
. Analogamente,
getPowerEntityInfo(), getPowerEntityStateInfo()
e
getPowerEntityStateResidencyData()
possono anche restituire
NOT_SUPPORTED
se non è previsto l'utilizzo.
Ecco alcuni esempi di dati restituiti dalle API di monitoraggio ferroviario:
- La linea di alimentazione del display ha consumato X µW.
- La linea di alimentazione del modem ha consumato Y µW.
Ecco alcuni esempi di dati restituiti dalle API relative allo stato di sospensione del sottosistema:
- Il modem è stato in modalità di sospensione per X ms.
- Il SoC era in stato di collasso dell'alimentazione per Y ms.
- La GPU era in stato di sospensione per Z ms.
Utilizzare un sottosistema di monitoraggio dell'alimentazione hardware
Se il design del 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 o creando una
collezione di chiamate di sistema di tipo ioctl.
Devi implementare il driver del kernel in modo da impedire il superamento del valore massimo dell'accumulatore. L'algoritmo utilizzato dipende dal design del sottosistema di monitoraggio dell'alimentazione hardware, che deve fornire misurazioni sia della tensione che della corrente istantanee e medie del bus. Il driver del kernel deve acquisire questi dati in modo da non cancellare gli accumulatori di energia e deve mantenere i dati sull'energia accumulata per ogni sottolinea dall'avvio, sotto forma di una variabile a 64 bit che viene incrementata con la lettura dell'energia da ogni query dell'accumulatore.
Le statistiche per un determinato componente (o facoltativamente per più componenti) devono trovarsi in un singolo nodo. Sebbene non si tratti di un utilizzo convenzionale di sysfs (che in genere limita ogni nodo a un singolo valore), garantisce la coerenza di tutti i dati.
Indicazioni sul design
- Mantieni bassa la latenza (massimo 1 ms) durante la lettura dal nodo sysfs o l'esecuzione di chiamate di sistema.
- Assicurati che la funzionalità di supporto delle statistiche non aumenti in modo misurabile il consumo di energia:
- Non aumentare gli attivamenti del punto di accesso (AP) e/o del sottosistema per monitorare parametri come il tempo trascorso in modalità di sospensione.
- Trasferisci le statistiche tra il processore delle app e il firmware opportunisticamente 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 spese di dati leggermente obsoleti.
- Eseguire l'estrapolazione quando il sottosistema è inattivo per fornire un tempo di sospensione aggiornato senza riattivare il sottosistema.
Scegliere componenti, sottosistemi e statistiche
Quando scegli i componenti o i sottosistemi da cui raccogliere i datiIPowerStats.hal
, seleziona qualsiasi elemento sul dispositivo che consumi corrente significativa (5 mA o più) o che supporti più modalità di consumo energetico, ad esempio:
- Singoli sottosistemi SoC.
- Sottosistemi parzialmente o completamente esterni al SoC, come il WiFi, l'elaboratore di immagini o l'elaboratore di sicurezza.
- Periferiche come LED ad alta potenza e videocamere.
- Domini di alimentazione che utilizzano modalità diverse (ad esempio il dominio di alimentazione per l'intero SoC).
Personalizzazione
Questa funzionalità facoltativa è adatta alla personalizzazione. Progetta casi d'uso e personalizza il tuo utilizzo:
- Decidi quali binari misurare e con quale frequenza.
- 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
vengono utilizzati per verificare la conformità di un dispositivo.
Ad esempio, se chiami getRailInfo()
e non viene restituito nulla,
il test VTS non va a buon fine perché non hai ricevuto informazioni sulle guide monitorate o un stato restituito di SUCCESS
. Allo stesso modo, se hai ricevuto informazioni sulla rete ferroviaria, ma erano accompagnate da una risposta NON_SUPPORTED
o
FILE_SYSTEM_ERROR
, si tratta anche di un errore. Il VTS verifica la conformità della specifica del produttore del dispositivo nel file HAL, utilizzando i requisiti nei commenti IPower.hal e IPowerStats.hal. 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);