ऐसा लगता है कि लिनक्स में परफ टूल एक ईवेंट रिकॉर्ड करके काम करता है जब काउंटर नियमित अंतराल पर नमूना देने के बजाए एक विशिष्ट मूल्य तक पहुंचते हैं।
कमांड perf record -e cycles,instructions -c 10000
हर 10000 चक्र और हर 10000 निर्देशों को एक ईवेंट स्टोर करता है। इसे एक नए कमांड या मौजूदा पिड के खिलाफ चलाया जा सकता है। यह वर्तमान निर्देशिका में perf.data
पर रिकॉर्ड करता है।
डेटा का विश्लेषण करना एक और मामला है। perf script
का उपयोग करके आप हो जाता है काफी करीब:
ls 16040 2152149.005813: cycles: c113a068 ([kernel.kallsyms])
ls 16040 2152149.005820: cycles: c1576af0 ([kernel.kallsyms])
ls 16040 2152149.005827: cycles: c10ed6aa ([kernel.kallsyms])
ls 16040 2152149.005831: instructions: c1104b30 ([kernel.kallsyms])
ls 16040 2152149.005835: cycles: c11777c1 ([kernel.kallsyms])
ls 16040 2152149.005842: cycles: c10702a8 ([kernel.kallsyms])
...
आप एक स्क्रिप्ट है कि उत्पादन से लाइनों की एक गुच्छा ले जाता है और 'चक्र' और उस सेट में 'निर्देश' की घटनाओं की संख्या की गणना लिखने के लिए की जरूरत है। आप रिकॉर्डिंग कमांड में पैरामीटर -c 10000
को बदलकर संकल्प को समायोजित कर सकते हैं।
मैंने ls /
के विरुद्ध perf stat
और perf record
चलाकर विश्लेषण सत्यापित किया। स्टेट ने 2 634 205 चक्र, 1 725 255 निर्देशों की सूचना दी, जबकि स्क्रिप्ट आउटपुट में 410 चक्र घटनाएं और 18 9 निर्देश घटनाएं थीं। -c
मान जितना छोटा होगा, उतना अधिक ओवरहेड चक्र पढ़ने में लगता है।
विकल्प perf record
पर भी है, जो नियमित अंतराल पर नमूने हैं। हालांकि, इस विकल्प का उपयोग करते समय मुझे काउंटर वैल्यू पुनर्प्राप्त करने का कोई तरीका नहीं मिला।
संपादित करें:perf stat
स्पष्ट रूप से पिड्स पर भी काम करता है, और ctrl-c दबाए जाने तक डेटा कैप्चर करता है। स्रोत को संशोधित करना काफी आसान होना चाहिए ताकि यह हमेशा एन सेकंड के लिए कैप्चर हो और फिर इसे लूप में चलाएं।
कैसे कर आप perf स्क्रिप्ट चलाते हैं? मैंने 'perf रिकॉर्ड-चक्र, निर्देश-सी 10000 -आर एलएस;' 'perf स्क्रिप्ट' चलाने की कोशिश की, लेकिन मुझे ** घातक: कोई event_list! ** त्रुटि नहीं मिली। – Ben
@ स्कीम अजीब, मेरे लिए सिर्फ 'perf script' काम टाइप कर रहा है। क्या आपके लिए 'perf report' काम करता है, यानी रिकॉर्ड किया गया perf.data फ़ाइल ठीक है? – jpa
बाहर निकलता है मैं perf (2.6) के पुराने संस्करण का उपयोग कर रहा था। जैसा कि आपने ऊपर बताया है perf 3.0.38 काम करता है। जब मैं पर्याप्त प्रतिनिधि हूं तो मैं वापस आऊंगा और आपको ऊपर उठाऊंगा। धन्यवाद! – Ben