Questa pagina fornisce istruzioni dettagliate per la raccolta delle tracce di Perfetto da utilizzare con Wattson e per l'analisi dei dati sull'energia risultanti nell'interfaccia utente di Perfetto.
Anche se esistono molti modi per raccogliere una traccia di Perfetto, i metodi descritti in questa pagina includono i requisiti e i flussi di lavoro specifici per la generazione di una traccia compatibile con Wattson.
Requisiti minimi per la build
Per verificare che Wattson disponga dei metadati richiesti per funzionare correttamente, devi raccogliere le tracce da un dispositivo che esegue una build recente. Le versioni minime della build per la stima dell'energia della CPU e della GPU variano in base al dispositivo.
| Dispositivo | Requisito minimo per la build: stima della CPU | Requisito minimo per la build: stima della GPU |
|---|---|---|
| Pixel Watch 2 | Nessun requisito minimo per la build | Non supportata |
| Pixel Watch 3 | 25Q2 | Non supportata |
| Pixel 6 | Nessun requisito minimo per la build | 25Q2 |
| Pixel 9 | 25Q2 | Non supportata |
| Pixel 10 | 25Q2 | Non supportata |
| Galaxy XR (SXR2230P) | Nessun requisito minimo per la build | Non supportata |
Raccogliere la traccia di Perfetto dalla riga di comando
Questa sezione presenta un flusso di lavoro di esempio per la raccolta delle tracce di Perfetto da utilizzare con Wattson. Tutti i comandi elencati nei seguenti passaggi devono essere emessi dall' host Android Debug Bridge (adb).
Configura e avvia la traccia creando un file di configurazione di Perfetto sul dispositivo. Un esempio di configurazione è disponibile in
wattson.cfgnell'albero di origine.La configurazione minima 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 di energia 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 di Wattson, un indicatore incorporato nella traccia di Perfetto che indica l'inizio della registrazione. Questo indicatore aggiunge ulteriore precisione alla misurazione di Wattson.
# Optional adb shell "echo 'I|0|wattson_start' >/sys/kernel/tracing/trace_marker"Esegui il carico di lavoro di interesse.
(Facoltativo) Attiva l'evento di traccia
ftrace/printper impostare la fine della finestra di Wattson:# Optional adb shell "echo 'I|0|wattson_stop' >/sys/kernel/tracing/trace_marker"Scarica i buffer di traccia ed estrai il file di traccia di Perfetto:
adb shell killall -w perfetto adb pull /data/misc/perfetto-traces/trace my_perfetto_trace.pb
Raccogliere la traccia di 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 in nell'interfaccia utente di Perfetto, attiva i Dettagli della pianificazione e Frequenza della CPU e stati di inattività pulsanti di attivazione/disattivazione:
Figura 1. Pulsanti di attivazione/disattivazione Dettagli della pianificazione e Frequenza della CPU e stati di inattività.
Per i dispositivi Pixel 9, nelle impostazioni Ftrace, seleziona la casella di controllo devfreq per attivare la raccolta della frequenza del dispositivo:

Figura 2. Attiva la frequenza del dispositivo.
Visualizzare la suddivisione per rail
Con Perfetto, analizza le stime dell'energia di Wattson selezionando un intervallo di tempo per visualizzare le statistiche per rail oppure attiva configurazioni di traccia specifiche per attribuire il consumo di energia a livello di thread, processo o pacchetto.
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 rail virtuale:
Tutti i grafici delle rail vengono scalati automaticamente allo stesso valore per mostrare la proporzione tra le rail.
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 delle stime vengono visualizzati direttamente sotto i titoli delle colonne.

Figura 4. Stime delle rail.
Visualizzare le attribuzioni della traccia per thread, processo o pacchetto
Se hai attivato le tracce dello scheduler e puoi visualizzare le sezioni dei thread in Perfetto, puoi anche ottenere l'attribuzione di energia o energia a livello di thread o processo:
- In Perfetto, seleziona una regione di sezioni di thread.
- Visualizza la suddivisione per thread, processo o pacchetto.
Come per le statistiche delle tracce per rail, puoi fare clic su uno 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 dell'energia, devi aggiungere la seguente configurazione a
la sezione linux.ftrace in wattson.cfg per l'attribuzione dell'energia 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 che process_states sia attivato
sui dati raccolti nella traccia di Perfetto. Attiva la seguente origine dati
nel tuo
wattson.cfg file di configurazione:
data_sources: {
config {
name: "linux.process_stats"
target_buffer: 1
process_stats_config {
scan_all_processes_on_start: true
}
}
}

Figura 6. Suddivisione per processo.
Suddivisione a livello di pacchetto
L'attribuzione a livello di pacchetto richiede che android.packages_list sia attivato sui dati raccolti nella traccia di 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.
Stima dell'energia della GPU
La stima dell'energia della GPU è supportata su Pixel 6, 6 Pro e 6a. Per attivare la stima dell'energia della GPU, attiva la seguente origine dati nel file di configurazione
wattson.cfg:
data_sources: {
config {
name: "linux.ftrace"
ftrace_config {
ftrace_events: "mali/gpu_power_state"
ftrace_events: "power/gpu_frequency"
# [Optional] Enable GPU Work Period (not used by Wattson, but useful for debugging)
ftrace_events: "power/gpu_work_period"
}
}
}
Per una determinata selezione, le stime dell'energia della GPU di Wattson vengono visualizzate nell'interfaccia utente di Perfetto nella scheda Stime di Wattson.

Figura 8. Stima dell'energia della GPU.
Domande frequenti
Ecco alcune domande frequenti su Wattson.
È previsto che Wattson corrisponda all'output dell'hardware di misurazione dell'energia di laboratorio?
Per la maggior parte dei carichi di lavoro, la stima di Wattson corrisponde alle misurazioni dell'hardware di laboratorio. Tuttavia, non è sempre così e non è questo l'intento di Wattson.
Wattson è progettato per convalidare i miglioramenti dell'energia o rilevare le regressioni dell'energia senza il rumore dei fattori ambientali (temperatura), le variazioni da unità a unità nella dispersione del chip (lo stesso SoC può avere una dispersione diversa in base all'unità ) o le differenze di calibrazione tra l'hardware di misurazione dell'energia di laboratorio.
In che modo Wattson è più utile rispetto all'analisi del tempo della CPU o dei cicli della CPU?
Il tempo e i cicli della CPU non tengono conto della differenza nel consumo di energia tra le frequenze della CPU e i tipi di CPU (piccola, media e grande).
Una frequenza della CPU raddoppiata non comporta sempre un raddoppio dell'energia della CPU o delle prestazioni.
Wattson è preciso rispetto alle soluzioni hardware?
Abbiamo confrontato Wattson con l'hardware di misurazione dell'energia di laboratorio in più 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 vanno da 10 secondi a 4 ore. Pertanto, non esiste un aumento o una mascheratura dell'errore che sia un fattore di 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"
}
}
}