Puoi determinare il consumo energetico dei singoli componenti confrontando la corrente assorbita dal dispositivo quando il componente è nello stato desiderato (ad esempio acceso, attivo, in scansione) e quando è spento. Misura la corrente istantanea media assorbita dal dispositivo a una tensione nominale utilizzando un monitor della potenza esterno, ad esempio un alimentatore da banco o strumenti specializzati per il monitoraggio della batteria (ad esempio il software Power Monitor e Power Tool di Monsoon Solution Inc.).
I produttori forniscono spesso informazioni sull'intensità di corrente consumata da un singolo componente. Utilizza queste informazioni se rappresentano con precisione la corrente aspirata dalla batteria del dispositivo in pratica. Tuttavia, convalida i valori forniti dal produttore prima di utilizzarli nel profilo di consumo del dispositivo.
Controllare il consumo energetico
Durante la misurazione, assicurati che il dispositivo non sia collegato a una fonte di ricarica esterna, ad esempio una connessione USB a un host di sviluppo utilizzato durante l'esecuzione di Android Debug Bridge (adb). Il dispositivo sottoposto a test potrebbe assorbire corrente dall'host, riducendo così le misurazioni alla batteria. Evita le connessioni USB On-The-Go (OTG), in quanto il dispositivo OTG potrebbe assorbire corrente dal dispositivo in test.
Escludendo il componente misurato, il sistema deve funzionare a un livello costante di consumo di energia per evitare misurazioni imprecise causate da variazioni in altri componenti. Le attività del sistema che possono introdurre modifiche indesiderate alle misurazioni della potenza includono:
- Attività di ricezione, trasmissione o scansione di rete mobile, Wi-Fi e Bluetooth. Quando non misuri l'intensità del segnale radio cellulare, imposta il dispositivo in modalità aereo e attiva il Wi-Fi o il Bluetooth in base alle necessità.
- Schermo acceso/spento. I colori visualizzati quando lo schermo è acceso possono influire sul consumo di energia su alcune tecnologie dello schermo. Spegni lo schermo quando misuri i valori per i componenti non dello schermo.
- Sospensione/ripristino del sistema. Uno stato di spegnimento dello schermo può attivare la sospensione del sistema, ponendo parti del dispositivo in uno stato di basso consumo o di spegnimento. Ciò può influire sul consumo di energia del componente misurato e introdurre grandi variazioni nelle letture di potenza quando il sistema riprende periodicamente a inviare allarmi e così via. Per maggiori dettagli, consulta Controllare la sospensione del sistema.
- CPU che cambiano velocità e entrano/escono dallo stato inattivo del programmatore a basso consumo.
Durante il normale funzionamento, il sistema apporta frequenti aggiustamenti alle velocità della CPU, al numero di core della CPU online e ad altri stati di core di sistema, come la velocità del bus di memoria e le tensioni delle linee di alimentazione associate a CPU e memoria. Durante il test, questi aggiustamenti influiscono sulle misurazioni dell'efficacia:
- Le operazioni di scalabilità della velocità della CPU possono ridurre la quantità di scalabilità della frequenza e della tensione dei bus di memoria e di altri componenti di base del sistema.
- L'attività di pianificazione può influire sulla percentuale di tempo che le CPU trascorrono in stati inattivi a basso consumo. Per informazioni dettagliate su come impedire che questi aggiustamenti si verifichino durante il test, consulta Controllare le velocità della CPU.
Ad esempio, Joe Droid vuole calcolare il valore screen.on
per un dispositivo. Attiva la modalità aereo sul dispositivo, lo fa funzionare a uno stato corrente stabile, mantiene costante la frequenza della CPU e utilizza un blocco parziale per impedire la sospensione del sistema. Joe spegne quindi lo schermo del dispositivo e effettua una misurazione (200 mA). A questo punto, accende lo schermo del dispositivo con luminosità minima e effettua un'altra misurazione (300 mA). Il valore screen.on
è
100 mA (300 - 200).
Nota: per i componenti che non hanno una forma d'onda piatta del consumo di corrente quando sono attivi (ad esempio la radio cellulare o il Wi-Fi), misura la corrente media nel tempo utilizzando uno strumento di monitoraggio dell'alimentazione.
Quando si utilizza un'alimentazione esterna al posto della batteria del dispositivo, il sistema potrebbe riscontrare problemi a causa di un termistore della batteria scollegato o di pin del misuratore del carburante integrati (ad es. una lettura non valida della temperatura della batteria o della capacità rimanente della batteria potrebbe causare lo spegnimento del kernel o del sistema Android). Le batterie false possono fornire segnali sui pin della termoresistenza o dell'indicatore del livello del carburante che simulano le letture della temperatura e dello stato di carica di un sistema normale e possono anche fornire cavi pratici per il collegamento a alimentatori esterni. In alternativa, puoi modificare il sistema in modo da ignorare i dati non validi della batteria mancante.
Sospensione del sistema di controllo
Questa sezione descrive come evitare lo stato di sospensione del sistema quando non vuoi che interferisca con altre misurazioni e come misurare l'assorbimento di corrente dello stato di sospensione del sistema quando vuoi misurarlo.
Impedire la sospensione del sistema
La sospensione del sistema può introdurre una varianza indesiderata nelle misurazioni della potenza e mettere i componenti del sistema in stati a basso consumo inappropriati per la misurazione dell'utilizzo della potenza attiva. Per impedire al sistema di entrare in sospensione quando lo schermo è spento, utilizza un blocco parziale temporaneo. Con un cavo USB, collega il dispositivo a un host di sviluppo, quindi esegui il seguente comando:
adb shell "echo temporary > /sys/power/wake_lock"
In wake_lock
, lo stato di spegnimento dello schermo non attiva la sospensione del sistema.
Ricorda di scollegare il cavo USB dal dispositivo prima di misurare il consumo di energia.
Per rimuovere il wakelock:
adb shell "echo temporary > /sys/power/wake_unlock"
Sospensione del sistema di misurazione
Per misurare l'assorbimento di corrente durante lo stato di sospensione del sistema, misura il valore di
cpu.idle
nel profilo di alimentazione. Prima della misurazione:
- Rimuovi i wakelock esistenti (come descritto sopra).
- Metti il dispositivo in modalità aereo per evitare attività concorrenti della radio cellulare, che potrebbe essere in esecuzione su un processore separato dalle parti del SoC controllate dalla sospensione del sistema.
- Assicurati che il sistema sia in stato di sospensione:
- Verifica che le letture attuali si assestino su un valore costante. Le letture devono rientrare nell'intervallo previsto per il consumo energetico dello stato di sospensione del SoC più il consumo energetico dei componenti di sistema che rimangono alimentati (ad esempio il PHY USB).
- Controlla l'output della console di sistema.
- Ricerca di indicazioni esterne dello stato del sistema (ad esempio un LED che si spegne quando non è in modalità di sospensione).
Controllare le velocità della CPU
Le CPU attive possono essere messe online o offline, le loro velocità di clock e le tensioni associate possono essere modificate (eventualmente anche le velocità del bus di memoria e altri stati di alimentazione del core di sistema) e possono entrare in stati inattivi a basso consumo durante il loop di inattività del kernel. Quando misuri diversi stati di alimentazione della CPU per il profilo di alimentazione, evita la varianza dell'assorbimento di corrente quando misuri altri parametri. Il profilo di potenza presuppone che tutte le CPU abbiano le stesse velocità e caratteristiche di potenza disponibili.
Durante la misurazione della potenza della CPU o mantenendo costante la potenza della CPU per effettuare altre misurazioni, mantieni costante il numero di CPU messe online (ad esempio una CPU online e le altre offline/rimuovere il cavo di alimentazione). Mantenere tutte le CPU inutilizzate tranne una nella pianificazione può produrre risultati accettabili. L'interruzione del framework Android con adb shell stop
può ridurre l'attività di pianificazione del sistema.
Devi specificare le velocità della CPU disponibili per il tuo dispositivo nella voce del profilo di alimentazionecpu.speeds
. Per visualizzare un elenco delle velocità della CPU disponibili, esegui:
adb shell cat /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state
Queste velocità corrispondono alle misurazioni della potenza corrispondenti nel valore cpu.active
.
Per le piattaforme in cui il numero di core attivati influisce notevolmente sul consumo energetico, potresti dover modificare il driver o il governor cpufreq per la piattaforma. La maggior parte delle piattaforme supporta il controllo della velocità della CPU utilizzando il governatore cpufreq nello spazio utente e le interfacce sysfs per impostare la velocità. Ad esempio, per impostare la velocità su 200 MHz su un sistema con una sola CPU o su tutte le CPU che condividono un criterio cpufreq comune, utilizza la console di sistema o la shell adb per eseguire i seguenti comandi:
echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo 200000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo 200000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
echo 200000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
Nota: i comandi esatti variano a seconda dell'implementazione di cpufreq della piattaforma.
Questi comandi assicurano che la nuova velocità non superi i limiti consentiti, impostano la nuova velocità e poi stampano la velocità a cui la CPU è effettivamente in esecuzione (per la verifica). Se la velocità minima corrente prima dell'esecuzione è superiore a 200000, potrebbe essere necessario invertire l'ordine delle prime due righe o eseguire di nuovo la prima riga per ridurre la velocità minima prima di impostare la velocità massima.
Per misurare l'intensità di corrente consumata da una CPU che funziona a varie velocità, utilizza la console di sistema per inserire la CPU in un loop vincolato alla CPU utilizzando il comando:
# while true; do true; done
Effettua la misurazione durante l'esecuzione del loop.
Alcuni dispositivi possono limitare la velocità massima della CPU durante l'applicazione della limitazione termica a causa di una misurazione della temperatura elevata (ovvero dopo aver eseguito le CPU ad alte velocità per periodi prolungati). Fai attenzione a questo tipo di limitazione utilizzando l'output della console di sistema durante le misurazioni o controllando il log del kernel dopo la misurazione.
Per il valore cpu.awake
, misura la potenza consumata quando il sistema non è in sospensione e non esegue attività. La CPU deve trovarsi in un loop di inattività
dello scheduler a basso consumo, eventualmente in esecuzione di un'istruzione ARM Wait For Event o in uno stato a basso consumo specifico per l'SoC con una latenza di uscita rapida adatta per l'utilizzo inattivo.
Per il valore cpu.active
, misura la potenza quando il sistema non è in modalità sospensione e non esegue attività. Una CPU (di solito quella principale) deve eseguire l'attività, mentre tutte le altre devono essere in stato inattivo.
Misurare la potenza dello schermo
Quando misuri lo schermo acceso, assicurati che siano accesi anche gli altri dispositivi normalmente accesi quando lo schermo è attivo. Ad esempio, se normalmente il touchscreen e la retroilluminazione del display sono attivi quando lo schermo è acceso, assicurati che questi dispositivi siano attivi durante la misurazione per ottenere un esempio realistico del consumo di energia con lo schermo attivo.
Il consumo energetico di alcune tecnologie di visualizzazione varia in base ai colori visualizzati, causando una variazione considerevole delle misurazioni del consumo energetico a seconda di ciò che viene visualizzato sullo schermo al momento della misurazione. Durante la misurazione, assicurati che sullo schermo sia visualizzato qualcosa che abbia le caratteristiche di uno schermo realistico. Scegli una via di mezzo tra uno schermo completamente nero (che consuma la potenza più bassa per alcune tecnologie) e uno schermo completamente bianco. Una scelta comune è una visualizzazione di un programma nell'app Calendar, che ha un mix di sfondo bianco ed elementi non bianchi.
Misurare lo schermo con l'alimentazione attiva alla luminosità minima e massima del display/della retroilluminazione. Per impostare la luminosità minima:
- Utilizza l'interfaccia utente Android (opzione non consigliata). Imposta il cursore Impostazioni > Luminosità del display sulla luminosità minima del display. Tuttavia, l'interfaccia utente di Android consente di impostare la luminosità solo su un minimo del 10-20% della luminosità possibile del pannello o della retroilluminazione e non consente di impostare una luminosità così bassa da rendere lo schermo non visibile senza grande sforzo.
- Utilizza un file sysfs (opzione consigliata). Se disponibile, utilizza un file sysfs per controllare la luminosità del pannello fino alla luminosità minima supportata dall'hardware.
Inoltre, se il file sysfs della piattaforma consente di accendere e spegnere il pannello LCD, la retroilluminazione e il touchscreen, utilizzalo per effettuare misurazioni con lo schermo acceso e spento. In caso contrario, imposta un blocco parziale in modo che il sistema non venga sospeso, quindi accendi e spegni lo schermo con il tasto di accensione.
Misurare l'intensità del segnale Wi-Fi
Esegui le misurazioni del Wi-Fi su una rete relativamente silenziosa. Evita di introdurre un lavoro aggiuntivo per elaborare elevati volumi di traffico di trasmissione non correlati all'attività misurata.
Il valore wifi.on
misura la potenza consumata quando il Wi-Fi è attivo, ma non è in trasmissione o ricezione attiva. Questo viene spesso misurato come il delta tra l'assorbimento di corrente in stato di sospensione (sospensione) del sistema con il Wi-Fi attivo e disattivato.
Il valore wifi.scan
misura la potenza consumata durante una scansione Wi-Fi per i punti di accesso. Le applicazioni possono attivare le ricerche Wi-Fi utilizzando la classe WifiManager
startScan()
. Puoi anche aprire Impostazioni > Wi-Fi, che esegue ricerche di punti di accesso ogni pochi secondi con un apparente aumento del consumo energetico, ma devi sottrarre il consumo dello schermo da queste misurazioni.
Nota: utilizza una configurazione controllata (ad esempio iperf) per generare traffico di trasmissione e ricezione della rete.