На этой странице приведены подробные инструкции по сбору трассировок Perfetto для использования с Wattson и для анализа полученных данных о мощности в пользовательском интерфейсе Perfetto.
Хотя существует множество способов сбора трассировки Perfetto, методы, представленные на этой странице, включают особые требования и рабочие процессы для создания трассировки, совместимой с Wattson.
Минимальные требования к сборке
Чтобы убедиться, что Wattson имеет необходимые метаданные для корректной работы, необходимо собрать трассировки с устройства, работающего под управлением последней сборки. Минимальные версии сборок для оценки мощности центрального и графического процессоров различаются в зависимости от устройства.
Устройство | Минимальные требования к сборке: оценка ЦП | Минимальные требования к сборке: оценка графического процессора |
---|---|---|
Pixel Watch 2 | Нет минимальных требований к сборке | Не поддерживается |
Pixel Watch 3 | 25Q2 | Не поддерживается |
Пиксель 6 | Нет минимальных требований к сборке | 25Q2 |
Пиксель 9 | 25Q2 | Не поддерживается |
Соберите трассировку 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.
Для сбора трассировок с помощью Perfetto UI необходимо включить специальные настройки для Wattson. При записи новой трассировки в Perfetto UI включите переключатели « Сведения о планировании» , «Частота ЦП и состояния простоя» :
Рисунок 1. Подробности планирования, частота ЦП и переключатели состояний простоя.
Для устройств Pixel 9 в настройках Ftrace установите флажок devfreq , чтобы включить сбор данных о частоте устройства:
Рисунок 2. Включение частоты устройства.
Использовать пользовательский интерфейс Wattson
С помощью Perfetto можно анализировать оценки энергопотребления 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. Разбивка по уровням потоков.
Часто задаваемые вопросы
Вот некоторые часто задаваемые вопросы о Уоттсоне.
Будет ли 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"
}
}
}