Misurare la potenza dei componenti

È possibile 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 il componente è spento. Misurare la corrente media istantanea assorbita dal dispositivo a una tensione nominale utilizzando un monitor di alimentazione esterno, come un alimentatore da banco o strumenti specializzati per il monitoraggio della batteria (come il software Monsoon Solution Inc. Power Monitor e Power Tool).

I produttori spesso forniscono informazioni sulla corrente consumata da un singolo componente. Utilizzare queste informazioni se rappresentano accuratamente la corrente assorbita dalla batteria del dispositivo nella pratica. Tuttavia, convalida i valori forniti dal produttore prima di utilizzarli nel profilo di potenza del tuo dispositivo.

Controllare il consumo energetico

Durante la misurazione, assicurati che il dispositivo non sia collegato a una fonte di carica 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 sulla batteria. Evita le connessioni USB On-The-Go (OTG), poiché il dispositivo OTG potrebbe assorbire corrente dal dispositivo sottoposto a test.

Escludendo il componente da misurare, il sistema dovrebbe funzionare a un livello costante di consumo energetico per evitare misurazioni imprecise causate da cambiamenti in altri componenti. Le attività del sistema che possono introdurre modifiche indesiderate alle misurazioni della potenza includono:

  • Attività di ricezione, trasmissione o scansione di reti cellulari, Wi-Fi e Bluetooth . Quando non si misura la potenza della radio cellulare, impostare il dispositivo in modalità aereo e abilitare Wi-Fi o Bluetooth come appropriato.
  • Accensione/spegnimento dello schermo . I colori visualizzati mentre lo schermo è acceso possono influire sul consumo energetico di alcune tecnologie dello schermo. Spegnere lo schermo quando si misurano valori per componenti non visualizzati sullo schermo.
  • Sospensione/ripresa del sistema . Uno stato di schermo spento può attivare una sospensione del sistema, ponendo parti del dispositivo in uno stato di basso consumo o spento. Ciò può influire sul consumo energetico del componente misurato e introdurre grandi variazioni nelle letture della potenza poiché il sistema riprende periodicamente a inviare allarmi, ecc. Per i dettagli, vedere Controllo della sospensione del sistema .
  • Le CPU cambiano velocità e entrano/escono dallo stato inattivo dello scheduler a basso consumo . Durante il normale funzionamento, il sistema apporta frequenti modifiche alla velocità della CPU, al numero di core CPU online e ad altri stati fondamentali del sistema come la velocità del bus di memoria e le tensioni dei binari di alimentazione associati a CPU e memoria. Durante i test, queste regolazioni influiscono sulle misurazioni della potenza:
    • Le operazioni di ridimensionamento della velocità della CPU possono ridurre la quantità di ridimensionamento del clock e della tensione dei bus di memoria e di altri componenti principali del sistema.
    • L'attività di pianificazione può influire sulla percentuale di tempo che le CPU trascorrono in stati di inattività a basso consumo. Per informazioni dettagliate su come evitare che queste modifiche si verifichino durante il test, vedere Controllo della velocità della CPU .

Ad esempio, Joe Droid vuole calcolare il valore screen.on per un dispositivo. Abilita la modalità aereo sul dispositivo, esegue il dispositivo con uno stato corrente stabile, mantiene costante la velocità della CPU e utilizza un wakelock parziale per impedire la sospensione del sistema. Joe quindi spegne lo schermo del dispositivo ed effettua una misurazione (200 mA). Successivamente, Joe accende lo schermo del dispositivo alla luminosità minima ed 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 (come la radio cellulare o il Wi-Fi), misurare la corrente media nel tempo utilizzando uno strumento di monitoraggio della potenza.

Quando si utilizza una fonte di alimentazione esterna al posto della batteria del dispositivo, il sistema potrebbe riscontrare problemi a causa di un termistore della batteria non collegato o di pin dell'indicatore di livello carburante integrati (ad esempio, una lettura non valida della temperatura della batteria o della capacità residua della batteria potrebbe arrestare il kernel o il sistema Android) . Le batterie contraffatte possono fornire segnali sul termistore o sui pin dell'indicatore del carburante che imitano le letture della temperatura e dello stato di carica di un sistema normale e possono anche fornire cavi convenienti per il collegamento ad alimentatori esterni. In alternativa, è possibile modificare il sistema per 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 si desidera che interferisca con altre misurazioni e come misurare l'assorbimento di potenza dello stato di sospensione del sistema quando si desidera misurarlo.

Prevenire la sospensione del sistema

La sospensione del sistema può introdurre variazioni indesiderate nelle misurazioni della potenza e posizionare i componenti del sistema in stati di basso consumo inappropriati per misurare l'utilizzo della potenza attiva. Per evitare che il sistema venga sospeso mentre lo schermo è spento, utilizzare un wakelock parziale temporaneo. Utilizzando un cavo USB, collega il dispositivo a un host di sviluppo, quindi esegui il seguente comando:

adb shell "echo temporary > /sys/power/wake_lock"

Durante la wake_lock , lo stato di schermo spento non attiva la sospensione del sistema. (Ricordarsi di scollegare il cavo USB dal dispositivo prima di misurare il consumo energetico.)

Per rimuovere il wakelock:

adb shell "echo temporary > /sys/power/wake_unlock"

Sospensione del sistema di misura

Per misurare l'assorbimento di potenza durante lo stato di sospensione del sistema, misurare il valore di cpu.idle nel profilo energetico. Prima di misurare:

  • Rimuovere i wakelock esistenti (come descritto sopra).
  • Posizionare il dispositivo in modalità aereo per evitare attività simultanee da parte della radio cellulare, che potrebbe essere eseguita su un processore separato dalle parti SoC controllate dalla sospensione del sistema.
  • Assicurarsi che il sistema sia in stato di sospensione:
    • Confermando le letture attuali si stabilizzano su un valore stabile. Le letture dovrebbero rientrare nell'intervallo previsto per il consumo energetico dello stato di sospensione del SoC più il consumo energetico dei componenti del sistema che rimangono alimentati (come USB PHY).
    • Controllo dell'output della console di sistema.
    • Osservazione di indicazioni esterne sullo stato del sistema (come un LED che si spegne quando non è in sospensione).

Controlla la velocità della CPU

Le CPU attive possono essere portate online o messe offline, le loro velocità di clock e le tensioni associate vengono modificate (possibilmente influenzando anche la velocità del bus di memoria e altri stati di alimentazione del core del sistema) e possono entrare in stati di inattività a consumo inferiore mentre si trovano nel ciclo di inattività del kernel. Quando si misurano diversi stati di alimentazione della CPU per il profilo di alimentazione, evitare la varianza dell'assorbimento di potenza quando si misurano altri parametri. Il profilo di potenza presuppone che tutte le CPU abbiano le stesse velocità disponibili e caratteristiche di potenza.

Quando si misura la potenza della CPU o si mantiene costante la potenza della CPU per effettuare altre misurazioni, mantenere costante il numero di CPU portate online (ad esempio avere una CPU online e il resto offline/hotplugged). Mantenere tutte le CPU tranne una in modalità di pianificazione inattiva può produrre risultati accettabili. L'arresto del framework Android con adb shell stop può ridurre l'attività di pianificazione del sistema.

È necessario specificare le velocità della CPU disponibili per il dispositivo nella voce del profilo di potenza cpu.speeds . Per ottenere 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 di potenza corrispondenti nel valore cpu.active .

Per le piattaforme in cui il numero di core portati online influisce in modo significativo sul consumo energetico, potrebbe essere necessario modificare il driver o il governatore cpufreq per la piattaforma. La maggior parte delle piattaforme supporta il controllo della velocità della CPU utilizzando il governatore cpufreq dello spazio utente e utilizzando le interfacce sysfs per impostare la velocità. Ad esempio, per impostare la velocità su 200 MHz su un sistema con solo 1 CPU o tutte le CPU che condividono una policy 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 differiscono a seconda dell'implementazione cpufreq della piattaforma.

Questi comandi garantiscono che la nuova velocità non sia esterna ai limiti consentiti, impostano la nuova velocità, quindi stampano la velocità alla quale la CPU sta effettivamente funzionando (per verifica). Se la velocità minima corrente prima dell'esecuzione è superiore a 200000, potrebbe essere necessario invertire l'ordine delle prime due righe o eseguire nuovamente la prima riga per ridurre la velocità minima prima di impostare la velocità massima.

Per misurare la corrente consumata da una CPU in esecuzione a varie velocità, utilizzare la console di sistema per posizionare la CPU in un ciclo legato alla CPU utilizzando il comando:

# while true; do true; done

Effettuare la misurazione durante l'esecuzione del ciclo.

Alcuni dispositivi possono limitare la velocità massima della CPU durante l'esecuzione della limitazione termica a causa della misurazione di temperature elevate (ovvero, dopo aver utilizzato le CPU a velocità elevate per periodi prolungati). Fare attenzione a tali limitazioni, utilizzando l'output della console di sistema durante le misurazioni o controllando il registro del kernel dopo la misurazione.

Per il valore cpu.awake , misurare la potenza consumata quando il sistema non è in sospensione e non esegue attività. La CPU dovrebbe trovarsi in un loop di inattività dello scheduler a basso consumo, possibilmente eseguendo un'istruzione ARM Wait For Event o in uno stato di basso consumo specifico del SoC con una latenza di uscita rapida adatta all'uso inattivo.

Per il valore cpu.active , misurare la potenza quando il sistema non è in modalità di sospensione e non sta eseguendo attività. Una CPU (solitamente la CPU primaria) dovrebbe eseguire l'attività mentre tutte le altre CPU dovrebbero essere in uno stato inattivo.

Misura la potenza dello schermo

Quando si misura lo schermo acceso, assicurarsi che siano accesi anche gli altri dispositivi normalmente accesi quando lo schermo è abilitato. Ad esempio, se il touchscreen e la retroilluminazione del display sarebbero normalmente attivi quando lo schermo è acceso, assicurati che questi dispositivi siano accesi quando esegui la misurazione per ottenere un esempio realistico del consumo energetico dello schermo.

Alcune tecnologie di visualizzazione variano nel consumo energetico in base ai colori visualizzati, facendo sì che le misurazioni della potenza varino considerevolmente a seconda di ciò che viene visualizzato sullo schermo al momento della misurazione. Durante la misurazione, assicurarsi che lo schermo visualizzi qualcosa che abbia le caratteristiche di potenza di uno schermo realistico. Mira tra gli estremi di uno schermo completamente nero (che consuma meno energia per alcune tecnologie) e uno schermo completamente bianco. Una scelta comune è la visualizzazione di un programma nell'app calendario, che presenta un mix di sfondo bianco ed elementi non bianchi.

Misurare lo schermo acceso alla luminosità minima e massima del display/retroilluminazione. Per impostare la luminosità minima:

  • Utilizza l'interfaccia utente Android (non consigliato). Imposta il dispositivo di scorrimento Impostazioni > Luminosità schermo sulla luminosità minima dello schermo. Tuttavia, l'interfaccia utente di Android consente di impostare la luminosità solo su un minimo del 10-20% della possibile luminosità del pannello o della retroilluminazione e non consente di impostare una luminosità così bassa che lo schermo potrebbe non essere visibile senza grande sforzo.
  • Utilizzare un file sysfs (consigliato). Se disponibile, utilizzare 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, utilizzare il file per effettuare misurazioni con lo schermo acceso e spento. Altrimenti imposta un wakelock parziale in modo che il sistema non si sospenda, quindi accendi e spegni lo schermo con il pulsante di accensione.

Misura la potenza del Wi-Fi

Esegui misurazioni Wi-Fi su una rete relativamente silenziosa. Evitare di introdurre lavoro aggiuntivo nell'elaborazione di volumi elevati di traffico broadcast non correlato all'attività da misurare.

Il valore wifi.on misura la potenza consumata quando il Wi-Fi è abilitato ma non trasmette o riceve attivamente. Questo viene spesso misurato come il delta tra l'assorbimento di corrente nello stato di sospensione (sonno) del sistema con Wi-Fi abilitato e disabilitato.

Il valore wifi.scan misura la potenza consumata durante una scansione Wi-Fi per i punti di accesso. Le applicazioni possono attivare scansioni Wi-Fi utilizzando l' API startScan() della classe WifiManager. Puoi anche aprire Impostazioni > Wi-Fi, che esegue scansioni del punto di accesso ogni pochi secondi con un apparente aumento del consumo energetico, ma devi sottrarre la potenza dello schermo da queste misurazioni.

Nota : utilizzare una configurazione controllata (come iperf ) per generare traffico di rete in ricezione e trasmissione.