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).
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" } } }
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
(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"
Execute a carga de trabalho de interesse.
(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"
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:
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:
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:
Abra um rastreamento no Perfetto.
Se o dispositivo for compatível com o Wattson, os rastreamentos dele serão listados automaticamente:
Figura 3. Ver rastreamentos do Wattson no Perfetto.
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.
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:
- No Perfetto, selecione uma região de intervalos de execução de encadeamento.
- 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"
}
}
}
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
}
}
}
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.
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"
}
}
}