تخطَّ إلى المحتوى

Perfetto - تتبع وتحليل النظام على مستوى النظام (Cheatsheet)

Perfetto - تتبع وتحليل النظام على مستوى النظام (Cheatsheet)

Perfetto هي مكدس التتبع والتنميط الموثوق من Google مفتوح المصدر لـ Linux و Android و Chrome. تحتسب المسارات على مستوى النظام — جدولة CPU، syscalls، تغييرات التردد، أحداث الذاكرة، وأحداث التطبيق المخصصة — في تنسيق protobuf مضغوط، ثم دع استكشافها في واجهة ويب متطورة أو، بشكل فريد، استعلم عنها مع SQL. حيث تقوم perf بأخذ عينات من المكدسات، يسجل Perfetto جدول زمني لما كان كل خيط و CPU يفعله، وهذا ما تحتاجه لمشاكل الكمون والتزامن.

التثبيت

المكونكيف
واجهة المستخدم (بدون تثبيت)افتح ui.perfetto.dev في متصفح
أدوات CLIتحميل tracebox/perfetto من GitHub Releases
Androidمدمج (adb shell perfetto ...)
trace_processorتحميل للتحليل المحلي SQL
التحقق./tracebox --help

احسب مسار (Linux)

# تتبع بسيط لـ 10 ثواني على مستوى النظام مع بيانات جدولة ftrace
./tracebox -o trace.pftrace --txt -c - <<EOF
buffers: { size_kb: 65536 }
data_sources: {
  config {
    name: "linux.ftrace"
    ftrace_config {
      ftrace_events: "sched/sched_switch"
      ftrace_events: "sched/sched_wakeup"
      ftrace_events: "power/cpu_frequency"
    }
  }
}
duration_ms: 10000
EOF
العنصرالغرض
buffersحجم مخزن الحلقة لبيانات المسار
data_sourcesما الذي يجب تسجيله (ftrace، procstats، heapprofd، …)
ftrace_eventsنقاط توقف kernel محددة
duration_msطول الالتقاط
-oملف المسار الناتج

مصادر البيانات الشائعة

المصدرالسجلات
linux.ftraceالجدولة، syscalls، IRQs، نقاط توقف مخصصة
linux.process_statsCPU/memory لكل عملية على مدى الوقت
linux.sys_statsعدادات على مستوى النظام (meminfo، vmstat)
android.heapprofdتنميط heap الأصلي
android.java_hprofحفرة heap Java
track_eventأحداث مصدرة من قبل التطبيق/العدادات

مسار سير العمل في الواجهة

الخطوةالإجراء
1افتح ui.perfetto.dev و drag في المسار
2الجدول الزمني يعرض CPUs، خيوط، ومسارات
3W/S zoom, A/D pan
4انقر على شريحة لترى مدتها و args
5حدد نطاق → ملخص ما بدأ
6استخدم صندوق الاستعلام لتحليل SQL

تحليل SQL (القوة الخارقة)

يكشف معالج المسار للمسار عن المسار كجداول قابلة للاستعلام.

-- أطول تشغيل الشرائح
SELECT name, dur/1e6 AS ms
FROM slice
ORDER BY dur DESC
LIMIT 20;

-- وقت CPU لكل عملية
SELECT p.name, SUM(s.dur)/1e6 AS cpu_ms
FROM sched s JOIN thread t USING(utid) JOIN process p USING(upid)
GROUP BY p.name ORDER BY cpu_ms DESC;

-- لماذا تم حجب الخيط؟
SELECT ts, dur, state
FROM thread_state
WHERE utid = 42 AND state != 'Running'
ORDER BY dur DESC;
الجدوليحتوي على
sliceأحداث المدة المسماة والمتداخلة
schedشرائح الجدولة لكل CPU
thread_stateفترات التشغيل/النوم/الحجب
counterسلاسل زمنية رقمية (freq، memory)
process, threadالبيانات الوصفية للعملية/الخيط

التحليل المحلي

# قذيفة SQL تفاعلية على المسار
./trace_processor trace.pftrace

# شغّل استعلاماً وانبعث JSON للبرمجة النصية
./trace_processor -q query.sql --query-output json trace.pftrace

ما Perfetto الأفضل في

مشكلةلماذا يساعد Perfetto
نقاط زمن الانتظارانظر بالضبط ما الذي جرى/حجب في تلك اللحظة
تنافس الأقفالthread_state يعرض الفترات الموجودة والأسباب
الهجرة/الجدولةجدول زمني لكل CPU من كل خيط
التأثيرات الترددية/الحراريةالارتباط بين عدادات cpufreq والتباطؤ
ارتباط التطبيق + kernelامتدادات التطبيق على نفس الجدول الزمني مثل أحداث kernel

Perfetto مقابل الأدوات ذات الصلة

الجانبPerfettoperfbpftrace
النموذججدول زمني كاملمحلل أخذ عيناتفحوصات eBPF خاصة
التحليلواجهة المستخدم + SQLالتقارير/flame graphsالسكريبتات المخصصة
الأفضل لـالكمون/التزامن/الجدول الزمنينقاط CPU الساخنةأسئلة kernel الموجهة
الحمل الزائدمعتدل (قابل للتكوين)منخفضمنخفض

يكمل perf (نقاط CPU الساخنة) و bpftrace (فحوصات موجهة)؛ Perfetto يجيب “ماذا حدث متى.”

الموارد