Собирайте и просматривайте следы

На этой странице приведены подробные инструкции по сбору трассировок Perfetto для использования с Wattson и для анализа полученных данных о мощности в пользовательском интерфейсе Perfetto.

Хотя существует множество способов сбора трассировки Perfetto, методы, представленные на этой странице, включают особые требования и рабочие процессы для создания трассировки, совместимой с Wattson.

Минимальные требования к сборке

Чтобы убедиться, что Wattson имеет необходимые метаданные для корректной работы, необходимо собрать трассировки с устройства, работающего под управлением последней сборки. Минимальные версии сборок для оценки мощности центрального и графического процессоров различаются в зависимости от устройства.

Устройство Минимальные требования к сборке: оценка ЦП Минимальные требования к сборке: оценка графического процессора
Pixel Watch 2 Нет минимальных требований к сборке Не поддерживается
Pixel Watch 3 25Q2 Не поддерживается
Пиксель 6 Нет минимальных требований к сборке 25Q2
Пиксель 9 25Q2 Не поддерживается

Соберите трассировку Perfetto из командной строки

В этом разделе представлен пример рабочего процесса сбора трассировок Perfetto для использования с Wattson. Все команды, перечисленные в следующих шагах, должны выполняться с хоста Android Debug Bridge (adb) .

  1. Настройте и запустите трассировку, создав файл конфигурации Perfetto на устройстве. Пример конфигурации можно найти в файле wattson.cfg в исходном коде.

    Ваша конфигурация должна включать следующие события трассировки:

    # 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. Чтобы включить оценку энергопотребления кэша L3, включите событие 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. (Необязательно) Установите начало окна Wattson — маркер, встроенный в трассу Perfetto, который указывает начало записи. Этот маркер повышает точность измерения Wattson.

    # Optional
    adb shell "echo 'I|0|wattson_start' >/sys/kernel/tracing/trace_marker"
    
  4. Запустите интересующую вас рабочую нагрузку.

  5. (Необязательно) Включите событие трассировки ftrace/print чтобы задать конец окна Wattson:

    # Optional
    adb shell "echo 'I|0|wattson_stop' >/sys/kernel/tracing/trace_marker"
    
  6. Очистите буферы трассировки и извлеките файл трассировки Perfetto:

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

Соберите трассировку Perfetto с помощью пользовательского интерфейса Perfetto.

Для сбора трассировок с помощью Perfetto UI необходимо включить специальные настройки для Wattson. При записи новой трассировки в Perfetto UI включите переключатели « Сведения о планировании» , «Частота ЦП и состояния простоя» :

Подробности планирования, частота ЦП и переключение состояний простоя

Рисунок 1. Подробности планирования, частота ЦП и переключатели состояний простоя.

Для устройств Pixel 9 в настройках Ftrace установите флажок devfreq , чтобы включить сбор данных о частоте устройства:

Включить частоту устройства

Рисунок 2. Включение частоты устройства.

Использовать пользовательский интерфейс Wattson

С помощью Perfetto можно анализировать оценки энергопотребления Wattson, выбирая временной диапазон для просмотра статистики по каждой шине, или включать определенные конфигурации трассировки для атрибутирования энергопотребления на уровне потока, процесса или пакета.

Просмотр по каждому рельсу

Чтобы взаимодействовать с Уоттсоном в Perfetto:

  1. Откройте трассировку в Perfetto.

    Если ваше устройство поддерживается Wattson, трассировки Wattson будут автоматически перечислены:

    Просмотрите следы Wattson в Perfetto

    Рисунок 3. Просмотр следов Уотсона в Perfetto.

  2. Нажмите Wattson , чтобы развернуть и просмотреть разбивку по виртуальным железным дорогам:

    • Все графики рельсов автоматически масштабируются до одинакового значения, чтобы показать пропорцию между рельсами.

    • Статистика формируется для любого выбранного (или отмеченного) пользователем региона.

    • Таблицу статистики можно сортировать, щелкнув по названию любого столбца.

    • Итоговые расчетные данные отображаются непосредственно под заголовками столбцов.

    Оценки железнодорожных перевозок

    Рисунок 4. Оценки стоимости железнодорожных перевозок.

Просмотр трассировки по потокам, процессам или атрибуциям пакетов

Если у вас включены трассировки планировщика и вы можете видеть фрагменты потоков в Perfetto, вы также можете получить данные об энергопотреблении или мощности на уровне потоков или процессов:

  1. В Perfetto выберите область срезов нитей.
  2. Просмотрите разбивку по потоку, процессу или пакету.

Как и в случае со статистикой по каждому рельсовому пути, вы можете щелкнуть любое название столбца, чтобы отсортировать данные по этому столбцу.

Анализировать разбивку на уровне потоков

В дополнение к минимальным требованиям для базовой оценки мощности вам необходимо добавить следующую конфигурацию в раздел linux.ftrace в wattson.cfg для распределения мощности на уровне потоков:

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

Разбивка по уровню потока

Рисунок 5. Разбивка по уровням потоков.

Разбивка на уровне процесса

Для атрибуции на уровне процесса необходимо включить process_states для данных, собранных в трассировке Perfetto. Включите следующий источник данных в файле конфигурации wattson.cfg :

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

По разбивке процесса

Рисунок 6. По разбивке процесса.

Разбивка на уровне пакетов

Для атрибуции на уровне пакетов необходимо включить android.packages_list для данных, собранных в трассировке Perfetto. Включите следующий источник данных в файле конфигурации wattson.cfg :

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

Подобно атрибуции на уровне потоков и процессов, при выборе диапазона фрагментов потоков просмотрите разбивку на уровне пакетов.

Разбивка на уровне потоков

Рисунок 7. Разбивка по уровням потоков.

Часто задаваемые вопросы

Вот некоторые часто задаваемые вопросы о Уоттсоне.

Будет ли Wattson соответствовать выходной мощности лабораторного измерительного оборудования?

Для большинства рабочих нагрузок оценка Wattson совпадает с лабораторными измерениями мощности оборудования. Однако это не всегда так, и Wattson не ставит перед собой такую ​​цель.

Wattson предназначен для подтверждения повышения мощности или выявления снижения мощности без учета помех, вызванных факторами окружающей среды (температурой), различиями в утечках кристалла от блока к блоку (одна и та же SoC может иметь разные утечки в расчете на блок) или различиями в калибровке между лабораторными измерительными приборами мощности.

Чем Wattson полезнее анализа времени ЦП или циклов ЦП?

Время и циклы ЦП не учитывают разницу в мощности или энергопотреблении в зависимости от частоты ЦП и типа ЦП (маленький, средний или большой).

Удвоение частоты процессора не всегда приводит к удвоению его мощности или производительности.

Точен ли Wattson по сравнению с аппаратными решениями?

Мы сравнили Wattson с лабораторным оборудованием для измерения мощности в различных сценариях использования, предоставленным несколькими командами. Средняя погрешность Wattson составляет 1%, а стандартное отклонение — 1,5%. Этот уровень корреляции сохраняется как при тестировании продолжительностью от 10 секунд до 4 часов. Таким образом, не наблюдается нарастания или маскирования ошибок, которые являются фактором времени.

Эксперименты с конфигурацией ядра Pixel 6

Вот несколько базовых экспериментов типичных поломок Уотсона с использованием Pixel 6:

Wattson.cfg

В этом разделе представлена ​​типичная конфигурация для включения Wattson в 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"
          }
      }
  }