عندما نتحدث عن الأداء في الحوسبة، نشير إلى العلاقة بين مواردنا والمهام التي تسمح لنا بإكمالها في فترة زمنية معينة.

في يوم من المنافسة الشرسة بين الشركات، من المهم أن نتعلم كيف نستخدم ما لدينا بأفضل طريقة ممكنة. إهدار موارد الأجهزة أو البرمجيات، أو عدم القدرة على معرفة كيفية استخدامها بكفاءة أكبر، ينتج عنه خسارة لا يمكننا تحملها إذا أردنا أن نكون في القمة.
في الوقت نفسه، يجب أن نكون حذرين لعدم الوصول بمواردنا إلى الحد الذي سيؤدي إلى تلف لا يمكن إصلاحه نتيجة للاستخدام المستمر.
في هذه المقالة سنقدم لك أداة تحليل الأداء الجديدة نسبيًا ونقدم نصائح يمكنك استخدامها لمراقبة أنظمة Linux الخاصة بك، بما في ذلك الأجهزة والتطبيقات. سيساعدك ذلك على ضمان أنها تعمل بحيث تكون قادرًا على إنتاج النتائج المرغوبة دون إهدار الموارد أو طاقتك الخاصة.
تقديم وتثبيت Perf في Linux
من بين الأدوات الأخرى، يوفر Linux أداة مراقبة وتحليل الأداء تسمى perf بشكل ملائم. فما الذي يميز perf عن الأدوات المعروفة الأخرى التي أنتم على دراية بها؟
الجواب هو أن perf يوفر وصولًا إلى وحدة مراقبة الأداء في وحدة المعالجة المركزية، وبالتالي يسمح لنا بالنظر القريب إلى سلوك الأجهزة والأحداث المرتبطة بها.
بالإضافة إلى ذلك، يمكنه أيضًا مراقبة أحداث البرنامج وإنشاء تقارير من البيانات التي تم جمعها.
يمكنك تثبيت perf في توزيعات RPM باستخدام:
# yum update && yum install perf [CentOS / RHEL / Fedora] # dnf update && dnf install perf [Fedora 23+ releases]
في ديبيان وتوزيعاتها:
# sudo aptitude update && sudo aptitude install linux-tools-$(uname -r) linux-tools-generic
إذا كان uname -r
في الأمر أعلاه يعيد سلاسل إضافية بجانب الإصدار الفعلي (3.2.0-23-generic في حالتي)، قد تحتاج إلى كتابة linux-tools-3.2.0-23 بدلاً من استخدام إخراج uname.
من المهم أيضًا ملاحظة أن perf يعيد نتائج غير كاملة عند تشغيله في ضيف فوق VirtualBox أو VMWare حيث لا يُسمح بالوصول إلى عدادات الأجهزة كتقنيات الافتراض الأخرى (مثل KVM أو XEN).
بالإضافة إلى ذلك، عليك أيضًا أن تضع في اعتبارك أن بعض أوامر perf قد تكون مقيدة للمستخدم الجذر افتراضيًا، ويمكن تعطيل ذلك (حتى يتم إعادة تشغيل النظام) عن طريق:
# echo 0 > /proc/sys/kernel/perf_event_paranoid
إذا كنت بحاجة إلى تعطيل وضع التوتر بشكل دائم، قم بتحديث الإعداد التالي في ملف /etc/sysctl.conf.
kernel.perf_event_paranoid = 0
الأوامر الفرعية
بمجرد تثبيت perf، يمكنك الرجوع إلى صفحة الرجل الخاصة به للحصول على قائمة بالأوامر الفرعية المتاحة (يمكنك أن تفكر في الأوامر الفرعية كخيارات خاصة تفتح نافذة محددة في النظام). للحصول على نتائج أفضل وأكثر اكتمالًا، استخدم perf إما كـ root أو من خلال sudo.
قائمة Perf
تُعيد الأمر perf list (بدون خيارات) جميع أنواع الأحداث الرمزية (قائمة طويلة). إذا كنت ترغب في عرض قائمة الأحداث المتاحة في فئة محددة، استخدم الأمر perf list تليه اسم الفئة ([hw|sw|cache|tracepoint|pmu|event_glob])، مثل:
عرض قائمة الأحداث المحددة مسبقًا في Linux:
# perf list sw

إحصائيات Perf
يقوم الأمر perf stat بتشغيل أمر ما وجمع إحصاءات أداء Linux أثناء تنفيذ هذا الأمر. ماذا يحدث في نظامنا عند تشغيل الأمر dd؟
# perf stat dd if=/dev/zero of=test.iso bs=10M count=1

تشير الإحصائيات المعروضة أعلاه، بين أشياء أخرى، إلى ما يلي:
- استغرق تنفيذ الأمر dd 21.812281 ميلي ثانية من وحدة المعالجة المركزية. إذا قسمنا هذا الرقم على قيمة “زمن الثواني المنقضية” أدناه (23.914596 ميلي ثانية)، فإنه يعطي قيمة 0.912 (استخدام وحدة المعالجة المركزية).
- أثناء تنفيذ الأمر، تشير 15 تحويلات السياق (المعروفة أيضًا باسم تبديل العمليات) إلى أن وحدات المعالجة المركزية تم تبديلها 15 مرة من عملية (أو خيط) إلى أخرى.
- 2 هجرات للوحدة المركزية هو النتيجة المتوقعة عندما يتم توزيع العبء بشكل متساوٍ في وحدة معالجة مركزية بنواتين.
خلال تلك الفترة (21.812281 مللي ثانية)، كان إجمالي عدد دورات وحدة المعالجة المركزية التي استهلكت هو 62,025,623، والتي تقسم على 0.021812281 ثانية تعطي 2.843 غيغاهرتز. - إذا قسمنا عدد الدورات على إجمالي عدد التعليمات، سنحصل على 4.9 دورة لكل تعليمة، مما يعني أن كل تعليمة استغرقت ما يقرب من 5 دورات للوحدة المركزية لإكمالها (في المتوسط). يمكننا أن نلوم ذلك (على الأقل جزئيًا) على عدد الفروع والفشل في الفروع (انظر أدناه)، والتي تنتهي بإهدار أو سوء استخدام دورات وحدة المعالجة المركزية.
- أثناء تنفيذ الأمر، واجهنا مجموع 3,552,630 فرعًا. هذا هو التمثيل على مستوى وحدة المعالجة المركزية لنقاط القرار والحلقات في الكود. كلما زاد عدد الفروع، كلما انخفض الأداء. لتعويض ذلك، تحاول جميع وحدات المعالجة المركزية الحديثة توقع تدفق الكود.51,348 فشل في التنبؤ بالفروع يشير إلى أن ميزة التنبؤ كانت خاطئة 1.45% من الوقت.
ينطبق المبدأ نفسه على جمع الإحصائيات (أو بعبارة أخرى، التحليل التفصيلي) أثناء تشغيل تطبيق. فقط قم بتشغيل التطبيق المطلوب وبعد فترة معقولة (التي تعتمد عليك) أغلقه، وستعرض perf الإحصائيات على الشاشة. من خلال تحليل تلك الإحصائيات يمكنك تحديد المشاكل المحتملة.
Perf top
أداة perf top مشابهة لأمر أداة top، حيث تعرض ملف تعريفي للنظام (المعروف أيضًا بالتحليل الحي).
باستخدام الخيار -a
ستعرض جميع أنواع الأحداث المعروفة، في حين يسمح لك الخيار -e
باختيار فئة حدث معينة (كما يتم إرجاعها بواسطة أداة perf list):
ستعرض جميع الأحداث الدورية.
perf top -a
ستعرض جميع الأحداث المتعلقة بساعة المعالجة.
perf top -e cpu-clock

العمود الأول في الناتج أعلاه يمثل نسبة العينات التي تم أخذها منذ بداية التشغيل، مُجمّعة حسب الرمز الوظيفي والكائن المشترك. تتوفر المزيد من الخيارات في دليل أداة perf-top.
تسجيل الأداء
أداة perf record يُشغّل أمرًا ويحفظ البيانات الإحصائية في ملف يسمى perf.data داخل دليل العمل الحالي. يعمل بشكل مماثل لأمر أداة perf stat.
اكتب perf record تليه الأمر:
# perf record dd if=/dev/null of=test.iso bs=10M count=1

تقرير الأداء
أداة perf report تقوم بتنسيق البيانات المجمعة في perf.data أعلاه إلى تقرير أداء:
# sudo perf report

جميع الsubcommands أعلاه لها صفحة تعليمات خاصة يمكن استدعاؤها كالتالي:
# man perf-subcommand
حيث الأوامر الفرعية هي قائمة, إحصاء, أعلى, سجل, أو تقرير. هذه هي الأوامر الفرعية الأكثر استخدامًا؛ والأخرى تظهر في التوثيق (توجه إلى القسم المختصر للرابط).
التوثيق
في هذه الدراسة قمنا بتقديمك لـ perf, أداة مراقبة وتحليل الأداء للLinux. نشجب عليك أن تأكل بشكل كبير التوثيق الذي يحتوي في https://perf.wiki.kernel.org.
إذا وجدت تطبيقات تستخدم نسبة كبيرة من الموارد، قد تنظر إلى تغيير المصدر المتعدد، أو إستخدام بعض ال alternativa.
إذا كان لديك أسئلة حول هذا المقال أو اقتراحات لتحسينه، فنحن في إنتظارك. تفضل بالتواصل معنا بواسطة formula التعليق أدناه.
Source:
https://www.tecmint.com/perf-performance-monitoring-and-analysis-tool-for-linux/