На этой странице приведены подробные инструкции по сбору трассировок 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).
Настройте и запустите трассировку, создав на устройстве файл конфигурации 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" } } }Чтобы включить оценку энергопотребления кеша 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(Необязательно.) Установите начало окна Wattson – маркер, встроенный в трассировку Perfetto, который указывает на начало записи. Этот маркер повышает точность измерений Wattson.
# Optional adb shell "echo 'I|0|wattson_start' >/sys/kernel/tracing/trace_marker"Запустите нужную рабочую нагрузку.
При необходимости включите событие трассировки
ftrace/print, чтобы задать конец периода Wattson:# Optional adb shell "echo 'I|0|wattson_stop' >/sys/kernel/tracing/trace_marker"Очистите буферы трассировки и извлеките файл трассировки 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:
Откройте трассировку в Perfetto.
Если ваше устройство поддерживается Wattson, трассировки Wattson будут автоматически перечислены в списке:

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

Рисунок 4. Расчеты для железнодорожного транспорта.
Просмотр трассировки по потоку, процессу или атрибутам пакета
Если у вас включена трассировка планировщика и вы видите фрагменты потоков в Perfetto, вы также можете получить данные о потреблении энергии на уровне потока или процесса:
- В Perfetto выберите область фрагментов потока.
- Посмотрите разбивку для потока, процесса или пакета.
Как и в случае со статистикой по дорожкам, вы можете нажать на название любого столбца, чтобы отсортировать данные по нему.
Анализ разбивки на уровне потоков
Помимо минимальных требований для базовой оценки энергопотребления, вам необходимо добавить следующую конфигурацию в раздел 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"
}
}
}