2015-07-16 22 views
5

मैं ओवरफैड का विचार पाने के लिए perf का उपयोग कर रहा हूं, मेरे प्रोग्राम के प्रत्येक फ़ंक्शन को कुल निष्पादन समय पर लगाया जाता है। कि के लिए, मैं सीपीयू चक्र घटना का उपयोग करें:पेर्फ कैसे काम करता है?

perf record -e cpu-cycles -c 10000 <binary-with-arguments> 

जब मैं उत्पादन को देखो, मैं एक समारोह के साथ जुड़े कुछ प्रतिशत देखने। लेकिन मेरे लिए क्या समझ में नहीं आता है इस तरह का एक मामला है: फ़ंक्शन ए को फ़ंक्शन बी के भीतर बुलाया जाता है और कहीं और नहीं। लेकिन फंक्शन ए के लिए मुझे प्राप्त ओवरहेड प्रतिशत बी से अधिक है। यदि बी ए कॉल करता है, तो इसका मतलब है कि बी को ए ओवरहेड शामिल करना चाहिए। या मुझसे यहां कुछ छूट रहा है?

उत्तर

5

परफ कमांड आप कॉल स्टैक की किसी भी जानकारी को रिकॉर्ड किए बिना केवल अपने प्रोग्राम का नमूना उपयोग कर रहे हैं। perf report का उपयोग करके आप अपने कॉलिंग संबंधों से स्वतंत्र रूप से अपने कार्यों में पड़ने वाले नमूने की संख्या प्राप्त करते हैं।

आप जब perf report का उपयोग कर एक पेड़ पाने के लिए --call-graph विकल्प का उपयोग कर सकते हैं:

perf record -e cpu-cycles --call-graph dwarf -c 10000 <binary-with-arguments> 
1

Perf चक्र या शाखा-चूक या तो जैसे माप के लिए अपने CPU के मॉडल विशिष्ट रजिस्टरों पर काम करता है। पीएमयू (प्रदर्शन मापन इकाई) नामक एक विशेष भाग सभी प्रकार की घटनाओं की गणना कर रहा है।

तो यदि आप अपने प्रोग्राम की कुछ विशेषताओं को मापते हैं, तो वास्तव में कोई ओवरहेड नहीं है, क्योंकि सीपीयू का पीएमयू वास्तविक गणना से स्वतंत्र रूप से काम करता है।

यदि आप अपने पीएमयू के रजिस्टरकाउंट से अधिक हैं, मापने के लिए सुविधाओं के माध्यम से माप चक्र। पेर्फ [XX%] के साथ यह टिप्पणी करता है।

संबंधित मुद्दे