Coletar e visualizar rastreamentos

Esta página fornece instruções detalhadas para coletar rastreamentos do Perfetto para usar com o Wattson e analisar os dados de energia resultantes na interface do Perfetto.

Há muitas maneiras de coletar um rastreamento do Perfetto, mas os métodos nesta página incluem os requisitos e fluxos de trabalho específicos para gerar um rastreamento compatível com o Wattson.

Requisitos mínimos de build

Para verificar se o Wattson tem os metadados necessários para funcionar corretamente, colete rastreamentos de um dispositivo que esteja executando um build recente. As versões mínimas de build para estimativa de consumo de energia da CPU e da GPU variam de acordo com o dispositivo.

Dispositivo Requisito mínimo de build: estimativa de CPU Requisito mínimo de build: estimativa de GPU
Pixel Watch 2 Não há requisito mínimo de build Incompatível
Pixel Watch 3 25Q2 Incompatível
Pixel 6 Não há requisito mínimo de build 25Q2
Pixel 9 25Q2 Incompatível

Coletar rastreamento do Perfetto na linha de comando

Esta seção apresenta um exemplo de fluxo de trabalho para coletar rastreamentos do Perfetto para uso com o Wattson. Todos os comandos listados nas etapas a seguir devem ser emitidos do host do Android Debug Bridge (adb).

  1. Configure e inicie o rastreamento criando um arquivo de configuração do Perfetto no dispositivo. Um exemplo de configuração pode ser encontrado em wattson.cfg na árvore de origem.

    Sua configuração precisa incluir os seguintes eventos de rastreamento:

    # 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. Para ativar as estimativas de uso de energia do cache L3, ative o 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. (Opcional) Defina o início da janela do Wattson, um marcador incorporado no rastreamento do Perfetto que indica o início da gravação. Esse marcador aumenta a precisão da medição do Wattson.

    # Optional
    adb shell "echo 'I|0|wattson_start' >/sys/kernel/tracing/trace_marker"
    
  4. Execute a carga de trabalho de interesse.

  5. (Opcional) Ative o evento de rastreamento ftrace/print para definir o fim da janela do Wattson:

    # Optional
    adb shell "echo 'I|0|wattson_stop' >/sys/kernel/tracing/trace_marker"
    
  6. Limpe os buffers de rastreamento e extraia o arquivo de rastreamento do Perfetto:

    adb shell killall -w perfetto
    adb pull /data/misc/perfetto-traces/trace my_perfetto_trace.pb
    

Coletar rastreamento do Perfetto usando a interface do Perfetto

Para coletar rastreamentos usando a interface do Perfetto, é necessário ativar configurações específicas para o Wattson. Ao gravar um novo rastreamento na interface do Perfetto, ative os botões Detalhes de programação e Frequência da CPU e estados ociosos:

Alternância entre detalhes de programação e estados de frequência e inatividade da CPU

Figura 1. Alternadores de detalhes de programação e frequência da CPU e estados ociosos.

Para dispositivos Pixel 9, em configurações de Ftrace, marque a caixa de seleção devfreq para ativar a coleta de frequência do dispositivo:

Ativar a frequência por dispositivo

Figura 2. Ative a frequência por dispositivo.

Usar a interface do Wattson

Com o Perfetto, analise as estimativas de energia do Wattson selecionando um período para conferir as estatísticas por trilho ou ative configurações de rastreamento específicas para atribuir o consumo de energia no nível da linha de execução, do processo ou do pacote.

Ver detalhamento por trecho

Para interagir com o Wattson no Perfetto:

  1. Abra um rastreamento no Perfetto.

    Se o dispositivo for compatível com o Wattson, os rastreamentos dele serão listados automaticamente:

    Ver rastros do Wattson no Perfetto

    Figura 3. Ver rastreamentos do Wattson no Perfetto.

  2. Clique em Wattson para abrir e conferir o detalhamento por trilho virtual:

    • Todos os gráficos de trilho são dimensionados automaticamente para o mesmo valor e mostram a proporção entre eles.

    • As estatísticas são geradas para qualquer região selecionada ou marcada pelo usuário.

    • Para classificar a tabela de estatísticas, clique no nome de qualquer coluna.

    • Os totais estimados são mostrados diretamente abaixo dos títulos das colunas.

    Estimativas de transporte ferroviário

    Figura 4. Estimativas de transporte ferroviário.

Ver atribuições de trace por linha de execução, processo ou pacote

Se você tiver rastreamentos do programador ativados e puder ver intervalos de linhas de execução no Perfetto, também poderá receber a atribuição de energia ou consumo de energia no nível da linha de execução ou do processo:

  1. No Perfetto, selecione uma região de intervalos de execução de encadeamento.
  2. Confira o detalhamento da linha de execução, do processo ou do pacote.

Assim como nas estatísticas de faixa por trecho, você pode clicar em qualquer um dos nomes de coluna para classificar por ela.

Analisar o detalhamento no nível da linha de execução

Além dos requisitos mínimos para a estimativa básica de consumo de energia, adicione a seguinte configuração à seção linux.ftrace no wattson.cfg para atribuição de consumo de energia por linha de execução:

data_sources: {
    config {
        name: "linux.ftrace"
        ftrace_config {
            ftrace_events: "sched/sched_switch"
        }
    }
}

Detalhamentos no nível da conversa

Figura 5. Detalhamentos no nível da conversa.

Detalhamento no nível do processo

A atribuição no nível do processo exige que process_states esteja ativado nos dados coletados no rastreamento do Perfetto. Ative a seguinte fonte de dados no arquivo de configuração wattson.cfg:

data_sources: {
    config {
        name: "linux.process_stats"
        target_buffer: 1
        process_stats_config {
            scan_all_processes_on_start: true
        }
    }
}

Por detalhamento do processo

Figura 6. Por detalhamento do processo.

Detalhamento no nível do pacote

A atribuição no nível do pacote exige que o android.packages_list esteja ativado nos dados coletados no rastreamento do Perfetto. Ative a seguinte fonte de dados no arquivo de configuração wattson.cfg:

data_sources {
  config {
    name: "android.packages_list"
    target_buffer: 1
  }
}

Semelhante à atribuição no nível da linha de execução e do processo, quando você seleciona um intervalo de intervalos de tempo da linha de execução, analise o detalhamento no nível do pacote.

Detalhamento no nível da linha de execução

Figura 7. Detalhamento no nível da conversa.

Perguntas frequentes

Confira algumas perguntas frequentes sobre o Wattson.

O Wattson deve corresponder à saída do hardware de medição de energia do laboratório?

Para a maioria das cargas de trabalho, a estimativa do Wattson corresponde às medições de hardware de energia do laboratório. No entanto, nem sempre é assim, e essa não é a intenção do Wattson.

O Wattson foi criado para validar melhorias de energia ou detectar regressões de energia sem ruído de fatores ambientais (temperatura), variações de unidade para unidade no vazamento de chip (o mesmo SoC pode ter vazamentos diferentes por unidade básica) ou diferenças de calibragem entre o hardware de medição de energia do laboratório.

Como o Wattson é mais útil do que analisar o tempo ou os ciclos da CPU?

O tempo e os ciclos da CPU não explicam a diferença no consumo de energia entre frequências e tipos de CPU (pequena, média e grande).

Uma frequência de CPU dobrada nem sempre resulta em potência ou desempenho dobrados.

O Wattson é preciso em comparação com soluções de hardware?

Comparamos o Wattson com hardware de medição de energia em laboratório em vários casos de uso fornecidos por várias equipes. O erro médio no Wattson é de 1 ponto percentual, e o desvio padrão é de 1,5 ponto percentual. Esse nível de correlação é mantido em testes que duram de 10 segundos a 4 horas. Assim, não há aumento ou mascaramento de erros que seja um fator de tempo.

Experimentos de configuração do kernel do Pixel 6

Confira alguns experimentos básicos de detalhamentos típicos do Wattson usando o Pixel 6:

Wattson.cfg

Esta seção mostra a configuração típica para ativar o Wattson no 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"
          }
      }
  }