Как собирать и просматривать трассировки

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

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

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

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

Устройство Минимальные требования к сборке: оценка ЦП Минимальные требования к сборке: оценка графического процессора
Pixel Watch 2 Нет требований в отношении минимального количества сборок Не поддерживается
Pixel Watch 3 II квартал 2025 г. Не поддерживается
Pixel 6 Нет требований в отношении минимального количества сборок 25Q2
Pixel 9 II квартал 2025 г. Не поддерживается
Pixel 10 25Q2 Не поддерживается
Galaxy XR (SXR2230P) Нет требований в отношении минимального количества сборок Не поддерживается

Как собрать данные трассировки 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 UI

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

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

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

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

Как включить ограничение частоты показа на устройстве

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

Как посмотреть разбивку по сегментам

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

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

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

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

    Как посмотреть трассировки Wattson в Perfetto

    Рисунок 3. Просматривайте трассировки Wattson в 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. Разбивка по цепочкам.

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

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

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

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

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

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

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

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

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

Разбивка по цепочкам

Рисунок 7. Разбивка по цепочкам.

Оценка энергопотребления графического процессора

Оценка энергопотребления графическим процессором поддерживается на Pixel 6, 6 Pro и 6a. Чтобы включить оценку энергопотребления графическим процессором, активируйте следующий источник данных в файле конфигурации wattson.cfg:

data_sources: {
  config {
    name: "linux.ftrace"
    ftrace_config {
      ftrace_events: "mali/gpu_power_state"
      ftrace_events: "power/gpu_frequency"

      # [Optional] Enable GPU Work Period (not used by Wattson, but useful for debugging)
      ftrace_events: "power/gpu_work_period"
    }
  }
}

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

Оценка энергопотребления графического процессора

Рисунок 8. Оценка мощности графического процессора.

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

Ниже приведены ответы на часто задаваемые вопросы о Wattson.

Должен ли Уотсон показывать такие же результаты, как и оборудование для измерения мощности в лаборатории?

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

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

Чем Wattson полезнее, чем просмотр процессорного времени или циклов процессора?

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

Удвоенная частота ЦП не всегда означает удвоенную мощность или производительность.

Насколько точны данные Wattson по сравнению с данными, полученными с помощью аппаратных решений?

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

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

Вот несколько примеров того, как Wattson распределяет расход заряда батареи на 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"
          }
      }
  }