Systrace — ano ito, tool para sa system tracing ng Android

May-akda: IT Sectr Nai-publish: 2026-03-31 Oras ng pagbabasa: 9 min

Systrace ay isang tool para sa system tracing ng Android na nangongolekta ng data tungkol sa paggana ng Linux kernel, processor, graphics accelerator, at lahat ng system process sa maikling panahon. Hindi tulad ng Traceview, na nakatutok sa mga method sa loob ng application, ipinapakita ng Systrace ang system picture: load ng bawat CPU core, trabaho ng SurfaceFlinger, Binder calls, at GC cycles. Ayon sa Google, 2024, ang tool ay kailangang-kailangan para sa pag-diagnose ng mga skipped frame, madalas na garbage collection, at anomalya sa UI thread.

Mga Pangunahing Punto

  • Systrace — low-level system tracing tool ng Android, gumagana sa pamamagitan ng atrace/ftrace
  • Mga Trace ay naglalaman ng CPU, GPU, thread, SurfaceFlinger, at Binder data para sa panahon hanggang 60 segundo
  • Pagsusuri ay nagbibigay-daan upang makita ang eksaktong dahilan ng mga skipped frame at pag-block ng UI thread
  • Integrasyon sa Android Studio at command line para sa flexible na pag-capture at automation
  • Perfetto — kahalili ng Systrace sa Android 12+, gamit ang shared protobuf format

Ano ang Systrace

Systrace ay isang command line tool mula sa Android SDK na kumukuha at pinagsasama ang data mula sa maraming source ng kernel tracing (ftrace) at user space (atrace) sa isang HTML report. Lumitaw ang tool sa Android 4.1 (Jelly Bean) bilang kapalit ng lumang tool na traceview para sa system profiling at nanatiling standard na tool para sa performance diagnosis sa Android platform sa mahabang panahon.

Arkitektura ng Systrace

Systrace ay umaasa sa ftrace — mekanismo ng kernel tracing ng Linux, available sa Android simula bersyon 4.1. Kapag pinatakbo, ina-activate ng Systrace ang mga tinukoy na kategorya ng trace: sched (task scheduler), freq (CPU frequency), idle (idle states), workq (work queues), binder, gfx, at iba pa. Ang data ay kinokolekta sa ring buffer ng kernel at pagkatapos ihinto ay pinagsasama sa isang file na trace.html, na nabubuksan sa anumang browser.

Systrace sa konteksto ng Android Studio

Mula sa Android Studio 3.1, ang Systrace ay naka-embed sa CPU Profiler. Sa mode na “Trace System Calls”, pinapatakbo ng profiler ang Systrace sa nakakonektang device at ipinapakita ang mga resulta nang direkta sa window ng Android Studio. Tinatanggal nito ang pangangailangang magtrabaho sa command line para sa mga pangunahing kaso, ngunit pinapanatili ang buong functionality — lahat ng kategorya ng trace, pag-filter, at interactive timeline. Ang performance ng device sa panahon ng tracing ay bahagyang bumababa, dahil ang ftrace ay dinisenyo para sa minimal na overhead.

Paano gumagana ang Systrace

Systrace ay gumagamit ng dalawang mekanismo ng pagkuha ng data: ftrace sa kernel level para sa mga system event at atrace sa user space para sa Android-specific na mga marka. Ang ftrace ay nagtatala ng context switches (sched_switch), CPU frequency changes (cpu_frequency), interrupts (irq_handler_entry), at iba pang event. Ang atrace ay nagdaragdag ng mga marka mula sa Android framework — simula at katapusan ng frame rendering, SurfaceFlinger calls, at Binder transactions.

Chain ng frame rendering sa Systrace

Pangunahing tampok ng Systrace — visualization ng rendering chain ng bawat frame: application → BufferQueue → SurfaceFlinger → HWC (composer) → Display. Kung sa anumang yugto ay may pagkaantala, ipinapakita ng Systrace ang eksaktong dahilan: hindi naabutan ng application na ihanda ang buffer, naghintay ang SurfaceFlinger ng VSync, o hindi na-compile ng HWC ang mga layer. Ang Frame Lifecycle sa timeline ay may kulay batay sa status: berde (nasaktong oras), dilaw (pagkaantala), pula (na-skip). Ang visualization na ito ang pangunahing tool sa pag-optimize ng UI performance.

Mga kategorya ng trace

Systrace ay sumusuporta sa higit 20 kategorya ng trace, bawat isa ay may kasamang set ng magkakaugnay na event. Mahahalagang kategorya: gfx (graphics rendering), input (input processing), view (View system), webview (WebView), power (power consumption), hal (hardware abstraction). Para sa pag-profile ng mga laro, kapaki-pakinabang ang kategoryang gfx na may detalye hanggang sa GPU commands sa pamamagitan ng AGI (Android GPU Inspector).

Mga pangunahing tampok ng Systrace

Systrace ay nagbibigay ng natatanging set ng mga tampok para sa Android na hindi available sa ibang profiler: system timeline, kernel-level metrics, at awtomatikong pagtuklas ng problema.

Interactive timeline

Ang HTML report ng Systrace ay naglalaman ng multi-level timeline, kung saan ang bawat lane ay katumbas ng isang process o thread. Maaaring i-zoom in at out ang time scale, i-click ang mga event para makita ang mga detalye (tagal, initiating process, karagdagang argumento). Ang color coding ay tumutulong sa mabilis na oryentasyon: berdeng blocks — trabaho ng process, asul — paghihintay, orange — interrupt, puti — idle.

Mga Alert message

Awtomatikong sinusuri ng Systrace ang trace at nagpapakita ng Alert message na may indikasyon ng mga problemang lugar. Halimbawa: “Buffer underrun — Hindi nakuha ng SurfaceFlinger ang buffer bago ang VSync” o “Long Binder transaction — 42 ms sa thread Binder_1”. Ang bawat alert ay naglalaman ng link sa kaukulang bahagi ng timeline at rekomendasyon para sa pag-aayos. Ito ay nakakatipid ng mga oras ng manu-manong pagsusuri at isa sa mga pangunahing dahilan upang gamitin ang Systrace sa halip na manu-manong pag-log.

Method Trace.beginSection

Ang developer ay maaaring magdagdag ng sariling mga marka sa Systrace trace sa pamamagitan ng API na Trace.beginSection at Trace.endSection. Ito ay nagpapahintulot na subaybayan ang pag-execute ng mga kritikal na bahagi ng code nang direkta sa system timeline — halimbawa, markahan ang simula at katapusan ng pag-load ng data o pagkalkula ng layout. Ang mga marka ay ipinapakita bilang hiwalay na blocks sa lane ng application at nakikita sa tabi ng mga system event.

KategoryaDataKaraniwang gamit
schedContext switches, idle statesPag-block ng thread, contention
gfxVSync, paghahanda ng buffer, HWCFrame drops, jank
binderBinder transactions, latencyIPC delays, remote calls
freqCPU frequency, scaling governorThrottling, power consumption
gfx + AGIGPU commands, shadersGame performance

Paano patakbuhin ang Systrace

Ang pagpapatakbo ng Systrace ay posible sa dalawang paraan: sa pamamagitan ng Android Studio CPU Profiler (mode na “Trace System Calls”) o sa pamamagitan ng command line gamit ang python script na systrace.py mula sa folder na platform-tools. Ang bawat paraan ay may kanya-kanyang senaryo ng paggamit.

Pagpapatakbo sa pamamagitan ng Android Studio

Ikonekta ang device, buksan ang Profiler (View → Tool Windows → Profiler), piliin ang iyong process, pumunta sa tab na CPU, piliin ang mode na “Trace System Calls” at pindutin ang Record. Pagkatapos ng 5–30 segundo pindutin ang Stop — patakbuhin ng Android Studio ang Systrace sa device, maghintay na matapos, at i-load ang resulta. Limitasyon: ang pagre-record ay posible lamang habang bukas ang Profiler, na hindi maginhawa para sa mahabang senaryo o automation.

Pagpapatakbo mula sa command line

Para sa mas flexible na kontrol, gamitin ang script na systrace.py. Tukuyin ang mga kategorya ng trace, tagal, at pangalan ng output file. Halimbawa: pag-capture ng gfx, input, at sched data sa loob ng 10 segundo. Para sa pagpapatakbo, kailangan ang Python 2.7+ at nakakonektang device na may USB debugging. Sa Android 12+, ang Systrace ay pinalitan ng Perfetto — ang command ay nananatiling pareho, ngunit ang script ay nagre-redirect ng mga tawag sa perfetto.

bash
# Pangunahing pagpapatakbo ng systrace sa loob ng 10 segundo
$ python systrace.py \
    --time=10 \
    -o trace.html \
    gfx input sched

# Tanging kategoryang gfx para sa pagsusuri ng UI
$ python systrace.py \
    --time=5 \
    -t gfx \
    -o ui_trace.html

Pag-set up ng custom na mga marka sa code

Upang lumitaw ang iyong code sa Systrace timeline, balutin ang kritikal na bahagi sa Trace.beginSection / Trace.endSection. Mahalaga na ang beginSection at endSection ay mahigpit na naka-pair — kung hindi, magpapakita ang Systrace ng hindi tamang timeline. Sa Kotlin, maginhawang gumamit ng inline-extension upang garantiyahan ang pagsasara ng seksyon kahit na may exception.

kotlin
import android.os.Trace

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

// Paggamit sa code
traceSection("load_screen_data") {
    fetchData()
    updateUI()
}

Pagbasa ng HTML report ng Systrace

Ang report ng Systrace ay isang self-contained na HTML file na maaaring buksan sa Chrome, Edge, o Firefox. Naglalaman ito ng interactive timeline, panel para sa pagpili ng process, listahan ng alert message, at pangunahing metrics (frame rate, CPU usage, Binder transactions). Ang pag-unawa sa istraktura ng report ay isang pangunahing kasanayan para sa epektibong profiling.

Timeline at navigation

Ang timeline ay nagpapakita ng oras mula kaliwa hanggang kanan. Bawat process at thread — hiwalay na lane. Ang mga key na W/S ay nag-zoom in/out, A/D ay gumagalaw sa oras. Pumili ng lugar gamit ang mouse para palakihin ang bahagi. Ang VSync lines ay nagpapakita ng mga hangganan ng frame (bawat 16.6 ms sa 60 FPS). Kung sa pagitan ng dalawang VSync lines ay hindi kasya ang buong rendering cycle — ang frame ay na-skip. Bigyang-pansin ang SurfaceFlinger lane: kung matagal itong abala (orange block), nangangahulugan na ang layer composition ay nagpapabagal sa pangkalahatang rendering.

Pagsusuri ng alert message

Ang panel na Alerts sa kaliwang bahagi ng report ay naglalaman ng mga awtomatikong natuklasang problema. Ang bawat alert ay naki-click — kapag na-click, ang timeline ay lumilipat sa problemang sandali. Ang pinakakaraniwang alert: “Long Sync” (mahabang synchronization ng thread), “Scheduling Delay” (pagkaantala ng scheduler), “Buffer Overrun” (pag-apaw ng buffer ng SurfaceFlinger). Kung ang alert ay nagpapakita ng halagang mga 100 ms para sa Scheduling Delay, ito ay direktang nagpapahiwatig na ang UI thread ay naghintay ng CPU dahil sa background load — kailangang ilipat ang mabibigat na computation sa Worker Thread.

Frame Lifecycle at jank

Para sa pagsusuri ng mga skipped frame, i-activate ang SurfaceFlinger at app.gfx lanes. Ang bawat frame ay ipinapakita bilang isang parihaba: berde (≤16 ms), dilaw (16–32 ms), pula (>32 ms). Kung makakita ka ng pulang parihaba sa app lane, i-click ito — ipapakita ng Systrace kung aling method (o system call) ang lumampas sa limitasyon. Ayon sa Google (Android Performance Patterns, 2023), 70% ng mga problema sa jank ay sanhi ng mahabang onBindViewHolder o madalas na GC.

Systrace vs Perfetto: paglipat sa bagong format

Perfetto ay ang kahalili ng Systrace, ipinakilala ng Google sa Android 9 (Pie) bilang experimental tool at naging pangunahing tool simula sa Android 12. Ang Perfetto ay gumagamit ng modernong protobuf data format, sumusuporta sa mahabang session (oras imbes na segundo), at may Web UI para sa pagtingin ng mga trace. Talakayin natin ang mga pangunahing pagkakaiba ng dalawang sistema.

KategoryaSystracePerfetto
FormatHTML report (trace.html)Protobuf (.trace / .perfetto-trace)
TagalHanggang 60 segundoOras, gigabytes ng data
InterfaceBuilt-in na HTMLWeb UI (ui.perfetto.dev)
KategoryaFixed (ftrace + atrace)Napapalawak (SQL queries sa trace)
MobilityAndroid langAndroid, Linux, Chrome, Windows

Sa kabila ng paglipat sa Perfetto, ang kasanayan sa pagtatrabaho sa Systrace ay nananatiling may kaugnayan: sa mga device hanggang Android 11 ito ay ginagamit bilang default, at pinapanatili ng Perfetto ang backward compatibility sa Systrace categories. Ang Android Studio CPU Profiler ay gumagamit ng Perfetto para sa mga bagong device at Systrace para sa luma — transparent para sa user. Para sa CI/CD, inirerekomenda ang paggamit ng Perfetto dahil ang format nito ay angkop para sa awtomatikong pagproseso sa pamamagitan ng Python at SQL.

Mga halimbawa ng paggamit ng Systrace

Para sa praktikal na pag-master ng Systrace, talakayin natin ang dalawang senaryo: paghahanap ng dahilan ng mga skipped frame habang nag-sscroll at pag-diagnose ng madalas na GC na bumabara sa UI thread.

Paghahanap ng jank habang nag-sscroll ng RecyclerView

Patakbuhin ang Systrace na may kategoryang gfx sa loob ng 10 segundo, i-scroll ang listahan sa application. Sa report, hanapin ang mga bahaging may pulang frame. I-click ang problemang frame at tingnan ang app lane — kung may block na “inflateLayout” o “onBindViewHolder” na may lapad na >16 ms, ang problema ay nasa pagpapalaki ng layout o pag-binding ng data. Solusyon: i-optimize ang layout (bawasan ang lalim ng ViewGroup, ViewStub), ilipat ang pag-load ng imahe sa Glide na may onAttachedToWindow.

Diagnosis ng GC Throughput

Ang Systrace na may kategoryang freq at sched ay nagpapahintulot na makita kung gaano kadalas itinutulak ng GC cycles ang UI thread. Hanapin ang app lane sa timeline — kung makakita ka ng periodic blocks na may tagal na 20–50 ms na may pangalang “Concurrent GC”, nangangahulugan na ang garbage collector ay gumagana nang sobrang dalas. Idagdag ang kategoryang “dalvik” para sa detalyadong pagsusuri. Solusyon: i-convert ang Bitmap sa ByteBuffer, gumamit ng object pool (ObjectPool) para sa mga madalas na alokasyon, bawasan ang heap fragmentation sa pamamagitan ng ART argument.

bash
# Pagpapatakbo na may mga kategorya para sa pagsusuri ng UI + GC
$ python systrace.py \
    --time=15 \
    -o gc_analysis.html \
    gfx sched dalvik freq

# Pag-capture na may tagal na 30 segundo para sa reproducible na test
$ python systrace.py \
    --time=30 \
    --app=com.example.app \
    -o app_trace.html

Mga Madalas Itanong

Maaari bang patakbuhin ang Systrace nang walang root access?

Oo, para sa pagpapatakbo ng Systrace ay hindi kinakailangan ang root access. Ang tool ay gumagamit ng atrace, na available sa anumang device na may naka-activate na USB debugging. Ang ilang kategorya (power, freq) ay maaaring mangailangan ng system signature, ngunit ang mga pangunahing (gfx, sched, input) ay gumagana sa lahat ng device.

Ano ang maximum na laki ng trace file?

Ang limitasyong 60 segundo ay may kaugnayan sa volume ng ftrace ring buffer — sa mahabang pag-record, ang buffer ay na-o-overwrite. Tinatanggal ng Perfetto ang limitasyong ito: maaaring mag-record ng mga oras at makakuha ng mga trace na may sukat hanggang ilang gigabytes na may transfer sa pamamagitan ng USB o streaming write sa disk.

Bakit walang data ng aking application sa HTML report?

Mga posibleng dahilan: ang application ay hindi na-convert sa debuggable mode, hindi naidagdag ang flag na android:debuggable=”true” sa manifest, o gumagamit ng release build. Suriin din kung sa mga kategorya ay tinukoy ang --app=com.example.app — kung hindi, ang Systrace ay kumukuha lamang ng mga system process.

Paano magdagdag ng sariling marka sa Systrace mula sa native code?

Para sa C++, gamitin ang ATRACE_BEGIN at ATRACE_END mula sa library na libcutils. Isama ang header file at balutin ang nais na bahagi. Ang marka ay lilitaw sa Systrace sa lane ng iyong process, na lalong kapaki-pakinabang para sa pagsusuri ng game engines (Unity, Unreal).

Ano ang kapalit ng Systrace sa Android 12+?

Sa Android 12 at mas bago, gamitin ang Perfetto. I-install ang perfetto agent sa device sa pamamagitan ng ADB, simulan ang pag-record sa JSON format. Para sa mabilis na pagtingin, gamitin ang Perfetto Web UI (ui.perfetto.dev), at para sa CI — command export na may TraceProcessor sa Python.

Buod

  • Systrace — system tracer ng Android, gumagana sa kernel level sa pamamagitan ng ftrace at atrace
  • Ipinapakita ang load ng CPU, GPU, SurfaceFlinger at Binder transactions sa isang timeline
  • Ang HTML report ay naglalaman ng awtomatikong Alert message na may indikasyon ng mga problema at rekomendasyon
  • Pagpapatakbo sa pamamagitan ng Android Studio Profiler o command line na may systrace.py
  • Ang UI thread ay kritikal: bawat frame ay dapat magkasya sa 16.6 ms para sa 60 FPS
  • Sa Android 12+, ang Systrace ay pinalitan ng Perfetto na may suporta para sa mahabang session at SQL queries
  • Inirerekomenda ang pagsasama ng Systrace at Traceview para sa system at application profiling

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din