
هذا المشروع هو جهد R&D KDAB لإنشاء واجهة المستخدم الرسومية المستقلة لبيانات الأداء. كهدف أول ، نريد تقديم واجهة مستخدم مثل Kcachegrind حول Linux Perf. نتطلع إلى المستقبل ، نعتزم دعم تنسيقات بيانات الأداء الأخرى المختلفة تحت هذه المظلة.
فيما يلي بعض لقطات الشاشة التي توضح أهم ميزات النقطة الساخنة في العمل:
الميزة الرئيسية للنقطة الساخنة هي التصور الرسومي لملف perf.data .


ملحوظة: الوظائف المضمّنة لها حدود أغمق من تلك غير المحددة.





يسمح الخط الزمني بتصفية النتائج حسب الوقت أو العملية أو الخيط. يتم تحديث طرق عرض البيانات وفقًا لذلك.



يمكنك أيضًا إطلاق perf من نقطة Hotspot ، إلى ملف تعريف تطبيق تم بدء تشغيله حديثًا أو إرفاقه بالفعل بعملية التشغيل (ES). هل تأخذ التحذيرات أدناه في الاعتبار رغم ذلك.


ملاحظة: لم يتم تعبئة النقطة الساخنة بعد على جميع توزيعات Linux. في مثل هذه الحالات ، أو إذا كنت ترغب في استخدام أحدث إصدار ، فيرجى استخدام AppImage الذي سيعمل على أي Linux Distro على ما يرام.
يتوفر Hotspot في AUR (https://aur.archlinux.org/packages/hotspot).
تتوفر Hotspot في Debian (https://packages.debian.org/hotspot) و Ubuntu (https://packages.ubuntu.com/hotspot).
تتوفر Hotspot Ebuilds من تراكبنا (https://github.com/kdab/kdab-overlay).
النقطة الساخنة متوفرة في Fedora (https://packages.fedoraproject.org/pkgs/hotspot/hotspot/).
يمكنك إما التوجه إلى أحدث إصدار أو بناء مستمر. في كلتا الحالتين ، ستجد appimage ضمن "الأصول" التي يمكنك تنزيلها. قم بفك ملف AppImage (في حالة الإصدار الأخير) ، ثم اجعله قابلًا للتنفيذ ثم تشغيله.
يرجى استخدام أحدث بناء للحصول على أحدث إصدار. إذا لم ينجح الأمر ، فيرجى الإبلاغ عن خطأ واختبار أحدث إصدار مستقر.
ملاحظة: لا يتم تغيير مكتبات النظام أو التفضيلات. في حال كنت ترغب في إزالة نقطة الساخنة مرة أخرى ، ما عليك سوى حذف الملف الذي تم تنزيله. تعرف على المزيد حول APPIMAGE هنا.
لمعرفة كيفية تصحيح appimage ، انظر القرصنة.
يمنحك بناء نقطة ساخنة من المصدر أحدث وأكبر ، ولكن عليك التأكد من توفر جميع تبعياتها. على الأرجح يجب على معظم المستخدمين تثبيت نقطة ساخنة من مدير حزم Distro أو كحزم.
لكل من يريد المساهمة في نقطة ساخنة أو استخدام أحدث إصدار دون وجود ملاحظات مفصلة AppImage في القرصنة.
بادئ ذي بدء ، سجل بعض البيانات مع perf . للحصول على عودة ، ستحتاج إلى تمكين وضع callgraph القزم:
perf record --call-graph dwarf < your application >
...
[ perf record: Woken up 58 times to write data ]
[ perf record: Captured and wrote 14.874 MB perf.data (1865 samples) ] الآن ، إذا كان لديك نقطة اتصال متوفرة على نفس الجهاز ، فكل ما عليك فعله هو تشغيله. سيتم فتح ملف perf.data تلقائيًا في الدليل الحالي (على غرار perf report ).
بدلاً من ذلك ، يمكنك تحديد المسار إلى ملف البيانات على وحدة التحكم:
hotspot /path/to/perf.data اعتمادًا على احتياجاتك ، قد ترغب في تمرير خيارات سطر الأوامر الإضافية إلى نقطة ساخنة. يسمح ذلك بخيارات تكوين مجموعة لمرة واحدة موجودة في واجهة المستخدم الرسومية ضمن "الإعدادات" ، كما يسمح بتحويل ملفات بيانات Linux إلى تنسيق PerfData الأصغر والمحمول (انظر الاستيراد / التصدير للحصول على تفاصيل حول ذلك). يتم عرض جميع خيارات سطر الأوامر مع --help :
Usage: hotspot [options] [files...]
Linux perf GUI for performance analysis.
Options:
-h, --help Displays help on commandline options.
--help-all Displays help including Qt specific options.
-v, --version Displays version information.
--sysroot <path> Path to sysroot which is used to find libraries.
--kallsyms <path> Path to kallsyms file which is used to resolve
kernel symbols.
--debugPaths <paths> Colon separated list of paths that contain debug
information. These paths are relative to the
executable and not to the current working directory.
--extraLibPaths <paths> Colon separated list of extra paths to find
libraries.
--appPath <path> Path to folder containing the application executable
and libraries.
--sourcePaths <paths> Colon separated list of search paths for the source
code.
--arch <path> Architecture to use for unwinding.
--exportTo <path> Path to .perfparser output file to which the input
data should be exported. A single input file has to
be given too.
--perf-binary <path> Path to the perf binary.
--objdump-binary <path> Path to the objdump binary.
Arguments:
files Optional input files to open on startup, i.e.
perf.data files.
تدعم Hotspot طريقة قوية للغاية لإجراء تحليل وقت الانتظار ، أو التنميط خارج CPU. يعتمد هذا التحليل على نقاط التريفي في kernel في جدولة Linux. من خلال تسجيل تلك البيانات ، يمكننا العثور على دلتا الوقت الذي لم يتم خلاله تشغيل مؤشر ترابط على وحدة المعالجة المركزية ، ولكن بدلاً من ذلك كان خارج CPU. يمكن أن تكون هناك أسباب متعددة لذلك ، يمكن العثور عليها جميعًا باستخدام هذه التقنية:
read() أو write()mmap() 'ednanosleep() أو yield()futex() وما إلى ذلكمن خلال الاستفادة من نقاط تتبع kernel في المجدول ، فإن النفقات العامة يمكن التحكم فيها إلى حد كبير ونحن ندفع ثمنًا فقط ، عندما يتم إيقاف العملية بالفعل. وأبرزها أننا لا ندفع سعرًا عندما يمكن التعامل مع عملية قفل Mutex مباشرة في مساحة المستخدم.
لإجراء تحليل خارج CPU مع نقطة ساخنة ، تحتاج إلى تسجيل البيانات بأمر محدد للغاية:
perf record
-e cycles # on-CPU profiling
-e sched:sched_switch --switch-events # off-CPU profiling
--sample-cpu # track on which core code is executed
-m 8M # reduce chance of event loss
--aio -z # reduce disk-I/O overhead and data size
--call-graph dwarf # we definitely want backtraces
< your application >بدلاً من ذلك ، يمكنك استخدام خانة الاختيار Off-CPU في صفحة السجل المدمجة لـ Hotspot.
أثناء التحليل ، يمكنك بعد ذلك التبديل بين عرض تكلفة "الدورات" لبيانات ON-CPU إلى عرض تكلفة "وقت خارج CPU" لتحليل وقت الانتظار. في كثير من الأحيان ، ستحتاج إلى التغيير بين كليهما ، على سبيل المثال ، لإيجاد أماكن في الكود الخاص بك والتي قد تتطلب المزيد من التوازي (انظر أيضًا قانون Amdahl).
كما سيتم عرض تكلفة "Sched: Sched_switch" لك. ولكن في رأيي ، يكون هذا أقل فائدة ، لأنه يشير فقط إلى عدد مفاتيح التحويلات. غالبًا ما يكون طول الوقت بينهما أكثر إثارة للاهتمام بالنسبة لي - وهذا ما يظهر لك في مقياس "وقت خارج CPU".
إذا كنت تسجل على نظام مضمن ، فستحتاج إلى تحليل البيانات على جهاز التطوير الخاص بك بنقطة ساخنة. للقيام بذلك ، تأكد من أن sysroot يحتوي على معلومات التصحيح المطلوبة للتفكيك (انظر أدناه). ثم سجل البيانات على نظامك المدمج:
embedded$ perf record --call-graph dwarf < your application >
...
[ perf record: Woken up 58 times to write data ]
[ perf record: Captured and wrote 14.874 MB perf.data (1865 samples) ]
embedded$ cp /proc/kallsyms /tmp/kallsyms # make pseudo-file a real fileلا بأس إذا كان جهازك المضمّن يستخدم نظامًا مختلفًا عن مضيفك. على مضيفك ، قم بالخطوات التالية ثم لتحليل البيانات:
host$ scp embedded:perf.data embedded:/tmp/kallsyms .
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms
perf.dataإذا قمت بنشر تطبيق يدويًا من مسار خارج نظامك ، فقم بذلك بدلاً من ذلك:
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms --appPath /path/to/app
perf.dataإذا كان تطبيقك يستخدم أيضًا المكتبات خارج نظامك و AppPath ، فقم بذلك:
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms --appPath /path/to/app
--extraLibPaths /path/to/lib1:/path/to/lib2:...
perf.dataوأسوأ حالة ، إذا كنت تستخدم أيضًا ملفات التصحيح المنقسمة في المواقع غير القياسية ، فقم بذلك:
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms --appPath /path/to/app
--extraLibPaths /path/to/lib1:/path/to/lib2:...
--debugPaths /path/to/debug1:/path/to/debug2:...
perf.data تنسيق ملف perf.data غير مكتفية ذاتيا. لتحليلها ، تحتاج إلى الوصول إلى المنافعين والمكتبات للعملية التي تم تصنيفها ، إلى جانب رموز التصحيح. هذا يجعل من غير العمد مشاركة هذه الملفات عبر الآلات ، على سبيل المثال للحصول على مساعدة من أحد الزملاء للتحقيق في مشكلة الأداء ، أو لأغراض الإبلاغ عن الأخطاء.
تتيح لك Hotspot تصدير البيانات التي تم تحليلها ، والتي تكون مكتفية تمامًا. يمكن الوصول إلى هذه الميزة عبر إجراء قائمة "File> As As". ثم يتم حفظ البيانات في ملف *.perfparser . لاستيراد البيانات إلى نقطة ساخنة مرة أخرى ، ما عليك سوى فتح هذا الملف مباشرة بدلاً من ملف perf.data الأصلي.
كبديل ، يمكنك أيضًا إجراء التصدير من سطر الأوامر (بدون واجهة المستخدم الرسومية ، بحيث يكون أيضًا قابلاً للاستخدام مع البناء الآلي) باستخدام خيار --exportTo .
ملاحظة: تنسيق الملف ليس مستقرًا بعد. لا يمكن قراءة البيانات التي تم تصديرها بواسطة إصدار واحد من نقطة الساخنة إلا من خلال نفس الإصدار. سيتم حل هذه المشكلة في المستقبل ، كما يسمح الوقت.
تُظهر Hotspot حاليًا اسم TracePoints فقط في الجدول الزمني.


تتضمن نقطة الساخنة disassembler ، والتي يمكن أن تظهر لك التكلفة لكل تعليمات. يستخدم Disassembler الألوان للإشارة إلى خطوط التجميع التي تتوافق مع خط رمز المصدر. لتسهيل التنقل ، يمكنك ببساطة النقر على خط وسيقفز العرض الآخر إليه. يمكنك متابعة مكالمات الوظائف بنقرة مزدوجة. في عرض Sourcecode ، يمكنك الضغط على Ctrl+F أو الضغط على أيقونة البحث لفتح نافذة بحث.
إذا كان لديك المصادر في دليل مختلف ، فيمكنك استخدام --sourcePaths أو الإعدادات لتحديد إخبار Disassembler بالبحث عن الكود المصدري.
إذا كان أي شيء يكسر ما سبق والإخراج أقل قابلية للاستخدام من perf report ، فيرجى الإبلاغ عن مشكلة في Github. ومع ذلك ، هناك بعض المشكلات المعروفة التي قد يسافرها الناس:
يعد الاسترخاء على المكدس لإنتاج خلفية فنًا مظلمًا ويمكن أن يخطئ في نواح كثيرة. تعتمد Hotspot على perfparser (انظر أدناه) ، والتي تعتمد بدورها على libdw من Elfutils للاسترخاء على المكدس. هذا يعمل بشكل جيد معظم الوقت ، ولكن لا يزال من الممكن أن يخطئ. والجدير بالذكر أن الاسترخاء سيفشل عندما:
perf.data مفقود--debugPaths <paths> : استخدم هذا عندما تقسم ملفات التصحيح في مواقع غير قياسية--extraLibPaths <paths> : استخدم هذا عندما تنقل المكتبات إلى موقع آخر منذ التسجيل--appPath <paths> : هذا نوع من مزيج من الحقلين أعلاه. يتم اجتياز المسار بشكل متكرر ، ويبحث عن ملفات التصحيح والمكتبات.--sysroot <path> : استخدم هذا عند محاولة فحص ملف بيانات مسجل على منصة مضمنة-O2 -g . سيتعين عليك تكرار خطوة perf record بشكل افتراضي ، يقوم perf record فقط بنسخ جزء من المكدس إلى ملف البيانات. يمكن أن يؤدي ذلك إلى مشكلات مع مداخن مكالمات عميقة للغاية ، والتي سيتم قطعها في مرحلة ما. ستعمل هذه المشكلة على كسر أشجار المكالمات من أعلى إلى أسفل في نقطة ساخنة ، كما هو متصور في العرض من أعلى إلى أسفل أو الرسم البياني للهب. لإصلاح هذا ، يمكنك محاولة زيادة حجم مكدس تفريغ ، أي:
perf record --call-graph dwarf,32768
لاحظ أن هذا يمكن أن يزيد بشكل كبير من حجم ملفات perf.data - استخدمه بعناية. إلقاء نظرة على man perf record .
بالنسبة لبعض السيناريوهات ، تفشل مكالمات الوظائف المتكررة ببساطة في عدم الابتعاد. انظر أيضا #93
تدعم HotSpot تنزيل رموز التصحيح عبر DebuginFod. يمكن تمكين ذلك إما عن طريق إضافة عناوين URL للتنزيل في الإعدادات أو إطلاق نقطة ساخنة مع DEBUGINFOD_URLS المحددة في البيئة.
بالمقارنة مع perf report ، تفتقد Hotspot الكثير من الميزات. من المخطط أن يتم حل بعض هذه في المستقبل. قد لا يتم تنفيذ الآخرين أبدًا. لكن كن على دراية بأن الميزات التالية غير متوفرة في نقطة ساخنة حاليًا:
--itrace ، --mem-mode ، --branch-stack و --branch-history ، غير مدعومة ليس من الجيد تشغيل نقطة ساخنة مع sudo أو كمستخدم root . انظر على سبيل المثال ، تحرير ملفات كجذر لمقال حول هذا الأمر. العدد رقم 83 مناسب أيضًا في هذا الاتصال.
ولكن بدون حقوق Superuser ، قد ترى رسائل خطأ مثل ما يلي عند استخدام ميزة سجل Hotspot:
You may not have permission to collect stats.
Consider tweaking /proc/sys/kernel/perf_event_paranoid:
-1 - Not paranoid at all
0 - Disallow raw tracepoint access for unpriv
1 - Disallow cpu events for unpriv
2 - Disallow kernel profiling for unpriv
لتوحيد هذا القيد ، يمكن أن تعمل نقطة الساخنة بامتيازات مرتفعة.
يقتصر تصدير البيانات الحالي على تنسيق لا يمكن قراءته إلا من خلال نقطة ساخنة لنفس الإصدار. هذا يجعل interop مع أدوات التصور الأخرى شبه مستحيلة. هذا معروف وسيتحسن في المستقبل. وأبرزها دعم التصدير لمشاهدي الويب مثل Perfetto أو Mozilla Profiler تم التخطيط له ولكن لم يتم تنفيذه بعد. بقع مرحب به!
يستفيد هذا المشروع من أداة perfparser الممتازة التي أنشأتها شركة QT لمبدع QT IDE الخاص بها. إذا كنت تستخدم بالفعل QT Creator ، ففكر في الاستفادة من محلل استخدام وحدة المعالجة المركزية المدمجة.
النقطة الساخنة مرخصة تحت GPL V2+. راجع الترخيص.