مجموعة متنوعة من أدوات تحليل الأداء قيد التطوير وغير المدعومة لنظام التشغيل Linux ftrace وperf_events (المعروف أيضًا باسم الأمر "perf"). يعد كل من ftrace وperf من أدوات التتبع الأساسية لنظام التشغيل Linux، والمضمنة في مصدر kernel. من المحتمل أن نظامك يحتوي على ftrace بالفعل، وغالبًا ما يكون الأداء مجرد إضافة حزمة (راجع المتطلبات الأساسية).
تم تصميم هذه الأدوات لتكون سهلة التثبيت (أقل التبعيات)، وتوفر إمكانية مراقبة الأداء المتقدمة، وتكون سهلة الاستخدام: افعل شيئًا واحدًا وافعله بشكل جيد. تم إنشاء هذه المجموعة بواسطة Brendan Gregg (مؤلف DTraceToolkit).
تستخدم العديد من هذه الأدوات حلولاً بديلة بحيث تكون الوظيفة ممكنة على نواة Linux الموجودة. ولهذا السبب، تحتوي العديد من الأدوات على تحذيرات (راجع صفحات الدليل)، وينبغي اعتبار تنفيذها عنصرًا نائبًا حتى تتم إضافة ميزات kernel المستقبلية أو أنظمة التتبع الفرعية الجديدة.
هذه مخصصة لنظام التشغيل Linux 3.2 والنواة الأحدث. بالنسبة لنظام التشغيل Linux 2.6.x، راجع التحذيرات.
تم تقديم هذه الأدوات في عرض USENIX LISA 2014: تحليل أداء Linux: أدوات جديدة وأسرار قديمة
باستخدام فترايس:
باستخدام perf_events:
باستخدام إيببف:
عرض العمليات والوسائط الجديدة:
# ./execsnoop تتبع exec(). Ctrl-C للانتهاء. PID PPID ARGS 22898 22004 رجل ل.س 22905 22898 preconv -e UTF-8 22908 22898 بيجر -s 22907 22898 نروف -mandoc -rLL=164n -rLT=164n -Tutf8 22906 22898 الطبل 22911 22910 خريطة محلية ساحرة 22912 22907 جروف -mtty-char -Tutf8 -mandoc -rLL=164n -rLT=164n 22913 22912 تروف -mtty-char -mandoc -rLL=164n -rLT=164n -Tutf8 22914 22912 جروتي
قياس زمن انتقال الإدخال/الإخراج لجهاز الكتلة من قائمة الانتظار حتى الاكتمال:
# ./iolatency -Q تتبع كتلة الإدخال/الإخراج. الإخراج كل 1 ثانية. Ctrl-C للانتهاء. >=(ms) .. <(ms) : الإدخال/الإخراج |التوزيع | 0 -> 1 : 1913 |###############################| 1 -> 2 : 438 |######### | 2 -> 4 : 100 |## | 4 -> 8 : 145 |### | 8 -> 16 : 43 |# | 16 -> 32 : 43 |# | 32 -> 64 : 1 |# | [...]
تتبع الكتلة: نقطة التتبع block_rq_insert، مع تتبعات مكدس kernel، وللقراءات فقط:
# ./tpoint -s block:block_rq_insert 'rwbs ~ "*R*"' cksum-11908 [000] د... 7269839.919098: block_rq_insert: 202,1 R 0 () 736560 + 136 [cksum] cksum-11908 [000] د...7269839.919107: => __elv_add_request => blk_flush_plug_list => blk_finish_plug => __do_page_cache_readahead => ondemand_readahead => page_cache_async_readahead => generic_file_read_iter => new_sync_read => vfs_read => SyS_read => system_call_fastpath [...]
قم بإحصاء استدعاءات دالة kernel التي تبدأ بـ "bio_"، وقم بتلخيص كل ثانية:
# ./funccount -i 1 'bio_*' تتبع "bio_*"... Ctrl-C للنهاية. عدد الوظائف bio_attempt_back_merge 26 bio_get_nr_vecs 361 Bio_alloc 536 Bio_alloc_bioset 536 بيو_إنديو 536 الحيوية الحرة 536 bio_fs_destructor 536 الحيوي 536 _السلامة_الحيوية_ممكنة 536 الحيوية 729 bio_add_page 1004 [...]
هناك العديد من الأمثلة في دليل الأمثلة. راجع أيضًا صفحات الرجل.
القصد هو أقل عدد ممكن. على سبيل المثال، خادم Linux 3.2 بدون معلومات التصحيح. راجع صفحة دليل الأداة للحصول على التفاصيل.
تم تكوين FTRACE في النواة. ربما تم تكوين هذا بالفعل ومتوفر في إصدار النواة الخاص بك، حيث تمت إضافة FTRACE لأول مرة في 2.6.27. يتطلب هذا CONFIG_FTRACE وخيارات FTRACE الأخرى اعتمادًا على الأداة. تتطلب بعض الأدوات (مثل funccount) CONFIG_FUNCTION_PROFILER.
يتطلب تثبيت الأمر "perf". هذا موجود في الحزمة linux-tools-common. بعد تثبيت ذلك، قد يطلب منك الأداء تثبيت حزمة أدوات Linux إضافية (linux-tools -kernel_version ). يمكن أيضًا إنشاء الأداء ضمن الأدوات/الأداء في مصدر kernel. راجع المتطلبات الأساسية لـ perf_events للحصول على مزيد من التفاصيل حول تشغيل perf_events بشكل كامل.
يتطلب نواة مع تمكين خيار CONFIG_DEBUG_FS. كما هو الحال مع FTRACE، قد يكون هذا ممكنًا بالفعل (تمت إضافة تصحيحات الأخطاء في 2.6.10-rc3). يجب أيضًا تثبيت تصحيحات الأخطاء:
# mount -t debugfs none /sys/kernel/debug
تستخدم العديد من البرامج النصية هناك awk، وستحاول استخدام إما mawk أو gawk اعتمادًا على السلوك المطلوب: mawk للإخراج المخزن مؤقتًا (بسبب سرعته)، و gawk للإخراج المتزامن (كما يعمل fflush()، مما يسمح بتجميع أكثر كفاءة للملفات يكتب).
هذه مجرد نصوص. إما الاستيلاء على كل شيء:
git clone --depth 1 https://github.com/brendangregg/perf-tools
أو استخدم الروابط الأولية على جيثب لتنزيل البرامج النصية الفردية. على سبيل المثال:
wget https://raw.githubusercontent.com/brendangregg/perf-tools/master/iosnoop
يؤدي هذا إلى الحفاظ على علامات التبويب (التي يمكن أن تؤدي عملية النسخ واللصق إلى إفسادها).
تمت إضافة Ftrace لأول مرة إلى Linux 2.6.27، وperf_events إلى Linux 2.6.31. كانت هذه الإصدارات المبكرة تحتوي على أخطاء في النواة، وتم الإبلاغ عن حالات الإقفال والذعر في نواة السلسلة 2.6.32. يتضمن ذلك CentOS 6.x. إذا كان عليك تحليل النوى الأقدم، فقد تكون هذه الأدوات مفيدة فقط في بيئة متسامحة مع الأخطاء، مثل المختبر الذي يحتوي على مشكلات محاكاة. تم تطوير هذه الأدوات بشكل أساسي على Linux 3.2 والإصدارات الأحدث.
اعتمادًا على الأداة، قد يتم تكبد تكاليف إضافية أيضًا. انظر القسم التالي.
perf_events يتطور. بدأت هذه المجموعة في التطوير حوالي Linux 3.16، مع خوادم Linux 3.2 كهدف رئيسي، في الوقت الذي تفتقر فيه perf_events إلى إمكانات برمجية معينة (على سبيل المثال، التجميعات المخصصة داخل kernel). من الممكن أن تتم إضافتها في إصدار kernel القادم. وحتى ذلك الحين، تستخدم العديد من هذه الأدوات الحلول والحيل والاختراقات لكي تعمل. تقوم بعض هذه الأدوات بتمرير بيانات الأحداث إلى مساحة المستخدم للمعالجة اللاحقة، الأمر الذي يكلف حملًا أعلى بكثير من التجميعات داخل النواة. يتم وصف النفقات العامة لكل أداة في صفحة الدليل الخاصة بها.
تحذير : في الحالات القصوى ، قد يعمل تطبيقك المستهدف بشكل أبطأ بمقدار 5 مرات عند استخدام هذه الأدوات. اعتمادًا على الأداة وإصدار النواة، قد يكون هناك أيضًا خطر حدوث ذعر النواة. اقرأ رأس البرنامج لمعرفة التحذيرات، واختبره قبل الاستخدام.
إذا كانت النفقات العامة مشكلة، فيمكن تحسين هذه الأدوات. إذا لم تكن الأداة موجودة بالفعل، فيمكن إعادة كتابتها في لغة C لاستخدام perf_events_open() وmmap() للمخزن المؤقت للتتبع. ويمكنه أيضًا تنفيذ عدد الترددات في لغة C، والعمل على mmap() مباشرةً، بدلاً من استخدام awk/Perl/Python. من الممكن إدخال تحسينات إضافية على الأدوات المستندة إلى ftrace، مثل استخدام اللقطات والمخازن المؤقتة لكل مثيل.
تهدف بعض هذه الأدوات إلى أن تكون حلولاً مؤقتة على المدى القصير حتى تتوفر المزيد من إمكانيات kernel، وعند هذه النقطة يمكن إعادة كتابتها بشكل كبير. سيتم الاحتفاظ بالإصدارات الأقدم من هذه الأدوات في هذا المستودع، بالنسبة لإصدارات kernel الأقدم.
نظرًا لأن هدفي الرئيسي هو مجموعة من خوادم Linux 3.2 التي لا تحتوي على معلومات تصحيح الأخطاء، فإن هذه الأدوات تحاول ألا تتطلب ذلك. في بعض الأحيان، يؤدي هذا إلى جعل الأداة أكثر هشاشة مما يجب أن تكون عليه، لأنني أستخدم حلولاً بديلة (قد تكون إصدار kernel ومنصة خاصة) بدلاً من استخدام معلومات debuginfo (والتي يمكن أن تكون عامة). راجع صفحة الدليل للحصول على المتطلبات الأساسية التفصيلية لكل أداة.
لقد حاولت استخدام perf_events ("perf") حيثما أمكن ذلك، حيث تم تطوير هذه الواجهة للاستخدام متعدد المستخدمين. لأسباب مختلفة كنت بحاجة في كثير من الأحيان لاستخدام ftrace بدلا من ذلك. ftrace قوي بشكل مدهش (شكرًا لستيفن روستيدت!)، ولم يتم الكشف عن جميع ميزاته من خلال الأداء، أو في الاستخدام الشائع. تعد مجموعة الأدوات هذه في بعض النواحي عرضًا لميزات Linux المخفية باستخدام ftrace.
نظرًا لأن الأمور تتغير، فمن المحتمل جدًا أن تجد بعض الأدوات لا تعمل على إصدار Linux kernel الخاص بك. ستكون هناك حاجة إلى بعض الخبرة والتجميع لإصلاحها.
دراسة حالة وملخص:
مقالات ذات صلة: