Statistiche sulla potenza (HAL)

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 ogni PowerEntity 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 tra 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 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);