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-trace | perf | Perfetto |
|---|
| البيانات | تدفق التحكم الكامل (Intel PT) | مكاده عينة | خط الوقت في جميع أنحاء النظام |
| الدقة | Nanoseconds | فترة العينة | مستوى الحدث |
| النافذة | آخر بضعة ms | تشغيل كامل | قابلة للتكوين |
| الأفضل لـ | قمم الكمون النادرة | متوسط المسارات الساخنة | ربط النظام في جميع أنحاء النظام |
استخدم perf للمسارات الساخنة في المتوسط، Perfetto لخطوط الوقت في جميع أنحاء النظام، و magic-trace عندما تحتاج إلى القصة الدقيقة لحدث بطيء نادر.
الموارد