samply - محترف أخذ العينات مع واجهة Firefox Profiler
samply هو محترف أخذ عينات من سطر الأوامس عبر الأنظمة الأساسية لـ macOS و Linux و Windows. يقوم بأخذ عينات من تتبعات المكدس لأمر أو عملية قيد التشغيل (افتراضي ~1000 Hz) ثم يخدم النتائج إلى واجهة ويب Firefox Profiler — واجهة نهاية أمامية ناضجة وتفاعلية مع رسوم بيانية لهبية وجداول مكدس وشجرة استدعاء وخيوط زمنية لكل خيط. يقوم بحساب الملف الشخصي للرمز الأصلي (C/C++/Rust/Go) والعديد من اللغات الأخرى التي تصدر معلومات المكدس المعيارية بدون تغييرات الرمز.
التثبيت
| الطريقة | الأمر |
|---|
| Cargo | cargo install --locked samply |
| ملف ثنائي | قم بالتحميل من صفحة GitHub Releases |
| وصول حدث perf Linux | قد تحتاج sysctl kernel.perf_event_paranoid=1 (أو منخفض) |
| التحقق | samply --version |
الاستخدام الأساسي
| الأمر | الوصف |
|---|
samply record ./my-program args | ملف تعريفي أمر ثم افتح واجهة المستخدم |
samply record -- cargo run --release | ملف تعريفي بعد -- (مرر الأعلام من خلال) |
samply record --pid 1234 | ملف تعريفي عملية تعمل بالفعل |
samply load profile.json.gz | أعد فتح ملف تعريف محفوظ في واجهة المستخدم |
samply --help | قائمة الخيارات الكاملة |
خيارات التسجيل
| الخيار | الوصف |
|---|
-r, --rate N | معدل أخذ العينات بـ Hz (افتراضي ~1000) |
-o, --output FILE | حفظ الملف الشخصي إلى ملف |
--save-only | التسجيل بدون إطلاق متصفح واجهة المستخدم |
-p, --pid PID | الإرفاق بعملية قيد التشغيل |
-d, --duration SECS | ملف تعريفي لمدة ثابتة |
--reuse-threads | تعديل معالجة الخيط لبعض أحمال العمل |
-- | كل شيء بعد هو الأمر + حجج الخاصة به |
واجهة Firefox Profiler
بعد التسجيل يفتح samply عرض محترف Firefox محلي. الأجزاء الرئيسية:
| اللوحة | يعرض |
|---|
| الرسم البياني اللهب | مكدس مجمع (حيث يتم قضاء الوقت) |
| جدول المكدس | الوقت على المحور السيني والمكدسات مكدسة بشكل عمودي |
| شجرة الاستدعاء | من أعلى إلى أسفل / هرمية من الأسفل إلى الأعلى مع الذاتي/الإجمالي الوقت |
| جدول العلامة | الأحداث بمرور الوقت (إن وجدت) |
| الخيط الزمني | نشاط لكل خيط؛ حدد نطاقاً للتركيز |
| إجراء واجهة المستخدم | الاستخدام |
|---|
| حدد نطاق زمني | تحليل التركيز على جزء من التشغيل |
| اقلب المكدس | البحث عن وظائف ورقية ساخنة (وقت ذاتي) |
| بحث | تصفية شجرة الاستدعاء حسب اسم الدالة |
| المشاركة/التصدير | حفظ أو تحميل الملف الشخصي |
نصائح سير العمل
| الهدف | النهج |
|---|
| البحث عن مسارات CPU الساخنة | التسجيل والفتح الرسم البياني اللهب ابحث عن إطارات عريضة |
| البحث عن مرحلة بطيئة معينة | حدد نطاق الوقت ذلك في الخيط الزمني |
| مقارنة البنى | حفظ ملفات شخصية وتحميل جنباً إلى جنب |
| تقليل الضوضاء | ملف شخصي الإفراج عن البنية بمعلومات التصحيح (debug = true) |
سير العمل الشائع
# ملف تعريفي Rust release build (احتفظ برموز معلومات التصحيح)
samply record -- cargo run --release
# ملف تعريفي خادم تشغيل لمدة 20 ثانية
samply record --pid $(pgrep -n myserver) -d 20
# التسجيل بدون رؤوس في CI وفحص الحفنة لاحقاً
samply record --save-only -o prof.json.gz ./bench
samply load prof.json.gz
samply مقابل محترفين آخرين
| الجانب | samply | perf + FlameGraph | hotspot |
|---|
| الأنظمة الأساسية | macOS/Linux/Windows | Linux | Linux |
| واجهة المستخدم | Firefox Profiler (غنية) | SVG ثابت | Qt GUI |
| الإعداد | ملف ثنائي واحد | أدوات متعددة | تثبيت واجهة رسومية |
| الأفضل لـ | عبر الأنظمة الأساسية وتفاعلي | البرنامج النصي Linux profiling | مستخدمو Qt/perf GUI |
موارد