Systrace — ما هي أداة تتبع نظام Android

المؤلف: IT Sectr نُشر: 2026-03-31 وقت القراءة: 9 دق

Systrace هي أداة تتبع نظام Android تجمع بيانات حول نواة Linux ومعالج CPU ومسرع الرسومات وجميع عمليات النظام خلال فترة زمنية قصيرة. على عكس 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+، باستخدام تنسيق protobuf المشترك

ما هو 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 لم يستطع تركيب الطبقات. دورة حياة الإطار على الجدول الزمني ملونة حسب الحالة: أخضر (في الوقت المحدد)، أصفر (متأخر)، أحمر (مفقود). هذا التصور هو الأداة الأساسية لتحسين أداء UI.

فئات التتبع

Systrace يدعم أكثر من 20 فئة تتبع، كل منها تتضمن مجموعة من الأحداث ذات الصلة. الفئات المهمة تشمل: gfx (عرض الرسومات)، input (معالجة الإدخال)، view (نظام View)، webview (WebView)، power (استهلاك الطاقة)، hal (طبقة تجريد الأجهزة). لتحليل أداء الألعاب، فئة gfx مع تفاصيل أوامر GPU عبر AGI (Android GPU Inspector) مفيدة.

الميزات الرئيسية لـ Systrace

Systrace يوفر مجموعة فريدة من القدرات لنظام Android غير متوفرة في المحللات الأخرى: جدول زمني للنظام، مقاييس على مستوى النواة، واكتشاف تلقائي للمشاكل.

جدول زمني تفاعلي

تقرير HTML لـ Systrace يحتوي على جدول زمني متعدد المستويات حيث كل مسار يتوافق مع عملية أو سلسلة واحدة. يمكنك التكبير والتصغير على المقياس الزمني، النقر على الأحداث لعرض التفاصيل (المدة، العملية البادئة، وسائط إضافية). ترميز الألوان يساعد على التنقل بسرعة: الكتل الخضراء — عملية قيد التنفيذ، الزرقاء — في انتظار، البرتقالية — مقاطعة، البيضاء — خاملة.

رسائل التنبيه

Systrace يحلل التتبع تلقائيًا ويعرض رسائل تنبيه تشير إلى مناطق المشاكل. على سبيل المثال: «Buffer underrun — SurfaceFlinger لم يستلم المخزن المؤقت قبل VSync» أو «Long Binder transaction — 42 مللي ثانية في سلسلة Binder_1». كل تنبيه يحتوي على رابط للقسم المقابل من الجدول الزمني وتوصية للإصلاح. هذا يوفر ساعات من التحليل اليدوي وهو أحد الأسباب الرئيسية لاستخدام Systrace بدلاً من التسجيل اليدوي.

طريقة Trace.beginSection

يمكن للمطورين إضافة علامات مخصصة إلى تتبع Systrace عبر API Trace.beginSection و Trace.endSection. هذا يسمح بتتبع تنفيذ أقسام الكود الحرجة مباشرة على الجدول الزمني للنظام — على سبيل المثال، تحديد بداية ونهاية تحميل البيانات أو حساب التخطيط. تظهر العلامات ككتل منفصلة على مسار التطبيق وتكون مرئية بجانب أحداث النظام.

الفئةالبياناتالاستخدام النموذجي
schedتبديلات السياق، حالات الخمولحظر السلاسل، التنافس
gfxVSync، تحضير المخزن المؤقت، HWCفقدان الإطارات، jank
binderمعاملات Binder، زمن الوصولتأخيرات IPC، استدعاءات بعيدة
freqتردد CPU، محرك التحجيمالاختناق الحراري، استهلاك الطاقة
gfx + AGIأوامر GPU، التظليلأداء الألعاب

كيفية تشغيل Systrace

تشغيل Systrace ممكن بطريقتين: عبر CPU Profiler في Android Studio (وضع «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. يحتوي على جدول زمني تفاعلي، لوحة اختيار العمليات، قائمة رسائل التنبيه والمقاييس الرئيسية (معدل الإطارات، استخدام CPU، معاملات Binder). فهم هيكل التقرير هو مهارة رئيسية للتحليل الفعال للأداء.

الجدول الزمني والتنقل

الجدول الزمني يعرض الوقت من اليسار إلى اليمين. كل عملية وسلسلة هي مسار منفصل. مفاتيح W/S للتكبير/التصغير، A/D للتحرك عبر الوقت. حدد منطقة بالماوس لتكبير قسم. خطوط VSync تظهر حدود الإطارات (كل 16.6 مللي ثانية عند 60 FPS). إذا كانت دورة العرض الكاملة لا تتسع بين خطي VSync — يتم فقدان الإطار. انتبه إلى مسار SurfaceFlinger: إذا كان مشغولاً لفترة طويلة (كتلة برتقالية)، فإن تركيب الطبقات يبطئ العرض العام.

تحليل رسائل التنبيه

لوحة التنبيهات على الجانب الأيسر من التقرير تحتوي على المشاكل المكتشفة تلقائيًا. كل تنبيه قابل للنقر — عند النقر، ينتقل الجدول الزمني إلى اللحظة المشكلة. التنبيهات الأكثر شيوعًا: «Long Sync» (مزامنة طويلة للسلسلة)، «Scheduling Delay» (تأخير المجدول)، «Buffer Overrun» (فيض مخزن SurfaceFlinger المؤقت). إذا أظهر تنبيه قيمة ~100 مللي ثانية لـ Scheduling Delay، فهذا يشير مباشرة إلى أن سلسلة UI كانت تنتظر CPU بسبب الحمل الخلفي — يجب نقل الحسابات الثقيلة إلى Worker Thread.

دورة حياة الإطار و jank

لتحليل الإطارات المفقودة، قم بتشغيل مساري SurfaceFlinger و app.gfx. كل إطار يظهر كمستطيل: أخضر (≤16 مللي ثانية)، أصفر (16–32 مللي ثانية)، أحمر (>32 مللي ثانية). إذا رأيت مستطيلًا أحمر على مسار التطبيق، انقر عليه — سيُظهر Systrace أي طريقة محددة (أو استدعاء نظام) تجاوزت الحد. وفقًا لـ Google (Android Performance Patterns، 2023)، 70% من مشاكل jank ناتجة عن onBindViewHolder بطيء أو GC متكرر.

Systrace مقابل Perfetto: الانتقال إلى التنسيق الجديد

Perfetto هو خليفة Systrace، الذي قدمته Google في Android 9 (Pie) كأداة تجريبية وأصبح الحل الأساسي بدءًا من Android 12. Perfetto يستخدم تنسيق بيانات protobuf حديث، يدعم الجلسات الطويلة (ساعات بدلاً من ثوانٍ) وله واجهة ويب لعرض التتبعات. دعنا نفحص الاختلافات الرئيسية بين النظامين.

المعيارSystracePerfetto
التنسيقتقرير HTML (trace.html)Protobuf (.trace / .perfetto-trace)
المدةحتى 60 ثانيةساعات، غيغابايت من البيانات
الواجهةHTML مدمجواجهة ويب (ui.perfetto.dev)
الفئاتثابتة (ftrace + atrace)قابلة للتوسيع (استعلامات SQL للتتبع)
الحركيةAndroid فقطAndroid، Linux، Chrome، Windows

على الرغم من الانتقال إلى Perfetto، تظل مهارات Systrace ذات صلة: على الأجهزة التي تعمل بنظام Android 11 وما دونه، يتم استخدامه افتراضيًا، ويحافظ Perfetto على التوافق العكسي مع فئات Systrace. في CPU Profiler لـ Android Studio، يُستخدم Perfetto للأجهزة الجديدة و Systrace للأجهزة القديمة — بشفافية للمستخدم. لـ CI/CD، يُوصى باستخدام Perfetto لأن تنسيقه يمكن معالجته تلقائيًا عبر Python و SQL.

أمثلة استخدام Systrace

لإتقان Systrace عمليًا، دعنا ننظر في سيناريوهين: إيجاد سبب الإطارات المفقودة أثناء التمرير وتشخيص GC المتكرر الذي يحجب سلسلة UI.

إيجاد jank أثناء تمرير RecyclerView

قم بتشغيل Systrace مع فئة gfx لمدة 10 ثوانٍ، قم بالتمرير عبر القائمة في التطبيق. في التقرير، ابحث عن أقسام ذات إطارات حمراء. انقر على الإطار المشكل وانظر إلى مسار التطبيق — إذا كان هناك كتلة «inflateLayout» أو «onBindViewHolder» بعرض أكبر من 16 مللي ثانية، المشكلة في تضخيم التخطيط أو ربط البيانات. الحل: قم بتحسين التخطيط (تقليل ViewGroup العميق، ViewStub)، قم بإلغاء تحميل الصور إلى Glide مع onAttachedToWindow.

تشخيص إنتاجية GC

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 من كود أصلي؟

لـ C++، استخدم ATRACE_BEGIN و ATRACE_END من مكتبة libcutils. قم بتضمين ملف الرأس ولف القسم المطلوب. ستظهر العلامة في Systrace على مسار عمليتك، وهو مفيد بشكل خاص لتحليل محركات الألعاب (Unity، Unreal).

بماذا أستبدل Systrace على Android 12+؟

على Android 12 وما فوق، استخدم Perfetto. قم بتثبيت وكيل perfetto على الجهاز عبر ADB، ابدأ التسجيل بتنسيق JSON. للعرض السريع، استخدم واجهة ويب Perfetto (ui.perfetto.dev)، ولـ CI — تصدير سطر الأوامر مع TraceProcessor في Python.

الملخص

  • Systrace — متتبع نظام Android يعمل على مستوى النواة عبر ftrace و atrace
  • يظهر تحميل CPU و GPU و SurfaceFlinger ومعاملات Binder على جدول زمني موحد
  • تقرير HTML يحتوي على رسائل تنبيه تلقائية مع تحديد المشاكل والتوصيات
  • التشغيل عبر Android Studio Profiler أو سطر الأوامر مع systrace.py
  • سلسلة UI حرجة: كل إطار يجب أن يتسع في 16.6 مللي ثانية لـ 60 FPS
  • على Android 12+، يتم استبدال Systrace بـ Perfetto مع دعم الجلسات الطويلة واستعلامات SQL
  • يُوصى بدمج Systrace و Traceview لتحليل أداء النظام والتطبيق معًا

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا