كيف أضفنا لمسة من الكمال إلى أداة تحليل أداء Linux Perf GUI (نقطة ساخنة)

خلال أحد مشاريعنا ، قمنا بتحسين ملف تعريف Linux Perf GUI من خلال تطوير وظائفه الجديدة.



يمكن التعبير عن احتياجات العملاء من خلال الخصائص التالية لملف التعريف المطلوب:



  • لديها أداة لتحليل الأداء لمجموعة محددة من البنى ؛
  • أن تكون قادرًا على إجراء تحليل متعمق للأداء حتى التعليمات في التعليمات البرمجية المفككة ؛
  • لديك عارض والعمل مع إخراج الكود المفكك في واجهة مستخدم رسومية ملائمة لمجموعة من البنى - 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) إلى الأدلة ، في رحلة مثيرة من خلال التطبيق الخاص بك وخصائص عمله ، والانغماس في أجواء النخبة لفرق التجميع ، وزيارة مختلف البنى وأكثر من ذلك بكثير.



All Articles