मिलान किया जाता है तो मुझे लगता है कि कुछ कर्नेल मॉड्यूल की शुरूआत सॉफ्टवेयर पर व्यवधान है एक निश्चित नमूना दर।
Perf मॉड्यूल नहीं है, यह लिनक्स कर्नेल,, kernel/events/core.c में और हर समर्थित वास्तुकला और सीपीयू मॉडल के लिए लागू उदाहरण arch/x86/kernel/cpu/perf_event*.c के लिए का हिस्सा है। लेकिन ओप्रोफाइल समान दृष्टिकोण के साथ एक मॉड्यूल था।
Perf आम तौर पर CPU के पीएमयू (प्रदर्शन निरीक्षण इकाई) पूछ कुछ हार्डवेयर प्रदर्शन काउंटर के एन घटनाओं के बाद व्यवधान उत्पन्न करने के लिए कर काम करता है (Yokohama, slide 5 "• इंटरप्ट जब सीमा पर पहुंच गई: नमूना की अनुमति देता है")। वास्तव में यह रूप में लागू किया जा सकता है:
- चयन कुछ पीएमयू काउंटर
-N
, जहां एन नमूना अवधि है करने के लिए इसे प्रारंभ (हम,, एन घटनाओं के बाद बीच में, उदाहरण के लिए चक्र perf record -c 2000000 -e cycles
के 2 लाखों के बाद चाहते हैं, या कुछ एन गणना और perf द्वारा tuned जब कोई अतिरिक्त विकल्प सेट नहीं किया गया है या -F
दिया गया है)
- इस काउंटर को वांछित ईवेंट पर सेट करें, और पीएमयू से अतिप्रवाह (ARCH_PERFMON_EVENTSEL_INT) पर बाधा उत्पन्न करने के लिए कहें। यह हमारे काउंटर की एन वृद्धि के बाद होगा। Nehalem प्रदर्शन की निगरानी यूनिट प्रोग्रामिंग गाइड
EBS - - घटना के आधार सैम्पलिंग https://software.intel.com/sites/default/files/76/87/30320:
सभी आधुनिक प्रतिष्ठा इंटेल इस उदाहरण के लिए, Nehalem का समर्थन करता है। एक तकनीक जिसमें काउंटर बड़ी नकारात्मक गणना के साथ पूर्व लोड होते हैं, और वे ओवरफ्लो पर प्रोसेसर को बाधित करने के लिए कॉन्फ़िगर किए जाते हैं। जब काउंटर इंटरप्ट सेवा नियमित रूप से प्रोफाइलिंग डेटा को ओवरफ्लो करता है।
तो, जब आप हार्डवेयर पीएमयू का उपयोग करते हैं, तो हार्डवेयर पीएमयू काउंटरों के विशेष पढ़ने के साथ टाइमर इंटरप्ट पर कोई अतिरिक्त काम नहीं होता है। कार्य स्विच पर पीएमयू राज्य को सहेजने/पुनर्स्थापित करने के लिए कुछ काम है, लेकिन यह (*_sched_in
/*_sched_out
कर्नेल/घटनाओं/core.c के) पीएमयू काउंटर वैल्यू नहीं बदलेगा और न ही इसे उपयोगकर्ता-स्पेस में निर्यात करेगा।
हैंडलर नहीं है: arch/x86/kernel/cpu/perf_event.c: x86_pmu_handle_irq
जो वर्तमान समय रिकॉर्ड करने के लिए overflowed काउंटर और callsperf_sample_data_init(&data, 0, event->hw.last_period);
पाता है, पिछले निष्पादित आदेश के आईपी (यह सबसे इंटेल microarchitetures के बाहर के आदेश स्वभाव की वजह से अयथार्थ हो सकता है, वहाँ सीमित है कुछ घटनाओं के लिए वैकल्पिक हल - PEBS, perf record -e cycles:pp
), स्टैकट्रेस (यदि -g
रिकॉर्ड में इस्तेमाल किया गया था), आदि तो फिर हैंडलर -N
(x86_perf_event_set_period, wrmsrl(hwc->event_base, (u64)(-left) & x86_pmu.cntval_mask);
के लिए काउंटर मूल्य रीसेट करता है - left
से पहले शून्य से ध्यान दें)
कम नमूना दर, प्रोफाइलर ओवरहेड कम।
Perf आप -F
विकल्प के साथ लक्ष्य नमूना दर निर्धारित करने के लिए, -F 1000
लगभग 1000 आईआरक्यू/एस का मतलब है की अनुमति देता है।उच्च ओवरहेड के कारण उच्च दरों की सिफारिश नहीं की जाती है। दस साल पहले इंटेल वीट्यून ने 1000 से अधिक irq/s (www.cs.utah.edu/~mhall/cs4961f09/VTune-1.pdf "प्रति लॉजिकल सीपीयू प्रति सेकेंड 1000 नमूने प्राप्त करने का प्रयास किया।") , पीईएफ आमतौर पर गैर-रूट के लिए उच्च दर की अनुमति नहीं देता है ("पीआरएफ इंटरप्ट बहुत लंबा समय लेते समय कम दर पर स्वत:" - अपने डीएमएसजी में जांचें; sysctl -a|grep perf
भी देखें, उदाहरण के लिए kernel.perf_cpu_time_max_percent=25
- जिसका अर्थ है कि परफ का उपयोग करने का प्रयास नहीं करेगा 25% सीपीयू)
क्या आप उदाहरण के लिए कार्य शेड्यूलर से पूछ सकते हैं कि जब आप उसे बाधित करते हैं तो क्या चल रहा था?
नहीं। लेकिन तुम sched_switch या अन्य Sched घटना (सूची Sched में सभी उपलब्ध: perf list 'sched:*'
) पर tracepoint सक्षम कर सकते हैं, और पर्फ़ के लिए घटना की रूपरेखा के रूप में उपयोग। तुम भी इस tracepoint पर स्टैकट्रेस रिकॉर्ड करने के लिए पर्फ़ पूछ सकते हैं:
perf record -a -g -e "sched:sched_switch" sleep 10
कि अनुसूचक के निष्पादन
सक्षम tracepoint कार्य करने के लिए कुछ पर्फ़ घटना नमूना काम जोड़ने कर देगा को प्रभावित नहीं करेंगे ट्रेसपॉइंट
कार्य_स्ट्रक्चर ऑब्जेक्ट्स की सूची उपलब्ध है? केवल ftrace के माध्यम से ...
संदर्भ के बारे में जानकारी स्विच
इस घटना पर्फ़ सॉफ्टवेयर है, बस Sched/core.c (परोक्ष रूप से) से PERF_COUNT_SW_CONTEXT_SWITCHES
घटना के साथ perf_sw_event
को कहते हैं। प्रत्यक्ष कॉल के उदाहरण - प्रवास सॉफ्टवेयर घटना: kernel/sched/core.c set_task_cpu(): p->se.nr_migrations++; perf_sw_event(PERF_COUNT_SW_CPU_MIGRATIONS, 1, NULL, 0);
पुनश्च: पर्फ़, ftrace और अन्य रूपरेखा और लिनक्स में अनुरेखण उप पर अच्छा स्लाइड ग्रेग द्वारा देखते हैं: http://www.brendangregg.com/linuxperf.html
वहाँ रूपरेखा में दो बातें कर रहे हैं। गिनती और नमूनाकरण। गिनती के उपाय पूरे निष्पादन के दौरान की घटनाओं के समग्र संख्या निर्देश या कार्यों कि उत्पन्न उन्हें के बारे में कोई जानकारी की पेशकश के बिना। दूसरी ओर, नमूना अनुदेश सूचक .http की पर कब्जा कर लिया नमूने के माध्यम से कोड के लिए घटनाओं की एक संबंध देता है: //openlab.web.cern.ch/sites/openlab.web.cern.ch/ फ़ाइलें/तकनीकी_ दस्तावेज़/TheOverheadOfProfilingUsingPMUhardwareCounters.pdf –