Perfetto: система профилирования производительности¶
Perfetto — это открытая (open-source) система профилирования производительности и трассировки, предназначенная для сбора и анализа низкоуровневых данных о работе операционной системы, приложений и аппаратного обеспечения. Проект разрабатывается компанией Google и используется в операционной системе Android, а также в Chrome и Chromium OS для диагностики проблем с производительностью, энергопотреблением и отладки системных сбоев. Perfetto объединяет в себе набор высокопроизводительных инструментов для записи данных (трассировки) и развитый веб-интерфейс для их визуального анализа.
¶История и происхождение
Проект Perfetto был анонсирован Google в 2018 году как наследник и замена более ранней системы трассировки systrace (которая, в свою очередь, базировалась на утилите atrace). Основной целью разработки было преодоление ограничений предыдущих решений: недостаточной масштабируемости при записи большого объёма данных, высокой нагрузки на систему в момент профилирования и ограниченных возможностей анализа в командной строке.
Название проекта происходит от итальянского слова «perfetto», что означает «идеальный» или «совершенный». Разработка ведётся в открытом репозитории на платформе GitHub, что позволяет сторонним разработчикам и производителям оборудования (OEM) адаптировать систему под собственные нужды. Начиная с Android 10, Perfetto стал стандартным и основным механизмом системной трассировки, полностью вытеснив устаревший systrace в последующих версиях платформы.
¶Архитектура и компоненты
Архитектура Perfetto построена по модульному принципу и включает несколько ключевых компонентов, взаимодействующих между собой.
¶Инструменты записи данных
Для сбора данных используется набор утилит, работающих на устройстве или в операционной системе. Основными из них являются:
- perfetto — универсальная командная утилита для запуска сеансов трассировки. Она позволяет задавать конфигурацию, длительность записи и источники данных.
- traced — фоновый системный демон (служба), который управляет сеансами трассировки, буферизацией данных и их передачей потребителям.
- traced_probes — вспомогательный демон, отвечающий за сбор данных из ядра операционной системы и различных подсистем (например, планировщика задач, файловой системы, сетевого стека).
¶Источники данных (Data Sources)
Perfetto поддерживает множество разнородных источников информации. Среди них:
- События ядра Linux (через механизм ftrace) — информация о переключениях контекста между процессами, системных вызовах, работе планировщика.
- Профилирование кучи (heap profiling) — отслеживание выделений памяти в приложениях для поиска утечек.
- Профилирование нативного кода (sampling profiler) — периодическая выборка текущего стека вызовов для определения «горячих» участков кода.
- Трассировка Java/Kotlin кода в Android Runtime (ART).
- Данные от GPU, драйверов и других аппаратных компонентов.
- Пользовательские события — разработчики могут добавлять собственные маркеры в код приложений, используя SDK Perfetto.
¶Формат данных и хранение
Perfetto использует собственный высокоэффективный бинарный формат хранения данных, основанный на protobuf (Protocol Buffers). Этот формат обеспечивает компактность записи и высокую скорость сериализации. Данные могут записываться в файл на устройстве или передаваться по сети для последующего анализа.
¶Анализ и визуализация
Ключевым преимуществом Perfetto перед предшественниками является развитая система анализа собранных данных.
¶Веб-интерфейс UI
Основным инструментом анализа является веб-приложение Perfetto UI (ui.perfetto.dev). Оно запускается непосредственно в браузере и не требует установки дополнительного программного обеспечения. Интерфейс предоставляет:
- Интерактивные временные диаграммы (timeline), на которых отображаются процессы, потоки, прерывания и системные события в хронологическом порядке.
- Инструменты масштабирования и навигации по трекам для детального изучения коротких промежутков времени.
- Поиск по событиям, именам функций, PID (идентификаторам процессов) и другим атрибутам.
- Агрегированные статистические отчёты по использованию процессора, памяти, частоте кадров (для графики).
- SQL-интерфейс (Trace Processor), который позволяет выполнять сложные аналитические запросы к данным трассировки на языке SQL. Это открывает возможности для автоматизированного анализа и написания скриптов.
¶Инструменты командной строки
Для серверной обработки и интеграции в автоматизированные системы тестирования Perfetto предоставляет утилиты командной строки, такие как trace_processor и traceconv, которые позволяют конвертировать данные в другие форматы (например, JSON) и извлекать метрики без использования графического интерфейса.
¶Применение в Android
В экосистеме Android Perfetto занимает центральное место в диагностике производительности.
¶Профилирование приложений
Разработчики приложений используют Perfetto для поиска причин низкой частоты кадров (jank), избыточного потребления энергии, медленного запуска и утечек памяти. Интеграция с Android Studio позволяет запускать трассировку напрямую из среды разработки через инструмент CPU Profiler.
¶Системная отладка
Инженеры, работающие над прошивками и системными компонентами, применяют Perfetto для анализа работы планировщика задач, взаимодействия между процессами (Binder IPC), управления питанием (Power HAL) и производительности подсистемы ввода-вывода.
¶Метрики производительности
В Android встроены библиотеки метрик на основе Perfetto, которые позволяют получать сводные показатели (например, время запуска приложения, количество пропущенных кадров) в автоматическом режиме. Это используется для мониторинга качества сборок на серверах непрерывной интеграции (CI).
¶Применение в Chrome и других проектах
Perfetto не ограничивается только Android. Проект Chromium использует его для трассировки внутренних компонентов браузера: работы рендеринга, композитинга, сетевого уровня и JavaScript-движка V8. Это помогает разработчикам браузеров выявлять узкие места при загрузке веб-страниц и взаимодействии с графикой.
Благодаря открытой архитектуре, Perfetto адаптируется для других операционных систем и окружений. Существуют реализации для настольных дистрибутивов Linux и Fuchsia OS. Проект активно развивается сообществом, и его компоненты могут быть переиспользованы в сторонних продуктах для решения задач низкоуровневого анализа производительности.
¶Критика и ограничения
Несмотря на широкие возможности, Perfetto имеет определённые ограничения. Основным из них является сложность освоения для начинающих разработчиков из-за обилия терминов, форматов и параметров конфигурации. Эффективная работа с инструментом требует понимания архитектуры операционной системы и принципов работы планировщика.
Также стоит отметить, что трассировка сама по себе вносит некоторые накладные расходы в работу системы, хотя разработчики Perfetto стремятся минимизировать это влияние. При очень высокой частоте событий (например, на многоядерных процессорах с интенсивным вводом-выводом) возможна потеря части данных из-за переполнения буферов, что требует настройки параметров записи.
¶Заключение
Perfetto представляет собой современный и мощный стандарт де-факто для профилирования производительности в экосистеме Google и Android. Его гибридная архитектура, сочетающая низкоуровневую запись данных и удобный веб-анализ, делает его незаменимым инструментом для разработчиков мобильных приложений, системных инженеров и специалистов по оптимизации производительности.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →
