هذا هو الأمر perf-script-python الذي يمكن تشغيله في موفر الاستضافة المجاني OnWorks باستخدام إحدى محطات العمل المجانية المتعددة عبر الإنترنت مثل Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت
برنامج:
اسم
perf-script-python - معالجة بيانات التتبع باستخدام برنامج Python النصي
موجز
الأداء الإقتصادي الأداء سيناريو [-s [بايثون]:script[.py] ]
الوصف
يُستخدم خيار البرنامج النصي للأداء هذا لمعالجة بيانات البرنامج النصي للأداء باستخدام لغة Python المضمنة في الأداء
مترجم. يقرأ ويعالج ملف الإدخال ويعرض نتائج التتبع
التحليل المطبق في نص بايثون المحدد، إن وجد.
A سريع مثال
يوضح هذا القسم العملية، من البداية إلى النهاية، لإنشاء برنامج نصي يعمل ببايثون
يقوم بتجميع واستخراج المعلومات المفيدة من تدفق البرنامج النصي الخام للأداء. يمكنك تجنب
قراءة بقية هذه الوثيقة إذا كان المثال يكفي بالنسبة لك؛ الباقى من
يوفر المستند مزيدًا من التفاصيل حول كل خطوة ويسرد وظائف المكتبة المتاحة لها
كتاب السيناريو.
يوضح هذا المثال في الواقع الخطوات التي تم استخدامها لإنشاء ملف عدد syscall سيناريو
ترى عندما تقوم بإدراج البرامج النصية المتاحة للأداء عبر الأداء الإقتصادي الأداء سيناريو -l. على هذا النحو، هذا
يُظهر البرنامج النصي أيضًا كيفية دمج البرنامج النصي الخاص بك في قائمة الأغراض العامة الأداء الإقتصادي الأداء
سيناريو البرامج النصية المدرجة بواسطة هذا الأمر.
البرنامج النصي syscall-counts هو برنامج نصي بسيط، ولكنه يوضح جميع الأفكار الأساسية
اللازمة لإنشاء برنامج نصي مفيد. فيما يلي مثال على مخرجاته (أسماء syscall هي
غير مدعومة بعد، وسوف تظهر كأرقام):
.ft ج
أحداث النظام:
عدد الأحداث
---------------------------------------- ---------- -
sys_write 455067
sys_getdents 4072
إغلاق النظام 3037
sys_swapoff 1769
قراءة النظام 923
sys_sched_setparam 826
sys_open 331
sys_newfstat 326
sys_mmap 217
sys_munmap 216
sys_futex 141
sys_select 102
استقصاء النظام 84
sys_setitimer 12
sys_writev 8
15 8
sys_lseek 7
sys_rt_sigprocmask 6
sys_wait4 3
sys_ioctl 3
sys_set_robust_list 1
خروج النظام 1
56 1
sys_access 1
.ft
تتمثل مهمتنا بشكل أساسي في الاحتفاظ بسجل لكل مكالمة نظام يتم تحديثه في كل مرة يتم فيها تشغيل النظام
تحدث المكالمة في النظام. سوف يقوم البرنامج النصي الخاص بنا بذلك، ولكن نحتاج أولاً إلى تسجيل البيانات
التي سيتم معالجتها بواسطة هذا البرنامج النصي. من الناحية النظرية، هناك عدة طرق يمكننا القيام بها
إفعل ذلك:
· يمكننا تمكين كل حدث ضمن دليل التتبع/الأحداث/syscalls، ولكن هذا هو الحال
أكثر من 600 مكالمة نظام، وهو ما يتجاوز العدد المسموح به بواسطة الأداء. هذه syscall الفردية
ومع ذلك، ستكون الأحداث مفيدة إذا أردنا استخدام الإرشادات التي نحصل عليها لاحقًا من
البرامج النصية ذات الأغراض العامة للتعمق والحصول على مزيد من التفاصيل حول مكالمات النظام الفردية
الفائدة.
· يمكننا تمكين sys_enter و/أو sys_exit syscalls الموجودة تحت
tracing/events/raw_syscalls. يتم استدعاؤها لجميع مكالمات النظام؛ ال id يمكن أن يكون المجال
تستخدم للتمييز بين أرقام syscall الفردية.
بالنسبة لهذا البرنامج النصي، نحتاج فقط إلى معرفة أنه تم إدخال syscall؛ نحن لا نهتم كيف ذلك
خرجت، لذلك سوف نستخدم الأداء الإقتصادي الأداء سجل لتسجيل أحداث sys_enter فقط:
.ft ج
# سجل الأداء -a -e Raw_syscalls:sys_enter
^C[سجل الأداء: استيقظت مرة واحدة لكتابة البيانات]
[سجل الأداء: تم الالتقاط وكتابة 56.545 ميغابايت perf.data (حوالي 2470503 عينة)]
.ft
تقول الخيارات بشكل أساسي جمع البيانات لكل حدث syscall على مستوى النظام و
مضاعفة إخراج وحدة المعالجة المركزية في دفق واحد. سيتم تسجيل هذا الدفق الفردي فيه
ملف في الدليل الحالي يسمى perf.data.
بمجرد أن يكون لدينا ملف perf.data يحتوي على بياناتنا، يمكننا استخدام -g الأداء الإقتصادي الأداء سيناريو الخيار ل
قم بإنشاء برنامج نصي لـ Python يحتوي على معالج رد اتصال لكل نوع حدث موجود فيه
تدفق تتبع perf.data (لمزيد من التفاصيل، راجع قسم البرامج النصية للمبتدئين).
.ft ج
# نص الأداء -g بيثون
برنامج بايثون النصي الذي تم إنشاؤه: perf-script.py
تتم تسمية ملف الإخراج الذي تم إنشاؤه أيضًا في الدليل الحالي
perf-script.py. وإليكم الملف بكامله:
# معالجات أحداث البرنامج النصي perf، التي تم إنشاؤها بواسطة برنامج perf script -g python
# مرخص بموجب شروط ترخيص GNU GPL الإصدار 2
# حقول معالج الأحداث common_* هي الحقول الأكثر فائدة المشتركة
# كل الأحداث. لا تتوافق بالضرورة مع الحقول "common_*".
# في ملفات التنسيق. هذه الحقول غير متوفرة كما يمكن لمعلمات المعالج
# يمكن استرجاعها باستخدام وظائف بايثون من النموذج common_*(context).
# راجع وثائق perf-script-python للحصول على قائمة الوظائف المتاحة.
استيراد نظام التشغيل
استيراد تميز الكلية
sys.path.append(os.environ['PERF_EXEC_PATH'] + \
'/ البرامج النصية/python/Perf-Trace-Util/lib/Perf/Trace')
من استيراد perf_trace_context *
من الاستيراد الأساسي *
ديف Trace_begin ():
طباعة "في Trace_begin"
تعريف Trace_end():
طباعة "في Trace_end"
تعريف Raw_syscalls__sys_enter(event_name, context, common_cpu,
common_secs، common_nsecs، common_pid، common_comm،
المعرف والوسائط):
print_header(event_name, common_cpu, common_secs, common_nsecs,
common_pid، common_comm)
طباعة "المعرف=%d, args=%s\n" % \
(المعرف، الوسائط)،
Def Trace_unhandled(event_name, context, common_cpu, common_secs, common_nsecs,
common_pid، common_comm):
print_header(event_name, common_cpu, common_secs, common_nsecs,
common_pid، common_comm)
تعريف print_header(event_name, cpu, secs, nsecs, pid, comm):
اطبع "%-20s %5u %05u.%09u %8u %-20s " % \
(event_name، cpu، secs، nsecs، pid، comm)،
.ft
يوجد في الجزء العلوي كتلة تعليق متبوعة ببعض عبارات الاستيراد ومسار يُلحق بها
يجب أن يتضمن كل برنامج نصي للأداء.
بعد ذلك يتم إنشاء اثنين من الوظائف، Trace_begin () و Trace_end ()، وهما
يتم استدعاؤه في بداية البرنامج النصي ونهايته على التوالي (لمزيد من التفاصيل، راجع ملف
قسم SCRIPT_LAYOUT أدناه).
يلي هؤلاء حدث معالج تم إنشاء دالة واحدة لكل حدث في ملف الأداء الإقتصادي الأداء
سجل انتاج. تأخذ وظائف المعالج شكل النظام الفرعياسم الحدث، و تحتوي على عين
المعلمات، صورة واحدة؟ لـ كل حقل in القادم حدث؛ in قضية، هناك فقط صورة واحدة؟ هدف،
Raw_syscallssys_enter(). (راجع قسم معالجات الأحداث أدناه للحصول على مزيد من المعلومات حول الحدث
معالجات).
يتم إنشاء الدالتين الأخيرتين، مثل دالتي البداية والنهاية، لكل منهما
النصي. يتم استدعاء الأول، Trace_unhandled()، في كل مرة يعثر فيها البرنامج النصي على حدث ما
ملف perf.data الذي لا يتوافق مع أي معالج أحداث في البرنامج النصي. هذا ممكن
يعني إما أن خطوة التسجيل سجلت أنواع الأحداث التي لم تكن مهتمة بها حقًا،
أو تم تشغيل البرنامج النصي مقابل ملف تتبع لا يتوافق مع البرنامج النصي.
يقوم البرنامج النصي الذي تم إنشاؤه بواسطة الخيار -g بطباعة سطر لكل حدث موجود في التتبع
دفق أي أنه في الأساس يقوم فقط بتفريغ الحدث وقيم المعلمات الخاصة به إلى stdout. ال
وظيفة print_header() هي ببساطة وظيفة مساعدة تستخدم لهذا الغرض. دعونا إعادة تسمية
البرنامج النصي وتشغيله لرؤية الإخراج الافتراضي:
.ft ج
# mv perf-script.py syscall-counts.py
# البرنامج النصي للأداء -s syscall-counts.py
Raw_syscalls__sys_enter 1 00840.847582083 7506 معرف الأداء = 1، الحجج =
Raw_syscalls__sys_enter 1 00840.847595764 7506 معرف الأداء = 1، الحجج =
Raw_syscalls__sys_enter 1 00840.847620860 7506 معرف الأداء = 1، الحجج =
Raw_syscalls__sys_enter 1 00840.847710478 6533 معرف npviewer.bin = 78، الحجج =
Raw_syscalls__sys_enter 1 00840.847719204 6533 معرف npviewer.bin = 142، الحجج =
Raw_syscalls__sys_enter 1 00840.847755445 6533 معرف npviewer.bin = 3، الحجج =
Raw_syscalls__sys_enter 1 00840.847775601 6533 معرف npviewer.bin = 3، الحجج =
Raw_syscalls__sys_enter 1 00840.847781820 6533 معرف npviewer.bin = 3، الحجج =
.
.
.
.ft
بالطبع، بالنسبة لهذا البرنامج النصي، نحن لسنا مهتمين بطباعة كل حدث تتبع، بل بالأحرى
تجميعها بطريقة مفيدة. لذلك سوف نتخلص من كل ما يتعلق بالطباعة أيضًا
مثل الدالتين Trace_begin() وtrace_unhandled()، والتي لن نستخدمها. أن يترك
لنا مع هذا الهيكل العظمي أضيق الحدود:
.ft ج
استيراد نظام التشغيل
استيراد تميز الكلية
sys.path.append(os.environ['PERF_EXEC_PATH'] + \
'/ البرامج النصية/python/Perf-Trace-Util/lib/Perf/Trace')
من استيراد perf_trace_context *
من الاستيراد الأساسي *
تعريف Trace_end():
طباعة "في Trace_end"
تعريف Raw_syscalls__sys_enter(event_name, context, common_cpu,
common_secs، common_nsecs، common_pid، common_comm،
المعرف والوسائط):
.ft
في Trace_end()، سنقوم ببساطة بطباعة النتائج، ولكن نحتاج أولاً إلى إنشاء بعض النتائج
لطباعة. للقيام بذلك، نحتاج إلى جعل معالج sys_enter() الخاص بنا يقوم بالفرز اللازم
حتى يتم إحصاء جميع الأحداث. يعد جدول التجزئة المفهرس بواسطة معرف syscall طريقة جيدة للقيام بذلك
تخزين تلك المعلومات؛ في كل مرة يتم فيها استدعاء معالج sys_enter()، نقوم ببساطة بالزيادة
عدد مرتبط بإدخال التجزئة المفهرس بواسطة معرف syscall:
.ft ج
مكالمات النظام = autodict()
محاولة:
مكالمات النظام[المعرف] += 1
باستثناء خطأ في الكتابة:
مكالمات النظام [المعرف] = 1
.ft
مكالمات النظام autodict الكائن هو نوع خاص من قاموس بايثون (تم تنفيذه في
Core.py) الذي ينفذ لغة Perl التنشيط التلقائي التجزئة في بايثون أي مع التنشيط التلقائي
التجزئة، يمكنك تعيين قيم التجزئة المتداخلة دون الاضطرار إلى تحمل مشكلة الإنشاء
المستويات المتوسطة إذا لم تكن موجودة على سبيل المثال syscalls[comm][pid][id] = 1 ستنشئ
مستويات التجزئة المتوسطة وأخيرًا قم بتعيين القيمة 1 لإدخال التجزئة لـ id (لان
القيمة التي تم تعيينها ليست كائن تجزئة بحد ذاتها، بل يتم تعيين القيمة الأولية في
استثناء TypeError. حسنًا، قد تكون هناك طريقة أفضل للقيام بذلك في بايثون ولكن هذا هو الحال
يعمل في الوقت الراهن).
وبوضع هذا الرمز في معالج Raw_syscalls__sys_enter()، سننتهي فعليًا بـ
قاموس أحادي المستوى مرتبط بمعرف syscall ويحتوي على الأعداد التي قمنا بإدراجها كقيم.
تتكرر الدالة print_syscall_totals() عبر الإدخالات الموجودة في القاموس و
يعرض سطرًا لكل إدخال يحتوي على اسم syscall (تحتوي مفاتيح القاموس على
معرفات syscall، التي يتم تمريرها إلى وظيفة Util syscall_name()، والتي تترجم
أرقام syscall الأولية إلى سلاسل اسم syscall المقابلة). الإخراج هو
يتم عرضه بعد معالجة جميع الأحداث الموجودة في التتبع، عن طريق استدعاء
دالة print_syscall_totals() من معالج Trace_end() الذي يتم استدعاؤه في نهاية البرنامج النصي
معالجة.
يظهر النص النهائي الذي ينتج المخرجات الموضحة أعلاه بالكامل أدناه
(المساعد syscall_name() غير متوفر بعد، يمكنك فقط التعامل مع المعرفات في الوقت الحالي):
.ft ج
استيراد نظام التشغيل
استيراد تميز الكلية
sys.path.append(os.environ['PERF_EXEC_PATH'] + \
'/ البرامج النصية/python/Perf-Trace-Util/lib/Perf/Trace')
من استيراد perf_trace_context *
من الاستيراد الأساسي *
من استيراد Util *
مكالمات النظام = autodict()
تعريف Trace_end():
print_syscall_totals()
تعريف Raw_syscalls__sys_enter(event_name, context, common_cpu,
common_secs، common_nsecs، common_pid، common_comm،
المعرف والوسائط):
محاولة:
مكالمات النظام[المعرف] += 1
باستثناء خطأ في الكتابة:
مكالمات النظام [المعرف] = 1
تعريف print_syscall_totals():
إذا لم يكن for_comm بلا:
طباعة "\nأحداث syscall لـ %s:\n\n" % (for_comm)،
آخر:
طباعة "\nأحداث syscall:\n\n"،
طباعة "%-40s %10s\n" % ("الحدث"، "العدد")،
طباعة "%-40s %10s\n" % ("-------------------------------------- ---"، \
"-----------")،
بالنسبة للمعرف، فال في الترتيب (syscalls.iteritems())، المفتاح = lambda(k, v): (v, k), \
عكس = صحيح):
طباعة "%-40s %10d\n" % (syscall_name(id)، val)،
.ft
يمكن تشغيل البرنامج النصي تمامًا كما كان من قبل:
# البرنامج النصي للأداء -s syscall-counts.py
هذه هي الخطوات الأساسية لكتابة البرنامج النصي وتشغيله. يمكن أن تكون العملية
معممًا على أي نقطة تتبع أو مجموعة من نقاط التتبع التي تهتم بها - ابحث بشكل أساسي
نقطة (نقاط) التتبع التي تهتم بها من خلال النظر في قائمة الأحداث المتاحة التي تظهر بها
الأداء الإقتصادي الأداء الإدارية و/أو ابحث في /sys/kernel/debug/tracing الأحداث للحصول على حدث وميدان تفصيلي
معلومات، سجل بيانات التتبع المقابلة باستخدام الأداء الإقتصادي الأداء سجل، وتمريرها على قائمة
أحداث مثيرة للاهتمام، قم بإنشاء نص هيكلي باستخدام الأداء الإقتصادي الأداء سيناريو -g الثعبان وتعديل
رمز لتجميع وعرضه لاحتياجاتك الخاصة.
بعد الانتهاء من ذلك، قد ينتهي بك الأمر إلى الحصول على نص برمجي للأغراض العامة تريد الاحتفاظ به
حولها وتكون متاحة للاستخدام في المستقبل. من خلال كتابة بضعة نصوص برمجية بسيطة جدًا
ووضعها في المكان المناسب، يمكنك إدراج النص الخاص بك جنبًا إلى جنب مع النص الآخر
البرامج النصية المدرجة من قبل الأداء الإقتصادي الأداء سيناريو -l الأمر على سبيل المثال:
.ft ج
root@tropicana:~# perf script -l
قائمة البرامج النصية التتبع المتاحة:
وقت استجابة التنبيه على مستوى النظام (الحد الأدنى/الحد الأقصى/متوسط) وقت استجابة التنبيه
rw حسب الملف نشاط r/w لبرنامج ما، حسب الملف
نشاط r/w على مستوى النظام rw-by-pid
.ft
أحد الآثار الجانبية اللطيفة للقيام بذلك هو أنك تقوم أيضًا بالتقاط الصور الطويلة على الأرجح الأداء الإقتصادي الأداء
سجل الأمر اللازم لتسجيل الأحداث للبرنامج النصي.
لكي يظهر البرنامج النصي كملف مدمج البرنامج النصي، تكتب نصين بسيطين، أحدهما لـ
تسجيل وواحد ل التقارير.
إنّ الـ سجل البرنامج النصي هو برنامج نصي Shell يحمل نفس الاسم الأساسي للبرنامج النصي الخاص بك، ولكن مع
-تم إلحاق السجل. يجب وضع البرنامج النصي Shell في الملف perf/scripts/python/bin
الدليل في شجرة مصدر النواة. في هذا البرنامج النصي، تكتب الأداء الإقتصادي الأداء سجل
سطر الأوامر المطلوب للبرنامج النصي الخاص بك:
.ft ج
# مصدر نواة القط/tools/perf/scripts/python/bin/syscall-counts-record
#!/ بن / باش
سجل الأداء -a -e Raw_syscalls:sys_enter
.ft
إنّ الـ تقرير البرنامج النصي هو أيضًا برنامج نصي Shell يحمل نفس الاسم الأساسي للبرنامج النصي الخاص بك، ولكن مع
-التقرير ملحق. ويجب أن يكون موجودًا أيضًا في دليل perf/scripts/python/bin. في
هذا البرنامج النصي، تكتب الأداء الإقتصادي الأداء سيناريو -s سطر الأوامر اللازم لتشغيل البرنامج النصي الخاص بك:
.ft ج
# مصدر نواة القط/tools/perf/scripts/python/bin/syscall-counts-report
#!/ بن / باش
# الوصف: عدد syscall على مستوى النظام
البرنامج النصي للأداء -s ~/libexec/perf-core/scripts/python/syscall-counts.py
.ft
لاحظ أن موقع البرنامج النصي Python الموجود في البرنامج النصي Shell موجود في ملف
دليل libexec/perf-core/scripts/python - هذا هو المكان الذي سيتم نسخ البرنامج النصي به
جعل تثبيت عند تثبيت الأداء. لتثبيت البرنامج النصي الخاص بك هناك،
يجب أن يكون البرنامج النصي موجودًا في دليل perf/scripts/python في مصدر kernel
شجرة:
.ft ج
# ls -al kernel-source/tools/perf/scripts/python
root@tropicana:/home/trz/src/tip# ls -al Tools/perf/scripts/python
إجمالي 32
drwxr-xr-x 4 trz trz 4096 2010-01-26 22:30 .
drwxr-xr-x 4 trz trz 4096 2010-01-26 22:29 ..
drwxr-xr-x 2 trz trz 4096 2010-01-26 22:29 بن
-rw-r--r-- 1 trz trz 2548 2010-01-26 22:29 check-perf-script.py
drwxr-xr-x 3 trz trz 4096 2010-01-26 22:49 الأداء-Trace-Util
-rw-r--r-- 1 trz trz 1462 2010-01-26 22:30 syscall-counts.py
.ft
بمجرد الانتهاء من ذلك (لا تنس أن تقوم بعمل جديد جعل تثبيت، وإلا فلن يتم تنفيذ البرنامج النصي الخاص بك
تظهر في وقت التشغيل)، الأداء الإقتصادي الأداء سيناريو -l يجب أن يُظهر إدخالاً جديدًا للبرنامج النصي الخاص بك:
.ft ج
root@tropicana:~# perf script -l
قائمة البرامج النصية التتبع المتاحة:
وقت استجابة التنبيه على مستوى النظام (الحد الأدنى/الحد الأقصى/متوسط) وقت استجابة التنبيه
rw حسب الملف نشاط r/w لبرنامج ما، حسب الملف
نشاط r/w على مستوى النظام rw-by-pid
syscall-counts syscall على مستوى النظام
.ft
يمكنك الآن تنفيذ خطوة التسجيل عبر الأداء الإقتصادي الأداء سيناريو سجل:
# سجل البرنامج النصي للأداء syscall-counts
وعرض الإخراج باستخدام الأداء الإقتصادي الأداء سيناريو تقرير:
# تقرير البرنامج النصي لتقرير عدد مرات الاتصال
ابدأ نصوص
يمكنك البدء بسرعة في كتابة برنامج نصي لمجموعة معينة من بيانات التتبع من خلال
إنشاء برنامج نصي هيكلي باستخدام الأداء الإقتصادي الأداء سيناريو -g الثعبان في نفس الدليل مثل
ملف تتبع perf.data الموجود. سيؤدي ذلك إلى إنشاء برنامج نصي للبدء يحتوي على معالج
لكل نوع من أنواع الأحداث في ملف التتبع؛ إنه ببساطة يطبع كل حقل متاح له
كل حدث في ملف التتبع.
يمكنك أيضًا الاطلاع على البرامج النصية الموجودة بتنسيق ~/libexec/perf-core/scripts/python لـ
أمثلة نموذجية توضح كيفية القيام بالأشياء الأساسية مثل بيانات الأحداث المجمعة، وطباعة النتائج،
إلخ. أيضًا، البرنامج النصي check-perf-script.py، على الرغم من أنه ليس مثيرًا للاهتمام بالنسبة لنتائجه،
يحاول ممارسة كافة ميزات البرمجة النصية الرئيسية.
EVENT معالجات
عندما يتم استدعاء البرنامج النصي perf باستخدام برنامج نصي للتتبع ، يتم تحديده من قبل المستخدم معالج وظيفة is
دعا لكل حدث في التتبع. إذا لم يتم تحديد وظيفة معالج لمحددة
نوع الحدث ، يتم تجاهل الحدث (أو تمريره إلى ملف تتبع_التعامل معها وظيفة ، انظر أدناه) و
تتم معالجة الحدث التالي.
يتم تمرير معظم قيم حقل الحدث كوسائط إلى دالة المعالج ؛ بعض
الأقل شيوعًا ليس كذلك - فهذه متوفرة كمكالمات مرة أخرى إلى ملف تنفيذي perf
(انظر أدناه).
كمثال ، يمكن استخدام أمر سجل الأداء التالي لتسجيل كل جدولة_واكيوب
الأحداث في النظام:
# سجل الأداء - الجدول الزمني: Sched_wakeup
يجب تسجيل الآثار التي يُراد معالجتها باستخدام برنامج نصي باستخدام الخيار أعلاه: -a
لتمكين التجميع على مستوى النظام.
يعرّف ملف التنسيق لحدث Sched_wakep الحقول التالية (انظر
/ sys / kernel / debug / tracing / events / Sched / Sched_wakeup / format):
.ft ج
شكل:
الحقل: نوع مشترك قصير بدون توقيع ؛
الحقل: حرف common_flags غير الموقع؛
الحقل: char common_preempt_count بدون توقيع ؛
الحقل: int common_pid ؛
الحقل: char comm [TASK_COMM_LEN] ؛
الحقل: pid_t pid؛
الحقل: كثافة العمليات بريو؛
المجال: نجاح int؛
المجال: int target_cpu ؛
.ft
سيتم تعريف وظيفة المعالج لهذا الحدث على النحو التالي:
.ft ج
Def sched__sched_wakeup(event_name, context, common_cpu, common_secs,
common_nsecs، common_pid، common_comm،
comm، pid، prio، Success، target_cpu):
pass
.ft
تأخذ وظيفة المعالج النموذج subsystem__event_name.
الوسيطات common_* في قائمة وسيطات المعالج هي مجموعة الوسائط التي تم تمريرها إليها
كل معالجي الأحداث تتوافق بعض الحقول مع الحقول المشتركة * في التنسيق
ملف ، ولكن يتم توليف بعضها ، وبعض الحقول _ * الشائعة ليست شائعة بما يكفي لـ
يتم تمريرها إلى كل حدث كوسيطات ولكنها متوفرة كوظائف مكتبة.
فيما يلي وصف موجز لكل من الأحداث الثابتة:
Event_name اسم الحدث كنص
سياق "ملف تعريف الارتباط" غير الشفاف المستخدم في معاودة الاتصال بالأداء
common_cpu وحدة المعالجة المركزية التي وقع عليها الحدث
common_secs جزء الثواني من الطابع الزمني للحدث
common_nsecs هو جزء nsecs من الطابع الزمني للحدث
common_pid معرف المهمة الحالية
common_comm اسم العملية الحالية
جميع الحقول المتبقية في ملف تنسيق الحدث لها نظائرها كمعالج
وسيطات الوظيفة التي تحمل الاسم نفسه ، كما يمكن رؤيته في المثال أعلاه.
يوفر ما سبق الأساسيات اللازمة للوصول مباشرة إلى كل مجال من مجالات كل حدث في
trace ، الذي يغطي 90٪ مما تحتاج إلى معرفته لكتابة نص تتبع مفيد. ال
المقاطع أدناه تغطي الباقي.
SCRIPT نسق
يجب أن يبدأ كل برنامج نصي لـ Python بإعداد مسار بحث لوحدة Python و
"استيراد" بعض وحدات الدعم (انظر أوصاف الوحدة أدناه):
.ft ج
استيراد نظام التشغيل
استيراد تميز الكلية
sys.path.append(os.environ['PERF_EXEC_PATH'] + \
'/ البرامج النصية/python/Perf-Trace-Util/lib/Perf/Trace')
من استيراد perf_trace_context *
من الاستيراد الأساسي *
.ft
يمكن أن تحتوي بقية البرنامج النصي على وظائف المعالج ووظائف الدعم بأي ترتيب.
بصرف النظر عن وظائف معالج الأحداث التي تمت مناقشتها أعلاه، يمكن لكل برنامج نصي تنفيذ مجموعة
من الوظائف الاختيارية:
Trace_begin، إذا تم تعريفه ، يتم استدعاؤه قبل معالجة أي حدث ويعطي البرامج النصية قيمة
فرصة للقيام بمهام الإعداد:
.ft ج
تعريف التتبع_البداية:
pass
.ft
Trace_end، إذا تم تعريفه، فسيتم استدعاؤه بعد معالجة جميع الأحداث ويعطي البرامج النصية ملفًا
فرصة للقيام بمهام نهاية البرنامج النصي، مثل عرض النتائج:
.ft ج
تعريف التتبع_end:
pass
.ft
Trace_unhandled، إذا تم تعريفه ، يتم استدعاؤه بعد أي حدث لا يحتوي على معالج
محددة صراحة لذلك. يتم تمرير المجموعة القياسية من الوسائط الشائعة إليها:
.ft ج
Def Trace_unhandled(event_name, context, common_cpu, common_secs,
common_nsecs، common_pid، common_comm):
pass
.ft
توفر الأقسام المتبقية أوصافًا لكل من نصوص الأداء المضمنة المتوفرة
وحدات بايثون والوظائف المرتبطة بها.
متاح MODULES لأي لبس وظائف
تصف الأقسام التالية الوظائف والمتغيرات المتاحة عبر الأداء المتنوع
وحدات البرنامج النصي بيثون. لاستخدام الوظائف والمتغيرات من الوحدة المحددة، قم بإضافة ملف
المقابلة تبدأ من XXXX استيراد سطر إلى البرنامج النصي للأداء.
Core.py وحدة
توفر هذه الوظائف بعض الوظائف الأساسية لنصوص المستخدم.
إنّ الـ flag_str و الرمز_str توفر الوظائف سلاسل يمكن للبشر قراءتها للعلم والرمزية
مجالات. تتوافق هذه مع السلاسل والقيم التي تم تحليلها من طباعة معاهدة المواد الانشطارية مجالات
ملفات تنسيق الحدث:
flag_str(event_name, field_name, field_value) - يُرجع تمثيل السلسلة المطابق لقيمة field_value لحقل العلم field_name للحدث events_name
code_str(event_name, field_name, field_value) - يُرجع تمثيل السلسلة المطابق لقيمة field_value للحقل الرمزي field_name للحدث events_name
إنّ الـ autodict تقوم الدالة بإرجاع نوع خاص من قاموس بايثون الذي ينفذ قاموس بيرل
التنشيط التلقائي التجزئة في بايثون، أي مع التنشيط التلقائي للتجزئة، يمكنك تعيين تجزئة متداخلة
القيم دون الاضطرار إلى تحمل مشكلة إنشاء مستويات متوسطة إذا لم يحدث ذلك
يوجد.
autodict() - يقوم بإرجاع مثيل قاموس التنشيط التلقائي
perf_trace_context وحدة
بعض مشترك الحقول في ملف تنسيق الحدث ليست كلها شائعة ، ولكن يجب أن تكون كذلك
جعلها في متناول البرامج النصية للمستخدم بالرغم من ذلك.
يحدد perf_trace_context مجموعة من الوظائف التي يمكن استخدامها للوصول إلى هذه البيانات في
سياق الحدث الحالي. كل من هذه الوظائف تتوقع متغير السياق، وهو
نفس متغير السياق الذي تم تمريره إلى كل معالج حدث باعتباره الوسيط الثاني.
common_pc(context) - يُرجع عدد common_preempt للحدث الحالي
common_flags(context) - تقوم بإرجاع common_flags للحدث الحالي
common_lock_عمق(سياق) - يُرجع common_lock_عمق للحدث الحالي
Util.py وحدة
وظائف الأداة المختلفة للاستخدام مع البرنامج النصي perf:
nsecs(secs, nsecs) - يُرجع إجمالي nsecs المحدد بزوج ثوانٍ/nsecs
nsecs_secs(nsecs) - يُرجع جزءًا كاملاً من الثواني المعطاة بـ nsecs
nsecs_nsecs(nsecs) - يُرجع باقي nsecs المعطاة nsecs
nsecs_str(nsecs) - يُرجع سلسلة قابلة للطباعة في النموذج secs.nsecs
avg(total, n) - يُرجع المتوسط بالنظر إلى مجموع وإجمالي عدد القيم
استخدم perf-script-python عبر الإنترنت باستخدام خدمات onworks.net