بداية سريعة | يساهم
يحتوي هذا المشروع على مكتبة لواجهات برمجة تطبيقات حدث Linux perf. يكمن في جوهره تطبيق perf_event_open (2)
syscall، وهو قابل للاستخدام كما هو.
تحتوي المكتبة أيضًا على العديد من الأدوات المساعدة اللازمة للاستخدام المستقر لواجهات برمجة التطبيقات. توفر الأدوات المساعدة معالجة الأخطاء ودعم التحقق من الصحة والمزيد.
تركز هذه المكتبة على نتائج دقيقة للغاية دون أي نفقات إضافية أثناء القياس . أي أن إعداد القياسات قد يكون مكلفًا، ولكن إجراء القياسات يتطلب صفر نفقات إضافية تضيفها هذه المكتبة. يأتي هذا مع فائدة كبيرة تتمثل في تحقيق نتائج دقيقة قدر الإمكان والمرونة قدر الإمكان، على حساب تجربة المستخدم.
لبناء المشروع، قم أولاً بتثبيت libcap
:
sudo apt install libcap-dev
sudo yum install libcap-devel
sudo zapper install libcap-devel
وبعد ذلك، قم ببساطة ببناء المشروع.
make build
تتوفر الأمثلة في دليل examples
، ويتم إخراجها إلى دليل build/examples
.
./build/examples/full
بداية سريعة
سمات
التوثيق
يساهم
CAP_PERFMON
في الإصدار 5.9) هناك العديد من أدوات التوصيف المتاحة لنظام التشغيل Linux. تعد الأدوات مثل Valgrind (وCallgrind) طرقًا رائعة ودقيقة لإجراء تحليل أداء الذاكرة ومكدس الاستدعاءات. ومع ذلك، فإنه ينتج قياسات مبسطة لقيم مثل دورات وحدة المعالجة المركزية وتعليماتها نظرًا لأنه لا يقيس الأجهزة الأصلية. الأدوات الأخرى مثل gprof، وprof، وgperftools قريبة جدًا من الأجهزة، ولكنها تفتقر إلى الدعم لقياس أحداث kernel والأحداث الخاملة. قد تكون الطرق الأخرى لقياس التعليمات والدورات المستخدمة في SUPERCOP وPapi وما إلى ذلك غير دقيقة، حيث يتم ببساطة حساب الدورات الإجمالية التي يؤديها نواة وحدة المعالجة المركزية. هذا هو المكان الذي تتألق فيه واجهات برمجة تطبيقات Linux perf. توفر واجهات برمجة التطبيقات مجموعة شاملة من الأدوات لقياس أحداث المستخدم والنواة - سواء كان ذلك عبر نقاط التوقف المحددة بالبرمجيات أو عدادات الأجهزة.
تعتبر أداة perf
CLI رائعة في توفير طريقة لاستخدام واجهات برمجة التطبيقات هذه، ولكنها تقيس تنفيذ البرنامج بأكمله. لا يحتوي استدعاء النظام الأساسي، perf_event_open (2)
، على غلاف glibc وبالتالي فهو مطول تمامًا - خاصة عند إجراء الكثير من القياسات.
تهدف هذه المكتبة إلى سد هذه الفجوة المتخصصة الصغيرة حيث يتم إجراء قياسات دقيقة للغاية لرمز محدد في ملف ثنائي.
سيستمر مع استقرار واجهة برمجة التطبيقات (API).
أي مساهمة هي موضع ترحيب. إذا لم تكن قادرًا على ترميزها بنفسك، فربما يكون شخص آخر قادرًا على ذلك - لذا انشر مشكلة إذا كان هناك أي شيء يدور في ذهنك.
تأكد من استيفاء المتطلبات الأساسية التالية:
$CC
إلى gcc
8 أو الأحدثlibcap
clang-format
(إذا كنت تريد تنسيق التعليمات البرمجية)compiledb
(إذا كنت تريد تنسيق التعليمات البرمجية أو تحليلها باستخدام أدوات llvm أخرى) # Clone the repository
git clone https://github.com/AlexGustafsson/perf && cd perf
# Format the code
make format
# Build the library
make library
# Build examples
make examples
يمكن اختبار الأمثلة باستخدام Docker.
docker build -t perf .
docker run -it --rm --privileged perf ./pi
mmap
ed