На этой странице представлены подробные инструкции по сбору данных Perfetto для использования с Wattson и по анализу полученных данных о потреблении энергии в пользовательском интерфейсе Perfetto.
Хотя существует множество способов сбора трассировки Perfetto, методы, описанные на этой странице, включают в себя конкретные требования и рабочие процессы для генерации трассировки, совместимой с Wattson.
Минимальные требования к сборке
Для проверки наличия у Wattson необходимых метаданных для корректной работы необходимо собрать данные трассировки с устройства, на котором установлена последняя версия сборки. Минимальные версии сборок для оценки мощности ЦП и ГП различаются в зависимости от устройства.
| Устройство | Минимальные требования к сборке: оценка загрузки процессора. | Минимальные требования к сборке: оценка производительности графического процессора. |
|---|---|---|
| Pixel Watch 2 | Нет минимальных требований к количеству построенных зданий. | Не поддерживается |
| Pixel Watch 3 | 25Q2 | Не поддерживается |
| Пиксель 6 | Нет минимальных требований к количеству построенных зданий. | 25Q2 |
| Пиксель 9 | 25Q2 | Не поддерживается |
| Пиксель 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(Необязательно) Установите начало окна Ваттсона — маркер, встроенный в трассировку Perfetto, который указывает начало записи. Этот маркер повышает точность измерения Ваттсона.
# 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.
Для сбора трассировок с помощью пользовательского интерфейса Perfetto необходимо включить определенные настройки для Wattson. При записи новой трассировки в пользовательском интерфейсе Perfetto включите переключатели «Подробности планирования » и «Частота ЦП и состояния простоя» :

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

Рисунок 2. Частота включения устройства.
Посмотреть разбивку по рельсам
С помощью Perfetto можно анализировать оценки энергопотребления Wattson, выбрав временной диапазон для просмотра статистики по каждому каналу, или включить определенные параметры трассировки для определения энергопотребления на уровне потока, процесса или корпуса.
Для взаимодействия с Wattson в Perfetto:
Откройте трассировку в Perfetto.
Если ваше устройство поддерживается Wattson, трассировки Wattson будут автоматически отображены в списке:

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

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