Systrace একটি Android সিস্টেম ট্রেসিং টুল যা লিনাক্স কার্নেল, CPU, GPU এবং সমস্ত সিস্টেম প্রক্রিয়া সম্পর্কে অল্প সময়ের মধ্যে ডেটা সংগ্রহ করে। Traceview-এর বিপরীতে, যা অ্যাপ্লিকেশনের ভিতরে পদ্ধতিগুলিতে ফোকাস করে, Systrace সিস্টেম চিত্র দেখায়: প্রতিটি CPU কোরের লোড, SurfaceFlinger অপারেশন, Binder কল এবং GC চক্র। Google, 2024 অনুসারে, টুলটি ড্রপ করা ফ্রেম, ঘন ঘন আবর্জনা সংগ্রহ এবং UI থ্রেডে অসঙ্গতি নির্ণয়ের জন্য অপরিহার্য।
মূল বিষয়
Systrace Android SDK-এর একটি কমান্ড-লাইন ইউটিলিটি যা একক HTML রিপোর্টে একাধিক কার্নেল ট্রেসিং (ftrace) এবং ইউজার-স্পেস (atrace) উৎস থেকে ডেটা ক্যাপচার এবং একত্রিত করে। টুলটি Android 4.1 (Jelly Bean)-এ সিস্টেম প্রোফাইলিংয়ের জন্য পুরানো traceview ইউটিলিটির প্রতিস্থাপন হিসাবে আবির্ভূত হয়েছিল এবং দীর্ঘ সময় ধরে Android প্ল্যাটফর্মে মানক কর্মক্ষমতা নির্ণয় টুল ছিল।
Systrace ftrace-এর উপর নির্ভর করে — একটি লিনাক্স কার্নেল ট্রেসিং মেকানিজম যা Android সংস্করণ 4.1 থেকে উপলব্ধ। যখন Systrace শুরু হয়, এটি নির্দিষ্ট ট্রেস ক্যাটাগরি সক্রিয় করে: sched (টাস্ক শিডিউলার), freq (CPU ফ্রিকোয়েন্সি), idle (নিষ্ক্রিয় অবস্থা), workq (ওয়ার্ক কিউ), binder, gfx এবং অন্যান্য। ডেটা কার্নেলের রিং বাফারে সংগ্রহ করা হয় এবং বন্ধ করার পরে একটি একক trace.html ফাইলে একত্রিত করা হয় যা যেকোনো ব্রাউজারে খোলা যেতে পারে।
Android Studio 3.1 থেকে শুরু করে, Systrace CPU Profiler-এ নির্মিত। “Trace System Calls” মোডে, প্রোফাইলার সংযুক্ত ডিভাইসে Systrace চালায় এবং ফলাফল সরাসরি Android Studio উইন্ডোতে প্রদর্শন করে। এটি মৌলিক ক্ষেত্রে কমান্ড লাইনের সাথে কাজ করার প্রয়োজনীয়তা দূর করে সম্পূর্ণ কার্যকারিতা — সমস্ত ট্রেস ক্যাটাগরি, ফিল্টারিং এবং ইন্টারেক্টিভ টাইমলাইন — বজায় রেখে। ট্রেসিংয়ের সময় ডিভাইস কর্মক্ষমতা নগণ্যভাবে হ্রাস পায় কারণ ftrace ন্যূনতম ওভারহেডের জন্য ডিজাইন করা হয়েছে।
Systrace ডেটা সংগ্রহের দুটি মেকানিজম ব্যবহার করে: সিস্টেম ইভেন্টের জন্য কার্নেল স্তরে ftrace এবং Android-নির্দিষ্ট ট্যাগের জন্য ইউজার স্পেসে atrace। ftrace কনটেক্সট সুইচ (sched_switch), CPU ফ্রিকোয়েন্সি পরিবর্তন (cpu_frequency), ইন্টারাপ্ট (irq_handler_entry) এবং অন্যান্য ইভেন্ট রেকর্ড করে। atrace Android ফ্রেমওয়ার্ক থেকে ট্যাগ যোগ করে — ফ্রেম রেন্ডারিংয়ের শুরু এবং শেষ, SurfaceFlinger কল এবং Binder লেনদেন।
Systrace-এর মূল বৈশিষ্ট্য হল প্রতিটি ফ্রেমের রেন্ডারিং পাইপলাইনের ভিজুয়ালাইজেশন: অ্যাপ্লিকেশন → BufferQueue → SurfaceFlinger → HWC (কম্পোজার) → ডিসপ্লে। যদি কোনো পর্যায়ে বিলম্ব ঘটে, Systrace সঠিক কারণ দেখায়: অ্যাপ্লিকেশন সময়মতো বাফার প্রস্তুত করেনি, SurfaceFlinger VSync-এর জন্য অপেক্ষা করছিল, বা HWC স্তরগুলি কম্পোজ করতে পারেনি। টাইমলাইনে ফ্রেম লাইফসাইকেল অবস্থা অনুযায়ী রঙ-কোডেড: সবুজ (সময়মতো), হলুদ (বিলম্বিত), লাল (ড্রপ)। এই ভিজুয়ালাইজেশন UI কর্মক্ষমতা অপ্টিমাইজ করার প্রাথমিক টুল।
Systrace 20টিরও বেশি ট্রেস ক্যাটাগরি সমর্থন করে, প্রতিটিতে সম্পর্কিত ইভেন্টের একটি সেট অন্তর্ভুক্ত। গুরুত্বপূর্ণ ক্যাটাগরিগুলির মধ্যে রয়েছে: gfx (গ্রাফিক্স রেন্ডারিং), input (ইনপুট প্রসেসিং), view (View সিস্টেম), webview (WebView), power (বিদ্যুৎ খরচ), hal (হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার)। গেম প্রোফাইলিংয়ের জন্য, AGI (Android GPU Inspector)-এর মাধ্যমে GPU কমান্ড বিশদ সহ gfx ক্যাটাগরি উপযোগী।
Systrace Android-এর জন্য ক্ষমতার একটি অনন্য সেট সরবরাহ করে যা অন্যান্য প্রোফাইলারে অনুপলব্ধ: সিস্টেম টাইমলাইন, কার্নেল-স্তরের মেট্রিক্স এবং স্বয়ংক্রিয় সমস্যা সনাক্তকরণ।
Systrace HTML রিপোর্টে একটি বহু-স্তরের টাইমলাইন থাকে যেখানে প্রতিটি লেন একটি প্রক্রিয়া বা থ্রেডের সাথে মিলে যায়। আপনি সময় স্কেলে জুম ইন এবং আউট করতে পারেন, বিশদ দেখতে ইভেন্টে ক্লিক করতে পারেন (সময়কাল, সূচনাকারী প্রক্রিয়া, অতিরিক্ত আর্গুমেন্ট)। রঙ কোডিং দ্রুত নেভিগেট করতে সাহায্য করে: সবুজ ব্লক — প্রক্রিয়া চলছে, নীল — অপেক্ষা করছে, কমলা — ইন্টারাপ্ট, সাদা — নিষ্ক্রিয়।
Systrace স্বয়ংক্রিয়ভাবে ট্রেস বিশ্লেষণ করে এবং সমস্যা এলাকা নির্দেশ করে সতর্কতা বার্তা প্রদর্শন করে। উদাহরণস্বরূপ: “Buffer underrun — SurfaceFlinger VSync-এর আগে বাফার পায়নি” বা “Long Binder transaction — থ্রেড Binder_1-এ 42 ms”। প্রতিটি সতর্কতায় টাইমলাইনের সংশ্লিষ্ট বিভাগের একটি লিঙ্ক এবং সমাধানের জন্য একটি সুপারিশ থাকে। এটি ম্যানুয়াল বিশ্লেষণের ঘন্টা বাঁচায় এবং ম্যানুয়াল লগিংয়ের পরিবর্তে Systrace ব্যবহার করার একটি প্রধান কারণ।
ডেভেলপাররা Trace.beginSection এবং Trace.endSection API-এর মাধ্যমে Systrace ট্রেসে কাস্টম ট্যাগ যোগ করতে পারেন। এটি সরাসরি সিস্টেম টাইমলাইনে গুরুত্বপূর্ণ কোড বিভাগের নির্বাহ ট্রেস করতে দেয় — উদাহরণস্বরূপ, ডেটা লোডিং বা লেআউট গণনার শুরু এবং শেষ চিহ্নিত করা। ট্যাগগুলি অ্যাপ্লিকেশন লেনে পৃথক ব্লক হিসাবে উপস্থিত হয় এবং সিস্টেম ইভেন্টের পাশাপাশি দৃশ্যমান হয়।
| ক্যাটাগরি | ডেটা | সাধারণ ব্যবহার |
|---|---|---|
| sched | কনটেক্সট সুইচ, নিষ্ক্রিয় অবস্থা | থ্রেড ব্লকেজ, প্রতিযোগিতা |
| gfx | VSync, বাফার প্রস্তুতি, HWC | ফ্রেম ড্রপ, jank |
| binder | Binder লেনদেন, লেটেন্সি | IPC বিলম্ব, দূরবর্তী কল |
| freq | CPU ফ্রিকোয়েন্সি, স্কেলিং গভর্নর | থ্রটলিং, বিদ্যুৎ খরচ |
| gfx + AGI | GPU কমান্ড, শেডার | গেম কর্মক্ষমতা |
Systrace চালানো দুটি উপায়ে সম্ভব: Android Studio CPU Profiler (“Trace System Calls” মোড) এর মাধ্যমে বা platform-tools ফোল্ডার থেকে systrace.py Python স্ক্রিপ্ট ব্যবহার করে কমান্ড লাইনের মাধ্যমে। প্রতিটি পদ্ধতির নিজস্ব ব্যবহারের ক্ষেত্র রয়েছে।
ডিভাইস সংযোগ করুন, Profiler খুলুন (View → Tool Windows → Profiler), আপনার প্রক্রিয়া নির্বাচন করুন, CPU ট্যাবে যান, “Trace System Calls” মোড নির্বাচন করুন এবং Record-এ ক্লিক করুন। 5–30 সেকেন্ড পর, Stop-এ ক্লিক করুন — Android Studio ডিভাইসে Systrace চালাবে, সম্পূর্ণ হওয়ার অপেক্ষা করবে এবং ফলাফল লোড করবে। সীমাবদ্ধতা: রেকর্ডিং শুধুমাত্র Profiler খোলা থাকা অবস্থায় সম্ভব, যা দীর্ঘ দৃশ্যকল্প বা অটোমেশনের জন্য অসুবিধাজনক।
আরও নমনীয় নিয়ন্ত্রণের জন্য, systrace.py স্ক্রিপ্ট ব্যবহার করুন। ট্রেস ক্যাটাগরি, সময়কাল এবং আউটপুট ফাইলের নাম নির্দিষ্ট করুন। উদাহরণ: 10 সেকেন্ডের জন্য gfx, input এবং sched ডেটা ক্যাপচার করা। চালানোর জন্য Python 2.7+ এবং USB ডিবাগিং সক্ষম সহ একটি সংযুক্ত ডিভাইস প্রয়োজন। Android 12+-এ, Systrace Perfetto-তে প্রতিস্থাপিত হয়েছে — কমান্ড একই থাকে, কিন্তু স্ক্রিপ্ট কলগুলি perfetto-তে পুনঃনির্দেশ করে।
# systrace-এর মৌলিক 10 সেকেন্ডের রান
$ python systrace.py \
--time=10 \
-o trace.html \
gfx input sched
# UI বিশ্লেষণের জন্য শুধুমাত্র gfx ক্যাটাগরি
$ python systrace.py \
--time=5 \
-t gfx \
-o ui_trace.html
আপনার কোড Systrace টাইমলাইনে প্রদর্শিত করতে, গুরুত্বপূর্ণ বিভাগটি Trace.beginSection / Trace.endSection দিয়ে মোড়ান। এটি গুরুত্বপূর্ণ যে beginSection এবং endSection কঠোরভাবে জোড়া হয় — অন্যথায় Systrace ভুল টাইমলাইন দেখাবে। 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()
}
Systrace রিপোর্ট একটি স্ব-সম্পূর্ণ HTML ফাইল যা Chrome, Edge বা Firefox-এ খোলা যেতে পারে। এতে একটি ইন্টারেক্টিভ টাইমলাইন, একটি প্রক্রিয়া নির্বাচন প্যানেল, সতর্কতা বার্তার একটি তালিকা এবং মূল মেট্রিক্স (ফ্রেম রেট, CPU ব্যবহার, Binder লেনদেন) অন্তর্ভুক্ত রয়েছে। রিপোর্ট的结构 বোঝা কার্যকর প্রোফাইলিংয়ের জন্য একটি মূল দক্ষতা।
টাইমলাইন সময় বাম থেকে ডানে প্রদর্শন করে। প্রতিটি প্রক্রিয়া এবং থ্রেড একটি পৃথক লেন। W/S কী জুম ইন/আউট করে, A/D সময়ের মাধ্যমে সরানো। একটি বিভাগ জুম করতে মাউস দিয়ে একটি এলাকা নির্বাচন করুন। VSync রেখা ফ্রেম সীমানা দেখায় (60 FPS-এ প্রতি 16.6 ms)। যদি দুটি VSync রেখার মধ্যে সম্পূর্ণ রেন্ডারিং চক্র ফিট না হয় — ফ্রেম ড্রপ হয়। SurfaceFlinger লেনে মনোযোগ দিন: যদি এটি দীর্ঘ সময় ধরে ব্যস্ত থাকে (কমলা ব্লক), স্তর কম্পোজিশন সামগ্রিক রেন্ডারিংকে ধীর করছে।
রিপোর্টের বাম দিকে সতর্কতা প্যানেলে স্বয়ংক্রিয়ভাবে সনাক্ত করা সমস্যা থাকে। প্রতিটি সতর্কতা ক্লিকযোগ্য — ক্লিক করলে টাইমলাইন সমস্যাযুক্ত মুহূর্তে চলে যায়। সবচেয়ে সাধারণ সতর্কতা: “Long Sync” (দীর্ঘ থ্রেড সিঙ্ক্রোনাইজেশন), “Scheduling Delay” (শিডিউলার বিলম্ব), “Buffer Overrun” (SurfaceFlinger বাফার ওভারফ্লো)। যদি একটি সতর্কতা Scheduling Delay-এর জন্য ~100 ms মান দেখায়, এটি সরাসরি নির্দেশ করে যে UI থ্রেড ব্যাকগ্রাউন্ড লোডের কারণে CPU-র জন্য অপেক্ষা করছিল — ভারী গণনাগুলি ওয়ার্কার থ্রেডে সরানো উচিত।
ড্রপ করা ফ্রেম বিশ্লেষণ করতে, SurfaceFlinger এবং app.gfx লেন সক্রিয় করুন। প্রতিটি ফ্রেম একটি আয়তক্ষেত্র হিসাবে প্রদর্শিত হয়: সবুজ (≤16 ms), হলুদ (16–32 ms), লাল (>32 ms)। যদি আপনি অ্যাপ লেনে লাল আয়তক্ষেত্র দেখতে পান, এটিতে ক্লিক করুন — Systrace দেখাবে কোন নির্দিষ্ট পদ্ধতি (বা সিস্টেম কল) সীমা অতিক্রম করেছে। Google (Android Performance Patterns, 2023) অনুসারে, 70% jank সমস্যা ধীর onBindViewHolder বা ঘন ঘন GC-র কারণে ঘটে।
Perfetto হল Systrace-এর উত্তরসূরি, যা Google Android 9 (Pie)-এ একটি পরীক্ষামূলক টুল হিসাবে প্রবর্তন করেছিল এবং Android 12 থেকে শুরু করে প্রাথমিক সমাধান হয়ে ওঠে। Perfetto একটি আধুনিক প্রোটোবাফ ডেটা ফরম্যাট ব্যবহার করে, দীর্ঘ সেশন সমর্থন করে (সেকেন্ডের পরিবর্তে ঘন্টা), এবং ট্রেস দেখার জন্য ওয়েব UI রয়েছে। আসুন দুটি সিস্টেমের মধ্যে মূল পার্থক্যগুলি পরীক্ষা করি।
| মানদণ্ড | Systrace | Perfetto |
|---|---|---|
| ফরম্যাট | HTML রিপোর্ট (trace.html) | প্রোটোবাফ (.trace / .perfetto-trace) |
| সময়কাল | 60 সেকেন্ড পর্যন্ত | ঘন্টা, গিগাবাইট ডেটা |
| ইন্টারফেস | অন্তর্নির্মিত HTML | ওয়েব UI (ui.perfetto.dev) |
| ক্যাটাগরি | স্থির (ftrace + atrace) | প্রসারণযোগ্য (ট্রেসে SQL ক্যোয়ারী) |
| গতিশীলতা | শুধুমাত্র Android | Android, Linux, Chrome, Windows |
Perfetto-তে রূপান্তর সত্ত্বেও, Systrace দক্ষতা প্রাসঙ্গিক রয়ে গেছে: Android 11 এবং তার নীচের ডিভাইসগুলিতে, এটি ডিফল্টরূপে ব্যবহৃত হয়, এবং Perfetto Systrace ক্যাটাগরির সাথে পশ্চাদগামী সামঞ্জস্য বজায় রাখে। Android Studio CPU Profiler-এ, নতুন ডিভাইসের জন্য Perfetto এবং পুরানোগুলির জন্য Systrace ব্যবহার করা হয় — ব্যবহারকারীর জন্য স্বচ্ছ। CI/CD-র জন্য, Perfetto সুপারিশ করা হয় কারণ এর ফরম্যাট Python এবং SQL-এর মাধ্যমে স্বয়ংক্রিয়ভাবে প্রক্রিয়া করা যেতে পারে।
ব্যবহারিকভাবে Systrace আয়ত্ত করতে, আসুন দুটি দৃশ্যকল্প বিবেচনা করি: স্ক্রোলিংয়ের সময় ড্রপ করা ফ্রেমের কারণ খুঁজে বের করা এবং ঘন ঘন GC নির্ণয় করা যা UI থ্রেড ব্লক করে।
gfx ক্যাটাগরি সহ 10 সেকেন্ডের জন্য Systrace চালান, অ্যাপে তালিকা স্ক্রোল করুন। রিপোর্টে, লাল ফ্রেম সহ বিভাগগুলি খুঁজুন। সমস্যাযুক্ত ফ্রেমে ক্লিক করুন এবং অ্যাপ লেন দেখুন — যদি 16 ms-এর চেয়ে চওড়া “inflateLayout” বা “onBindViewHolder” ব্লক থাকে, সমস্যাটি লেআউট ইনফ্লেশন বা ডেটা বাইন্ডিংয়ে। সমাধান: লেআউট অপ্টিমাইজ করুন (গভীর ViewGroup হ্রাস করুন, ViewStub), onAttachedToWindow-এর সাথে Glide-এ ইমেজ লোডিং স্থানান্তর করুন।
freq এবং sched ক্যাটাগরি সহ Systrace আপনাকে দেখতে দেয় যে GC চক্র কতবার UI থ্রেডকে প্রিম্প্ট করে। টাইমলাইনে অ্যাপ্লিকেশন লেন খুঁজুন — যদি আপনি “Concurrent GC” নামক 20–50 ms স্থায়ী পর্যায়ক্রমিক ব্লক দেখতে পান, আবর্জনা সংগ্রহকারী খুব ঘন ঘন চলছে। বিস্তারিত বিশ্লেষণের জন্য “dalvik” ক্যাটাগরি যোগ করুন। সমাধান: Bitmap-কে ByteBuffer-এ রূপান্তর করুন, ঘন ঘন বরাদ্দের জন্য অবজেক্ট পুল (ObjectPool) ব্যবহার করুন, ART আর্গুমেন্টের মাধ্যমে হিপ ফ্র্যাগমেন্টেশন হ্রাস করুন।
# 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 চালানোর জন্য রুট অ্যাক্সেসের প্রয়োজন নেই। টুলটি atrace ব্যবহার করে, যা USB ডিবাগিং সক্ষম যেকোনো ডিভাইসে উপলব্ধ। কিছু ক্যাটাগরি (power, freq) সিস্টেম স্বাক্ষরের প্রয়োজন হতে পারে, তবে প্রধান ক্যাটাগরি (gfx, sched, input) সব ডিভাইসে কাজ করে।
60 সেকেন্ডের সীমা ftrace রিং বাফার ক্ষমতার সাথে সম্পর্কিত — দীর্ঘ রেকর্ডিংয়ের সময়, বাফার ওভাররাইট হয়। Perfetto এই সীমা সরিয়ে দেয়: আপনি ঘন্টার জন্য রেকর্ড করতে পারেন এবং USB স্থানান্তর বা ডিস্কে স্ট্রিমিংয়ের মাধ্যমে একাধিক গিগাবাইট পর্যন্ত ট্রেস পেতে পারেন।
সম্ভাব্য কারণ: অ্যাপ ডিবাগেবল মোডে নেই, ম্যানিফেস্টে android:debuggable=“true” ফ্ল্যাগ সেট করা নেই, বা রিলিজ বিল্ড ব্যবহার করা হচ্ছে। এছাড়াও ক্যাটাগরিতে --app=com.example.app নির্দিষ্ট করা হয়েছে কিনা পরীক্ষা করুন — অন্যথায় Systrace শুধুমাত্র সিস্টেম প্রক্রিয়া ক্যাপচার করে।
C++-এর জন্য, libcutils লাইব্রেরি থেকে ATRACE_BEGIN এবং ATRACE_END ব্যবহার করুন। হেডার ফাইল অন্তর্ভুক্ত করুন এবং পছন্দসই বিভাগ মোড়ান। ট্যাগটি আপনার প্রক্রিয়া লেনে Systrace-এ প্রদর্শিত হবে, যা বিশেষত গেম ইঞ্জিন (Unity, Unreal) বিশ্লেষণের জন্য উপযোগী।
Android 12 এবং তার উপরে, Perfetto ব্যবহার করুন। ADB-এর মাধ্যমে ডিভাইসে perfetto এজেন্ট ইনস্টল করুন, JSON ফরম্যাটে রেকর্ডিং শুরু করুন। দ্রুত দেখার জন্য, Perfetto ওয়েব UI (ui.perfetto.dev) ব্যবহার করুন, এবং CI-র জন্য — Python-এ TraceProcessor সহ কমান্ড-লাইন এক্সপোর্ট।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন