Cómo recopilar y ver registros

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

  1. 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"
          }
       }
    }
    
  2. 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
    
  3. (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"
    
  4. Ejecuta la carga de trabajo de interés.

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

Detalles de programación y alternadores de frecuencia de CPU y estados de inactividad

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:

Habilita la métrica Frecuencia por 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:

  1. Abre un registro en Perfetto.

    Si tu dispositivo es compatible con Wattson, los registros de Wattson se mostrarán automáticamente:

    Cómo ver los registros de Wattson en Perfetto

    Figura 3: Visualiza los registros de Wattson en Perfetto.

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

    Estimaciones de trenes

    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:

  1. En Perfetto, selecciona una región de segmentos de subprocesos.
  2. 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"
        }
    }
}

Desgloses a nivel del hilo

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

Desglose por proceso

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.

Desglose a nivel de la conversación

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