HAL Power Stats

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. Un PowerEntity è 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 ogni PowerEntity 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 in power_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);