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

magic-trace - تتبع Intel PT الدقة العالية

magic-trace - تتبع Intel PT الدقة العالية

magic-trace (بقلم Jane Street) يلتقط ويعرض آثار التنفيذ الدقة العالية باستخدام Intel Processor Trace (Intel PT). حيث يخبرك محلل العينات أين يذهب الوقت في المتوسط، magic-trace يسجل تدفق التحكم الفعلي — كل مدخل وخروج الدالة — لآخر بضعة ميلي ثانية، في دقة nanosecond. هذا يجعله فريدًا مناسبًا للأحداث النادرة والحساسة للكمون: الطلب الواحد في عشرة آلاف التي استغرقت 40ms، حيث يعرض ملف تعريف متوسطًا شيء.

المتطلبات

  • Intel CPU مع دعم Processor Trace (معظم Intel الحديثة)
  • Linux مع perf و PT ممكنة
  • Root أو إعداد perf_event_paranoid مناسب
  • الملفات الثنائية ذات مؤشرات الإطار / الرموز للإخراج القابل للقراءة

التثبيت

الطريقةالأمر
ملف ثنائيتحميل magic-trace من GitHub Releases
opam (OCaml)opam install magic_trace
الأذوناتsysctl kernel.perf_event_paranoid=-1 (أو 1)
التحققmagic-trace --help

وضعا التقاط

الوضعالأمرالاستخدام
إرفاق بالجاريmagic-trace attach -pid <pid>الخدمة الحية
تشغيل أمرmagic-trace run ./my-programتشغيل قابل للتكرار
# إرفاق، التقط على Ctrl-C، اكتب تتبعًا
sudo magic-trace attach -pid $(pgrep -n myservice)

محفزات لقطة

الفكرة الأساسية: احتفظ بمخزن مؤقت متداول ولقطة عند حدوث شيء مثير للاهتمام.

محفزكيف
يدوياضغط Ctrl-C أثناء الإرفاق
نقطة توقف سحرالتطبيق يستدعي رمزًا محددًا لتفعيل لقطة
موقتالتقط بعد مدة ثابتة
محفز الرمز-trigger <symbol> للقطة عند استدعاء الدالة
# لقطة عندما يتم زيارة دالة محددة
sudo magic-trace attach -pid <pid> -trigger 'handle_slow_path'

لأن المخزن المؤقت يحتفظ بـ السابقة بضعة ميلي ثانية، ترى ما أدى إلى الحدث، وليس الحدث نفسه.

عرض الآثار

magic-trace ينبعث من تتبع قابل للعرض في واجهة Perfetto.

خطوةإجراء
1التقط ينتج trace.fxt (أو مشابه)
2افتح ui.perfetto.dev
3تحميل ملف التتبع
4التكبير في نطاق microsecond من الاهتمام
5اقرأ تسلسل استدعاء دقيق والمدد
Perfetto السيطرةماذا تفعل
W/Sتكبير في/خروج
A/Dالمقلاة
انقر على شريحةالتفاصيل المدة والدالة
تحديد نطاقملخص ما تم تشغيله

ما يمكنك رؤيته

سؤالmagic-trace إجابة
دالة أي تسبب هذا 40ms كسب؟استدعاء دقيق، المدة الدقيقة
هل اتخذنا فرعًا غير متوقع؟تدفق التحكم الكامل، مرئي
أين ذهب الوقت داخل طلب واحد؟انهيار مستوى nanosecond
هل كانت syscall أو قفل أو حساب؟تسلسل الاستدعاء يعرض ذلك

الخيارات تستحق المعرفة

العلمالغرض
-multi-threadتتبع جميع الخيوط
-durationطول نافذة الالتقاط
-trigger SYMBOLلقطة على رمز
-full-executionتتبع دورة قصيرة بالكامل
-output FILEمسار إخراج التتبع

القيود

تحديدملاحظة
Intel فقطيتطلب Intel PT (لا AMD/ARM)
نافذة قصيرةميلي ثانية، ليس دقائق
جودة الرمزالملفات الثنائية المجردة تعطي آثار سيئة
العلىمنخفض لكن غير صفر أثناء التتبع

magic-trace مقابل الأدوات ذات الصلة

الجانبmagic-traceperfPerfetto
البياناتتدفق التحكم الكامل (Intel PT)مكاده عينةخط الوقت في جميع أنحاء النظام
الدقةNanosecondsفترة العينةمستوى الحدث
النافذةآخر بضعة msتشغيل كاملقابلة للتكوين
الأفضل لـقمم الكمون النادرةمتوسط المسارات الساخنةربط النظام في جميع أنحاء النظام

استخدم perf للمسارات الساخنة في المتوسط، Perfetto لخطوط الوقت في جميع أنحاء النظام، و magic-trace عندما تحتاج إلى القصة الدقيقة لحدث بطيء نادر.

الموارد