En esta página, se proporcionan instrucciones detalladas para recopilar registros de Perfetto y usarlos con Wattson, y para analizar los datos de energía resultantes en la IU de Perfetto.
Si bien existen muchas formas de recopilar un registro de Perfetto, los métodos que se describen en esta página incluyen los requisitos y flujos de trabajo específicos para generar un registro compatible con Wattson.
Requisitos mínimos de compilación
Para verificar que Wattson tenga los metadatos necesarios para funcionar correctamente, debes recopilar registros de un dispositivo que ejecute una compilación reciente. Las versiones de compilación mínimas para la estimación de la potencia de la CPU y la GPU varían según el dispositivo.
Dispositivo | Requisito de compilación mínimo: Estimación de la CPU | Requisito de compilación mínimo: Estimación de GPU |
---|---|---|
Pixel Watch 2 | No se requiere una versión mínima | No compatible |
Pixel Watch 3 | 25Q2 | No compatible |
Pixel 6 | No se requiere una versión mínima | 25Q2 |
Pixel 9 | 25Q2 | No compatible |
Cómo recopilar registros de Perfetto desde la línea de comandos
En esta sección, se presenta un ejemplo de flujo de trabajo para recopilar registros de Perfetto y usarlos con Wattson. Todos los comandos que se enumeran en los siguientes pasos se deben emitir desde el host de Android Debug Bridge (adb).
Para configurar y comenzar el registro, crea un archivo de configuración de Perfetto en el dispositivo. Puedes encontrar un ejemplo de configuración en
wattson.cfg
en el árbol de origen.Tu configuración debe incluir los siguientes eventos de registro:
# 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 habilitar las estimaciones del uso de energía de la caché de L3, habilita el 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) Establece el inicio de la ventana de Wattson, un marcador incorporado en el registro de Perfetto que indica el inicio de la grabación. Este marcador agrega precisión adicional a la medición de Wattson.
# Optional adb shell "echo 'I|0|wattson_start' >/sys/kernel/tracing/trace_marker"
Ejecuta la carga de trabajo de interés.
(Opcional) Habilita el evento de registro
ftrace/print
para establecer el final del período de Wattson:# Optional adb shell "echo 'I|0|wattson_stop' >/sys/kernel/tracing/trace_marker"
Vacía los búferes de registro y extrae el archivo de registro de Perfetto:
adb shell killall -w perfetto adb pull /data/misc/perfetto-traces/trace my_perfetto_trace.pb
Recopila el registro de Perfetto con la IU de Perfetto
Para recopilar registros con la IU de Perfetto, debes habilitar parámetros de configuración específicos para Wattson. Cuando grabes un registro nuevo en la IU de Perfetto, habilita los botones de activación Scheduling details y CPU frequency and idle states:
Figura 1: Detalles de programación y alternadores de frecuencia de CPU y estados de inactividad
En el caso de los dispositivos Pixel 9, en la configuración de Ftrace, selecciona la casilla de verificación devfreq para habilitar la recopilación de la frecuencia del dispositivo:
Figura 2: Habilita la frecuencia por dispositivo.
Cómo usar la IU de Wattson
Con Perfetto, analiza las estimaciones de potencia de Wattson seleccionando un período para ver las estadísticas por riel o habilita configuraciones de registro específicas para atribuir el consumo de energía a nivel de subproceso, proceso o paquete.
Ver el desglose por riel
Para interactuar con Wattson en Perfetto, haz lo siguiente:
Abre un registro en Perfetto.
Si tu dispositivo es compatible con Wattson, los registros de Wattson se mostrarán automáticamente:
Figura 3: Visualiza los registros de Wattson en Perfetto.
Haz clic en Wattson para expandir y ver el desglose por riel virtual:
Todos los gráficos de riel se ajustan automáticamente al mismo valor para mostrar la proporción entre los rieles.
Las estadísticas se generan para cualquier región seleccionada (o marcada) por el usuario.
Para ordenar la tabla de estadísticas, haz clic en cualquier nombre de columna.
Los totales estimados se muestran directamente debajo de los títulos de las columnas.
Figura 4: Estimaciones de trenes
Consulta el seguimiento por subproceso, proceso o atribuciones de paquetes
Si tienes habilitados los registros de seguimiento del programador y puedes ver segmentos de subprocesos en Perfetto, también puedes obtener la atribución de energía o potencia a nivel del subproceso o del proceso:
- En Perfetto, selecciona una región de segmentos de subprocesos.
- Consulta el desglose del subproceso, el proceso o el paquete.
Al igual que con las estadísticas de pistas por riel, puedes hacer clic en cualquiera de los nombres de las columnas para ordenar los datos según esa columna.
Analiza el desglose a nivel del subproceso
Además de los requisitos mínimos para la estimación básica de energía, debes agregar la siguiente configuración a la sección linux.ftrace
en wattson.cfg
para la atribución de energía a nivel de subproceso:
data_sources: {
config {
name: "linux.ftrace"
ftrace_config {
ftrace_events: "sched/sched_switch"
}
}
}
Figura 5: Desgloses a nivel de la conversación
Desglose a nivel del proceso
La atribución a nivel del proceso requiere que process_states
esté habilitado en los datos recopilados en el registro de Perfetto. Habilita la siguiente fuente de datos en tu archivo de configuración wattson.cfg
:
data_sources: {
config {
name: "linux.process_stats"
target_buffer: 1
process_stats_config {
scan_all_processes_on_start: true
}
}
}
Figura 6: Por desglose del proceso
Desglose a nivel del paquete
La atribución a nivel del paquete requiere que android.packages_list
esté habilitado en los datos recopilados en el registro de Perfetto. Habilita la siguiente fuente de datos en tu archivo de configuración wattson.cfg
:
data_sources {
config {
name: "android.packages_list"
target_buffer: 1
}
}
Al igual que con la atribución a nivel del subproceso y del proceso, cuando seleccionas un rango de segmentos de subprocesos, revisa el desglose a nivel del paquete.
Figura 7: Desglose a nivel del hilo
Preguntas frecuentes
Estas son algunas preguntas frecuentes sobre Wattson.
¿Se espera que Wattson coincida con el resultado del hardware de medición de energía del laboratorio?
Para la mayoría de las cargas de trabajo, la estimación de Wattson coincide con las mediciones de hardware de energía del lab. Sin embargo, no siempre es así y no es la intención de Wattson.
El objetivo de Wattson es validar las mejoras en el consumo o detectar las regresiones en el consumo sin el ruido de los factores ambientales (temperatura), las variaciones entre unidades en la fuga del chip (el mismo SoC puede tener diferentes fugas por unidad) o las diferencias de calibración entre el hardware de medición de energía del laboratorio.
¿Por qué Wattson es más útil que observar el tiempo de CPU o los ciclos de CPU?
El tiempo y los ciclos de la CPU no tienen en cuenta la diferencia en el consumo de energía o potencia entre las frecuencias y los tipos de CPU (pequeña, mediana o grande).
Una frecuencia de CPU duplicada no siempre genera una potencia de CPU o un rendimiento duplicados.
¿Es Wattson preciso en comparación con las soluciones de hardware?
Comparamos Wattson con el hardware de medición de energía de laboratorio en varios casos de uso proporcionados por varios equipos. El error promedio en Wattson es de 1 punto porcentual y la desviación estándar es de 1.5 puntos porcentuales. Este nivel de correlación se mantiene en las pruebas que duran desde 10 segundos hasta las que se ejecutan durante 4 horas. Por lo tanto, no hay un aumento gradual ni un ocultamiento de errores que dependan del tiempo.
Experimentos de configuración del kernel del Pixel 6
Estos son algunos experimentos de referencia de las descomposiciones típicas de Wattson con el Pixel 6:
Wattson.cfg
En esta sección, se proporciona la configuración típica para habilitar Wattson en 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"
}
}
}