Открыть сервис

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 →