Raccogliere e visualizzare le tracce

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

  1. Configura e avvia la traccia creando un file di configurazione di Perfetto sul dispositivo. Un esempio di configurazione è disponibile in wattson.cfg nell'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"
          }
       }
    }
    
  2. 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
    
  3. (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"
    
  4. Esegui il carico di lavoro di interesse.

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

Dettagli della pianificazione e attivazione/disattivazione della frequenza della CPU e degli stati di inattività

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:

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

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

    Stime ferroviarie

    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:

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

Suddivisioni a livello di thread

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

Per suddivisione del processo

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.

Suddivisione a livello di thread

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.

Stima della potenza della GPU

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