Questa pagina fornisce istruzioni dettagliate per la raccolta delle tracce Perfetto da utilizzare con Wattson e per l'analisi dei dati di consumo risultanti nell'interfaccia utente di Perfetto.
Esistono molti modi per raccogliere una traccia Perfetto, ma i metodi descritti in questa pagina includono i requisiti e i flussi di lavoro specifici per generare una traccia compatibile con Wattson.
.Requisiti minimi per la build
Per verificare che Wattson disponga dei metadati necessari per funzionare correttamente, devi raccogliere tracce da un dispositivo che esegue una build recente. Le versioni minime della build per la stima del consumo di CPU e GPU variano in base al dispositivo.
Dispositivo | Requisito minimo di build: stima della CPU | Requisito minimo di build: stima della GPU |
---|---|---|
Pixel Watch 2 | Nessun requisito minimo di build | Non supportata |
Pixel Watch 3 | 25Q2 | Non supportata |
Pixel 6 | Nessun requisito minimo di build | 25Q2 |
Pixel 9 | 25Q2 | Non supportata |
Raccogliere la traccia Perfetto dalla riga di comando
Questa sezione presenta un flusso di lavoro di esempio per la raccolta delle tracce Perfetto da utilizzare con Wattson. Tutti i comandi elencati nei passaggi seguenti devono essere emessi dall'host Android Debug Bridge (adb).
Configura e avvia la traccia creando un file di configurazione Perfetto sul dispositivo. Un esempio di configurazione è disponibile all'indirizzo
wattson.cfg
nell'albero delle origini.La configurazione deve includere i seguenti eventi di traccia:
# Polls CPU freq/idle state at the start of trace data_sources: { config { name: "linux.sys_stats" sys_stats_config { # Large period so polling doesn't happen continuously # Intent is just to poll once upfront cpufreq_period_ms: 100000000 cpuidle_period_ms: 100000000 } } } data_sources: { config { name: "linux.ftrace" ftrace_config { ftrace_events: "devfreq/devfreq_frequency" ftrace_events: "cpuhp/cpuhp_enter" ftrace_events: "cpuhp/cpuhp_exit" ftrace_events: "cpuhp/cpuhp_multi_enter" ftrace_events: "power/cpu_frequency" ftrace_events: "power/cpu_idle" ftrace_events: "power/suspend_resume" } } }
Per attivare le stime del consumo energetico della cache L3, attiva l'evento
fttrace/print
:adb shell perfetto --txt -c /data/misc/perfetto-configs/wattson.cfg --background-wait -o /data/misc/perfetto-traces/trace # Optional adb shell simpleperf stat -a -e arm_dsu_0/l3d_cache/,arm_dsu_0/bus_access/ --interval 10
(Facoltativo) Imposta l'inizio della finestra Wattson, un marcatore incorporato nella traccia Perfetto che indica l'inizio della registrazione. Questo marcatore aggiunge ulteriore precisione alla misurazione di Wattson.
# Optional adb shell "echo 'I|0|wattson_start' >/sys/kernel/tracing/trace_marker"
Esegui il workload che ti interessa.
(Facoltativo) Attiva l'evento di traccia
ftrace/print
per impostare la fine della finestra di Wattson:# Optional adb shell "echo 'I|0|wattson_stop' >/sys/kernel/tracing/trace_marker"
Svuota i buffer di traccia ed estrai il file di traccia Perfetto:
adb shell killall -w perfetto adb pull /data/misc/perfetto-traces/trace my_perfetto_trace.pb
Raccogliere la traccia Perfetto utilizzando l'interfaccia utente di Perfetto
Per raccogliere le tracce utilizzando l'interfaccia utente di Perfetto, devi attivare impostazioni specifiche per Wattson. Quando registri una nuova traccia nell'interfaccia utente di Perfetto, attiva i pulsanti di attivazione/disattivazione Dettagli di pianificazione e Frequenza CPU e stati di inattività:
Figura 1. Dettagli della pianificazione e pulsanti di attivazione/disattivazione della frequenza della CPU e degli stati di inattività.
Per i Pixel 9, nelle impostazioni Ftrace, seleziona la casella di controllo devfreq per attivare la raccolta della frequenza del dispositivo:
Figura 2. Attiva la frequenza per dispositivo.
Utilizzare l'interfaccia utente di Wattson
Con Perfetto, analizza le stime di consumo energetico di Wattson selezionando un intervallo di tempo per visualizzare le statistiche per binario o attiva configurazioni di traccia specifiche per attribuire il consumo energetico a livello di thread, processo o pacchetto.
Visualizza la suddivisione per binario
Per interagire con Wattson in Perfetto:
Apri una traccia in Perfetto.
Se il tuo dispositivo è supportato da Wattson, le tracce di Wattson vengono elencate automaticamente:
Figura 3. Visualizza le tracce di Wattson in Perfetto.
Fai clic su Wattson per espandere e visualizzare la suddivisione per binario virtuale:
Tutti i grafici a binario vengono scalati automaticamente allo stesso valore per mostrare la proporzione tra i binari.
Le statistiche vengono generate per qualsiasi regione selezionata (o contrassegnata) dall'utente.
La tabella delle statistiche può essere ordinata facendo clic sul nome di una colonna.
I totali stimati vengono visualizzati direttamente sotto i titoli delle colonne.
Figura 4. Stime ferroviarie.
Visualizza la traccia per thread, processo o attribuzioni di pacchetti
Se hai abilitato le tracce dello scheduler e puoi visualizzare le sezioni dei thread in Perfetto, puoi anche ottenere l'attribuzione di potenza o energia a livello di thread o processo:
- In Perfetto, seleziona una regione di sezioni di thread.
- Visualizza la suddivisione per il thread, il processo o il pacchetto.
Come per le statistiche delle tracce per binario, puoi fare clic su uno qualsiasi dei nomi delle colonne per ordinare i dati in base a quella colonna.
Analizzare la suddivisione a livello di thread
Oltre ai requisiti minimi
per la stima di base del consumo energetico, devi aggiungere la seguente configurazione
alla sezione linux.ftrace
del file wattson.cfg
per l'attribuzione del consumo energetico a livello di thread:
data_sources: {
config {
name: "linux.ftrace"
ftrace_config {
ftrace_events: "sched/sched_switch"
}
}
}
Figura 5. Suddivisioni a livello di thread.
Suddivisione a livello di processo
L'attribuzione a livello di processo richiede l'attivazione di process_states
sui dati raccolti nella traccia Perfetto. Attiva la seguente origine dati
nel file di configurazione
wattson.cfg
:
data_sources: {
config {
name: "linux.process_stats"
target_buffer: 1
process_stats_config {
scan_all_processes_on_start: true
}
}
}
Figura 6. Per suddivisione del processo.
Suddivisione a livello di pacchetto
L'attribuzione a livello di pacchetto richiede l'attivazione di android.packages_list
sui dati
raccolti nella traccia Perfetto. Attiva la seguente origine dati nel file di configurazione
wattson.cfg
:
data_sources {
config {
name: "android.packages_list"
target_buffer: 1
}
}
Analogamente all'attribuzione a livello di thread e processo, quando selezioni un intervallo di sezioni di thread, esamina la suddivisione a livello di pacchetto.
Figura 7. Suddivisione a livello di thread.
Domande frequenti
Ecco alcune domande frequenti su Wattson.
Wattson dovrebbe corrispondere all'output dell'hardware di misurazione della potenza del lab?
Per la maggior parte dei workload, la stima di Wattson corrisponde alle misurazioni dell'hardware di alimentazione del laboratorio. Tuttavia, non è sempre così e non è l'intento di Wattson.
Wattson ha lo scopo di convalidare i miglioramenti del consumo energetico o rilevare le regressioni del consumo energetico senza il rumore di fattori ambientali (temperatura), variazioni da unità a unità nella dispersione del chip (lo stesso SoC può avere una dispersione diversa per unità) o differenze di calibrazione tra l'hardware di misurazione del consumo energetico di laboratorio.
In che modo Wattson è più utile rispetto all'analisi del tempo di CPU o dei cicli di CPU?
Il tempo e i cicli della CPU non tengono conto della differenza di potenza o consumo di energia tra le frequenze e i tipi di CPU (piccole, medie e grandi).
Una frequenza della CPU raddoppiata non sempre comporta una potenza della CPU raddoppiata o un rendimento raddoppiato.
Wattson è preciso rispetto alle soluzioni hardware?
Abbiamo confrontato Wattson con l'hardware di misurazione della potenza di laboratorio in diversi casi d'uso forniti da più team. L'errore medio in Wattson è di 1 punto percentuale e la deviazione standard è di 1,5 punti percentuali. Questo livello di correlazione viene mantenuto nei test che durano da 10 secondi a 4 ore. Quindi non si verificano errori striscianti o mascheramento degli errori che dipendono dal tempo.
Esperimenti di configurazione del kernel di Pixel 6
Ecco alcuni esperimenti di base delle suddivisioni tipiche di Wattson utilizzando Pixel 6:
Wattson.cfg
Questa sezione fornisce la configurazione tipica per l'attivazione di Wattson su Perfetto:
write_into_file: true
flush_period_ms: 30000
file_write_period_ms: 30000
buffers: {
size_kb: 2048
fill_policy: RING_BUFFER
}
buffers: {
size_kb: 200000
fill_policy: RING_BUFFER
}
# Needed for process level power attribution
data_sources: {
config {
name: "linux.process_stats"
target_buffer: 0
process_stats_config {
scan_all_processes_on_start: true
}
}
}
# Needed for package level power attribution
data_sources: {
config {
name: "android.packages_list"
target_buffer: 0
}
}
# Needed for determining CPU freq/idle initial state
data_sources: {
config {
name: "linux.sys_stats"
sys_stats_config {
cpufreq_period_ms: 100000000
cpuidle_period_ms: 100000000
}
}
}
# Needed for estimating power and thread level power attribution
data_sources: {
config {
name: "linux.ftrace"
target_buffer: 1
ftrace_config {
# Minimum data sources for estimating power
ftrace_events: "power/cpu_frequency"
ftrace_events: "power/cpu_idle"
ftrace_events: "power/suspend_resume"
ftrace_events: "cpuhp/cpuhp_enter"
ftrace_events: "cpuhp/cpuhp_exit"
ftrace_events: "cpuhp/cpuhp_multi_enter"
ftrace_events: "devfreq/devfreq_frequency"
# Needed for Wattson start/stop markers
ftrace_events: "ftrace/print"
# Needed for thread level power attribution
ftrace_events: "sched/sched_switch"
# Needed for process level power attribution
ftrace_events: "sched/sched_process_free"
ftrace_events: "task/task_newtask"
ftrace_events: "task/task_rename"
}
}
}