Raccogliere e visualizzare le tracce

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).

  1. 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"
          }
       }
    }
    
  2. 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
    
  3. (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"
    
  4. Esegui il workload che ti interessa.

  5. (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"
    
  6. 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à:

Dettagli della pianificazione e pulsanti di attivazione/disattivazione della frequenza della CPU e degli 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:

Attiva Frequenza per 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:

  1. Apri una traccia in Perfetto.

    Se il tuo dispositivo è supportato da Wattson, le tracce di Wattson vengono elencate automaticamente:

    Visualizzare le tracce di Wattson in Perfetto

    Figura 3. Visualizza le tracce di Wattson in Perfetto.

  2. 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.

    Stime ferroviarie

    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:

  1. In Perfetto, seleziona una regione di sezioni di thread.
  2. 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"
        }
    }
}

Suddivisioni a livello di thread

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
        }
    }
}

Per suddivisione del processo

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.

Suddivisione a livello di thread

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"
          }
      }
  }