يمكن التعبير عن احتياجات العملاء من خلال الخصائص التالية لملف التعريف المطلوب:
- لديها أداة لتحليل الأداء لمجموعة محددة من البنى ؛
- أن تكون قادرًا على إجراء تحليل متعمق للأداء حتى التعليمات في التعليمات البرمجية المفككة ؛
- لديك عارض والعمل مع إخراج الكود المفكك في واجهة مستخدم رسومية ملائمة لمجموعة من البنى - x86_64 ، ARMv7 ، ARMv8.
بمعنى ، مطلوب ملف تعريف ، والذي يجب أن:
- كن عبر منصة
- أن تكون قادرًا على إنشاء أداة تفكيك لوظائف البنى من هذه المجموعة - x86_64 ، ARMv7 ، ARMv8 ؛
- عرض النتائج والتفاعل مع المستخدم من خلال واجهة المستخدم الرسومية والحفاظ على سهولة الاستخدام.
لتلبية احتياجات العملاء ، قمنا بتطوير مكون نظام جديد - أداة تفكيك عبر الأنظمة الأساسية مع إنشاء رمز لـ x86_64 و ARMv7 و ARMv8 (وظائف وواجهة المستخدم الرسومية للعمل مع مخرجاتها).
لنلقِ نظرة على مثال عرض توضيحي بسيط لرمز C ++ على Hotspot قيد التشغيل وإمكانيات تحليل الأداء التي يوفرها. مثال:
cat demo.cpp:
#include <iostream>
int g (int arg) {
return abs(rand()) * arg;
}
int f() {
int i = 1;
int res = 1 ;
std::cout << abs(rand()) << std::endl;
while (i < 1000000) {
res += i * g(res);
i++;
}
std::cout << res << std::endl;
return res;
}
int main() {
std::cout << f() << std::endl;
return 0;
}
نقوم بتجميع وبناء تطبيقنا التجريبي:
g++ demo.cpp -o demo
إطلاق ملف التعريف الخاص بنا:
./hotspot
الخطوة 1 - جمع البيانات وكتابتها في ملف perf.data.
يمكن القيام بذلك بطريقتين - من سطر الأوامر باستخدام استدعاء صريح إلى الأداء
record -o /home/demo/perf.data --call-graph dwarf ./demo
أو باستخدام ملف قائمة Hotspot-> تسجيل البيانات.
بالنسبة إلى العرض التوضيحي الخاص بنا ، نقوم بجمع أحداث من نوع الدورات ، ولكن يمكنك تعيين أي نوع آخر أو مجموعة من أنواع الأحداث (أخطاء ذاكرة التخزين المؤقت ، والتعليمات ، وأخطاء الفروع ، وما إلى ذلك)
انقر فوق بدء التسجيل ، وانتظر عرض النتائج لتضيء:
الغوص في عالم تحليل الأداء.
سنجد هنا معلومات موجزة وأبطالًا بين المستهلكين في وقت تشغيل العرض التوضيحي الخاص بنا.
سلاسل المكالمات في كلا الاتجاهين - من الاستدعاء إلى طريقة الاستدعاء (من الأسفل إلى الأعلى) والعكس بالعكس (من الأسفل إلى الأسفل) مع الأوقات (الأوزان).
رسم بياني لهب وبيانات عن الأداء ، ووقت التنفيذ لكل
وظيفة / طريقة مهمة لها.
للحصول على مزيد من المعلومات التفصيلية حول الوظيفة التي تهمنا ، مع توزيع الأحداث داخلها (حتى الإرشادات الخاصة بالكود المفكك) ، انقر فوق التفكيك ، عنصر قائمة السياق. يتم فتحه بالنقر بزر الماوس الأيمن على الوظيفة التي تريدها:
الآن نحن نعرف كل شيء عن هذه الوظيفة!
يمكنك التنقل في مكدس المكالمات. انقر نقرًا مزدوجًا فوق تعليمات الاتصال المميزة باللون الأزرق. ويوجد أمامنا أداة تفكيك للدالة المسماة g (int). تعليمات استهلاك وحدة المعالجة المركزية ليس لها منافسون هنا.
Ctrl + B و Ctrl + D - ولدينا أيضًا رموز أوامر الآلة ، وتم إنشاء أداة التفكيك باستخدام objdump. في الحالات السابقة ، تم عرض الكود الذي تم إنشاؤه عن طريق استدعاء التعليق التوضيحي الكامل.
زر الرجوع مضاء ، يمكنك التحرك على طول مكدس المكالمات في كلا الاتجاهين!
انتقل إلى التعليمات بالعنوان 1236 وانقر نقرًا مزدوجًا على التعليمات بالعنوان 124f. ومرة أخرى ، يتوفر الانتقال مرة أخرى إلى التعليمات بالعنوان 1236.
Ctrl + B ، Ctrl + I يحولنا إلى بناء جملة Intel Assembler: سنكون
سعداء بفرصة البحث عن النص من خلال النمط الذي تم إدخاله ، على سبيل المثال ، باستخدام السجل٪ rsp:
و ... دون مغادرة المكان ، ننتقل إلى ARM ... للقيام بذلك ، سنحتاج ، بشكل أساسي ، إلى كيانين - الملف التنفيذي لتطبيق المستخدم ، المبني على ARM ، وملف perf.data الخاص به ، المسجل هناك. في العرض التوضيحي الخاص بنا ، هذه هي coremark.1.exe و perf.1.fp.ycles.data ، المبنية على ARMv8. نضعها في / home / demo / armv8 / ونحمل perf.data -
وبالتالي ، لم نكمل المهام التي حددها العميل فحسب ، بل قمنا أيضًا بإنجازها بشكل مفرط - على وجه الخصوص ، يسمح لنا حساب وعرض توزيع الأحداث وفقًا لتعليمات المفكك بإجراء تحليل متعمق حتى التعليمات التي يمكن ربطها بسلسلة في الكود ، يحتوي البرنامج على واجهة مستخدم رسومية - واجهة سهلة الاستخدام مع إعدادات التنميط المشترك.
يتم توزيع نقطة اتصال Linux perf gui بموجب شروط رخصة جنو العمومية العامة بالاتفاق مع شركائنا. بمعنى آخر ، نمنح جميع المستخدمين المهتمين الحق في نسخ برنامج التعريف هذا وتعديله وتوزيعه مجانًا.
يتم استضافته على GitHub مع إرشادات للتنزيل والتثبيت . يمكن للجميع التعرف عليها وتقديرها.
ندعوك ، مع أخذ Linux Perf GUI (Hotspot) إلى الأدلة ، في رحلة مثيرة من خلال التطبيق الخاص بك وخصائص عمله ، والانغماس في أجواء النخبة لفرق التجميع ، وزيارة مختلف البنى وأكثر من ذلك بكثير.