Systrace — що це, інструмент системного трасування Android

Автор: IT Sectr Опубліковано: 2026-03-31 Час читання: 9 хв

Systrace — це інструмент системного трасування Android, який збирає дані про роботу ядра Linux, процесора, графічного прискорювача та всіх процесів системи за короткий проміжок часу. На відміну від Traceview, який фокусується на методах всередині додатка, Systrace показує системну картину: завантаження кожного ядра CPU, роботу SurfaceFlinger, Binder-виклики та GC-цикли. За даними Google, 2024, інструмент незамінний для діагностики пропущених кадрів, частих збирань сміття та аномалій у UI-потоці.

Головне

  • Systrace — інструмент низькорівневого системного трасування Android, що працює через atrace/ftrace
  • Трейси містять дані CPU, GPU, потоків, SurfaceFlinger та Binder за період до 60 секунд
  • Аналіз дозволяє бачити точну причину пропущених кадрів та блокувань UI-потоку
  • Інтеграція з Android Studio та командним рядком для гнучкого захоплення та автоматизації
  • Perfetto — наступник Systrace на Android 12+, що використовує загальний формат прото-буфера

Що таке Systrace

Systrace — це утиліта командного рядка з Android SDK, яка захоплює та об’єднує дані з кількох джерел трасування ядра (ftrace) та простору користувача (atrace) в єдиний HTML-звіт. Інструмент з’явився в Android 4.1 (Jelly Bean) як заміна старої утиліти traceview для системного профілювання та довгий час залишався стандартним засобом діагностики продуктивності на платформі Android.

Архітектура Systrace

Systrace покладається на ftrace — механізм трасування ядра Linux, доступний в Android починаючи з версії 4.1. При запуску Systrace активує задані категорії трейсів: sched (планувальник завдань), freq (частота CPU), idle (стани простою), workq (робочі черги), binder, gfx та інші. Дані збираються в кільцевий буфер ядра та після зупинки об’єднуються в єдиний файл trace.html, який відкривається в будь-якому браузері.

Systrace в контексті Android Studio

Починаючи з Android Studio 3.1, Systrace вбудовано в CPU Profiler. У режимі «Trace System Calls» профайлер запускає Systrace на підключеному пристрої та відображає результати прямо у вікні Android Studio. Це позбавляє необхідності працювати з командним рядком для базових випадків, але при цьому зберігає повний функціонал — всі категорії трейсів, фільтрацію та інтерактивний таймлайн. Продуктивність пристрою під час трасування знижується незначно, оскільки ftrace спроектований для мінімального навантаження.

Як працює Systrace

Systrace використовує два механізми збору даних: ftrace на рівні ядра для системних подій та atrace у просторі користувача для Android-специфічних міток. ftrace реєструє перемикання контексту (sched_switch), зміни частоти CPU (cpu_frequency), переривання (irq_handler_entry) та інші події. atrace додає мітки з Android-фреймворку — початок та кінець відтворення кадру, виклики SurfaceFlinger та Binder-транзакції.

Ланцюжок відтворення кадру в Systrace

Ключова можливість Systrace — візуалізація ланцюжка відтворення кожного кадру: додаток → BufferQueue → SurfaceFlinger → HWC (композитор) → Дисплей. Якщо на якомусь етапі виникає затримка, Systrace показує точну причину: додаток не встиг підготувати буфер, SurfaceFlinger чекав VSync або HWC не зміг скомпонувати шари. Frame Lifecycle на таймлайні розфарбований за статусами: зелений (вчасно), жовтий (затримка), червоний (пропуск). Ця візуалізація — основний інструмент для оптимізації UI-продуктивності.

Категорії трейсів

Systrace підтримує понад 20 категорій трейсів, кожна з яких включає набір пов’язаних подій. Важливі категорії: gfx (відтворення графіки), input (обробка введення), view (система View), webview (WebView), power (енергоспоживання), hal (апаратна абстракція). Для профілювання ігор корисна категорія gfx з деталізацією до GPU команд через AGI (Android GPU Inspector).

Ключові можливості Systrace

Systrace надає унікальний для Android набір можливостей, які недоступні в інших профайлерах: системний таймлайн, метрики на рівні ядра та автоматичне виявлення проблем.

Інтерактивний таймлайн

HTML-звіт Systrace містить багаторівневий таймлайн, де кожна доріжка відповідає одному процесу або потоку. Можна наближати та віддаляти часову шкалу, клікати на події для перегляду деталей (тривалість, процес-ініціатор, додаткові аргументи). Кольорове кодування допомагає швидко орієнтуватися: зелені блоки — робота процесу, сині — очікування, помаранчеві — переривання, білі — простій.

Alert-повідомлення

Systrace автоматично аналізує трейс та виводить Alert-повідомлення із зазначенням проблемних місць. Наприклад: «Buffer underrun — SurfaceFlinger не встиг отримати буфер до VSync» або «Long Binder transaction — 42 мс у потоці Binder_1». Кожен alert містить посилання на відповідну ділянку таймлайну та рекомендацію щодо виправлення. Це економить години ручного аналізу та є однією з головних причин використовувати Systrace замість ручного логування.

Метод Trace.beginSection

Розробник може додавати власні мітки в Systrace-трейс через API Trace.beginSection та Trace.endSection. Це дозволяє простежити виконання критичних ділянок коду прямо на системному таймлайні — наприклад, відзначити початок та кінець завантаження даних або розрахунку макету. Мітки відображаються як окремі блоки на доріжці додатка та видимі поруч із системними подіями.

КатегоріяДаніТипове застосування
schedПеремикання контексту, idle-станиБлокування потоків, конкуренція
gfxVSync, підготовка буфера, HWCFrame drops, jank
binderBinder-транзакції, latencyIPC-затримки, віддалені виклики
freqЧастота CPU, scaling governorТроттлінг, енергоспоживання
gfx + AGIGPU-команди, шейдериІгрова продуктивність

Як запустити Systrace

Запуск Systrace можливий двома способами: через Android Studio CPU Profiler (режим «Trace System Calls») або через командний рядок за допомогою python-скрипту systrace.py з папки platform-tools. Кожен спосіб має свої сценарії застосування.

Запуск через Android Studio

Підключіть пристрій, відкрийте Profiler (View → Tool Windows → Profiler), виберіть ваш процес, перейдіть на вкладку CPU, виберіть режим «Trace System Calls» та натисніть Record. Через 5–30 секунд натисніть Stop — Android Studio запустить Systrace на пристрої, дочекається завершення та завантажить результат. Обмеження: запис можливий лише поки відкритий Profiler, що незручно для довгих сценаріїв або автоматизації.

Запуск з командного рядка

Для більш гнучкого контролю використовуйте скрипт systrace.py. Вкажіть категорії трейсів, тривалість та ім’я вихідного файлу. Приклад: захоплення даних gfx, input та sched на 10 секунд. Для запуску потрібен Python 2.7+ та підключений пристрій з USB-налагодженням. На Android 12+ Systrace замінено на Perfetto — команда залишається тією ж, але скрипт перенаправляє виклики в perfetto.

bash
# Базовий запуск systrace на 10 секунд
$ python systrace.py \
    --time=10 \
    -o trace.html \
    gfx input sched

# Тільки категорія gfx для аналізу UI
$ python systrace.py \
    --time=5 \
    -t gfx \
    -o ui_trace.html

Налаштування користувацьких міток у коді

Щоб ваш код з’явився на Systrace-таймлайні, обгорніть критичну ділянку в Trace.beginSection / Trace.endSection. Важливо, щоб beginSection та endSection були строго парними — інакше Systrace покаже некоректний таймлайн. У Kotlin зручно використовувати inline-розширення, щоб гарантувати закриття секції навіть при виключенні.

kotlin
import android.os.Trace

fun traceSection(name: String, block: () -> Unit) {
    Trace.beginSection(name)
    try {
        block()
    } finally {
        Trace.endSection()
    }
}

// Використання в коді
traceSection("load_screen_data") {
    fetchData()
    updateUI()
}

Читання HTML-звіту Systrace

Звіт Systrace — це самодостатній HTML-файл, який можна відкрити в Chrome, Edge або Firefox. Він містить інтерактивний таймлайн, панель вибору процесів, список alert-повідомлень та ключові метрики (frame rate, CPU usage, binder transactions). Розуміння структури звіту — ключовий навик для ефективного профілювання.

Таймлайн та навігація

Таймлайн відображає час зліва направо. Кожен процес та потік — окрема доріжка. Клавіші W/S наближають/віддаляють, A/D переміщують за часом. Виділіть область мишею для збільшення ділянки. VSync-лінії показують межі кадрів (кожні 16.6 мс при 60 FPS). Якщо між двома VSync-лініями не вміщається повний цикл відтворення — кадр пропущено. Звертайте увагу на доріжку SurfaceFlinger: якщо вона довго зайнята (помаранчевий блок), значить, композиція шарів гальмує загальне відтворення.

Аналіз alert-повідомлень

Панель Alerts у лівій частині звіту містить автоматично виявлені проблеми. Кожен alert клікабельний — при кліку таймлайн переміщується до проблемного моменту. Найчастіші alert: «Long Sync» (довга синхронізація потоку), «Scheduling Delay» (затримка планувальника), «Buffer Overrun» (переповнення буфера SurfaceFlinger). Якщо alert показує значення ~100 мс для Scheduling Delay, це прямо вказує на те, що UI-потік чекав CPU через фонове навантаження — потрібно перенести важкі обчислення в Worker Thread.

Frame Lifecycle та jank

Для аналізу пропущених кадрів увімкніть доріжки SurfaceFlinger та app.gfx. Кожен кадр відображається як прямокутник: зелений (≤16 мс), жовтий (16–32 мс), червоний (>32 мс). Якщо ви бачите червоний прямокутник на доріжці додатка, клікніть на нього — Systrace покаже, який саме метод (або системний виклик) перевищив ліміт. За даними Google (Android Performance Patterns, 2023), 70% jank-проблем викликані довгим onBindViewHolder або частим GC.

Systrace vs Perfetto: перехід на новий формат

Perfetto — це наступник Systrace, представлений Google в Android 9 (Pie) як експериментальний інструмент і став основним починаючи з Android 12. Perfetto використовує сучасний прото-буферний формат даних, підтримує тривалі сесії (години замість секунд) та має Web UI для перегляду трейсів. Розберемо ключові відмінності двох систем.

КритерійSystracePerfetto
ФорматHTML-звіт (trace.html)Прото-буфер (.trace / .perfetto-trace)
ТривалістьДо 60 секундГодини, гігабайти даних
ІнтерфейсВбудований HTMLWeb UI (ui.perfetto.dev)
КатегоріїФіксовані (ftrace + atrace)Розширювані (SQL-запити до трейсу)
МобільністьТільки AndroidAndroid, Linux, Chrome, Windows

Незважаючи на перехід на Perfetto, навик роботи з Systrace залишається актуальним: на пристроях до Android 11 він використовується за замовчуванням, а Perfetto зберігає зворотну сумісність з Systrace-категоріями. В Android Studio CPU Profiler використовує Perfetto для нових пристроїв та Systrace для старих — прозоро для користувача. Для CI/CD рекомендується використовувати Perfetto, оскільки його формат піддається автоматичній обробці через Python та SQL.

Приклади використання Systrace

Для практичного освоєння Systrace розглянемо два сценарії: пошук причини пропущених кадрів при скролі та діагностика частих GC, які блокують UI-потік.

Пошук jank при прокрутці RecyclerView

Запустіть Systrace з категорією gfx на 10 секунд, прокрутіть список у додатку. У звіті знайдіть ділянки з червоними кадрами. Клікніть на проблемний кадр і подивіться доріжку app — якщо там блок «inflateLayout» або «onBindViewHolder» шириною >16 мс, проблема в роздутті макету або прив’язці даних. Рішення: оптимізуйте макет (reduce deep ViewGroup, ViewStub), винесіть завантаження зображень у Glide з onAttachedToWindow.

Діагностика GC Throughput

Systrace з категорією freq та sched дозволяє побачити, як часто GC-цикли витісняють UI-потік. Знайдіть доріжку додатка на таймлайні — якщо ви бачите періодичні блоки тривалістю 20–50 мс з ім’ям «Concurrent GC», значить, збирач сміття працює занадто часто. Додайте категорію «dalvik» для детального аналізу. Рішення: конвертуйте Bitmap у ByteBuffer, використовуйте пул об’єктів (ObjectPool) для частих алокацій, зменшіть фрагментацію хіпа через аргумент ART.

bash
# Запуск з категоріями для аналізу UI + GC
$ python systrace.py \
    --time=15 \
    -o gc_analysis.html \
    gfx sched dalvik freq

# Захоплення з довжиною 30 секунд для відтворюваного тесту
$ python systrace.py \
    --time=30 \
    --app=com.example.app \
    -o app_trace.html

Часто задавані питання

Чи можна запустити Systrace без root-прав?

Так, для запуску Systrace не потрібен root-доступ. Інструмент використовує atrace, який доступний на будь-якому пристрої з увімкненим USB-налагодженням. Деякі категорії (power, freq) можуть вимагати підпису системи, але основні (gfx, sched, input) працюють на всіх пристроях.

Який максимальний розмір файлу трейсу?

Обмеження в 60 секунд пов’язане з об’ємом кільцевого буфера ftrace — при тривалому записі буфер перезаписується. Perfetto знімає це обмеження: можна записувати години та отримувати трейси розміром до кількох гігабайт з передачею по USB або потоковим записом на диск.

Чому в HTML-звіті немає даних мого додатка?

Можливі причини: додаток не переведено в debuggable-режим, не додано прапорець android:debuggable=«true» у маніфесті, або використовується релізна збірка. Також перевірте, що в категоріях вказано --app=com.example.app — інакше Systrace захоплює лише системні процеси.

Як додати свою мітку в Systrace з native-коду?

Для C++ використовуйте ATRACE_BEGIN та ATRACE_END з бібліотеки libcutils. Підключіть заголовковий файл та обгорніть потрібну ділянку. Мітка з’явиться в Systrace на доріжці вашого процесу, що особливо корисно для аналізу ігрових рушіїв (Unity, Unreal).

Чим замінити Systrace на Android 12+?

На Android 12 та вище використовуйте Perfetto. Встановіть perfetto-агент на пристрій через ADB, запустіть запис у JSON-форматі. Для швидкого перегляду використовуйте Perfetto Web UI (ui.perfetto.dev), а для CI — командний експорт з TraceProcessor на Python.

Підсумки

  • Systrace — системний трасувальник Android, що працює на рівні ядра через ftrace та atrace
  • Показує завантаження CPU, GPU, SurfaceFlinger та Binder-транзакції на єдиному таймлайні
  • HTML-звіт містить автоматичні Alert-повідомлення із зазначенням проблем та рекомендацій
  • Запуск через Android Studio Profiler або командний рядок з systrace.py
  • UI-потік критичний: кожен кадр повинен укладатися в 16.6 мс для 60 FPS
  • На Android 12+ Systrace замінено на Perfetto з підтримкою тривалих сесій та SQL-запитів
  • Рекомендується комбінувати Systrace та Traceview для системного + прикладного профілювання

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також