सभी का सबसे अच्छा, क्या "[अज्ञात]" का अर्थ है नमूना फ़ंक्शन का नाम नहीं समझ सका, क्योंकि यह एक सिस्टम या लाइब्रेरी फ़ंक्शन है। यदि ऐसा है, तो यह ठीक है - आपको परवाह नहीं है, क्योंकि आप में कोड में सिस्टम कोड नहीं के लिए जिम्मेदार चीजों की तलाश में हैं।
असल में, मैं सुझाव दे रहा हूं कि यह उन XY questions में से एक है। भले ही आपको जो भी पूछा गया उसका सीधा जवाब मिल जाए, फिर भी इसका उपयोग कम होने की संभावना है। यहाँ वजहों हैं:
1. सीपीयू रूपरेखा एक मैं में कम इस्तेमाल की है/ओ बाध्य कार्यक्रम
अपने लौ ग्राफ में छोड़ दिया मैं क्या कर रहे हैं/ओ पर दो टावरों, तो वे शायद दाईं ओर बड़े ढेर की तुलना में बहुत अधिक दीवार-समय लें। इस लौ ग्राफ दीवार पर समय के नमूने से प्राप्त किए गए हैं, बल्कि सीपीयू समय नमूनों की तुलना में, यह अधिक है जो आपको बताता है कि नीचे दूसरा ग्राफ, जहां समय वास्तव में चला जाता है दिखाई देगा:
एक क्या था दाईं ओर बड़े रसदार दिखने वाले ढेर को कम कर दिया गया है, इसलिए यह कहीं भी महत्वपूर्ण नहीं है। दूसरी ओर, आई/ओ टावर बहुत व्यापक हैं। उन विस्तृत नारंगी पट्टियों में से कोई भी, यदि यह आपके कोड में है, तो बहुत से समय बचाने के अवसर का प्रतिनिधित्व करता है, यदि कुछ I/O से बचा जा सकता है।
2।चाहे कार्यक्रम CPU- है या मैं/हे बाध्य, speedup के अवसर आसानी से लौ रेखांकन
मान लें कि कुछ समारोह Foo
कि वास्तव में कुछ बेकार कर रहा है, कि अगर आप इसके बारे में पता था, तो आप को ठीक कर सकता है से छुपा सकते हैं। मान लें कि लौ ग्राफ में, यह एक गहरा लाल रंग है। मान लीजिए कि इसे कोड में कई स्थानों से बुलाया जाता है, इसलिए यह सभी ज्वाला ग्राफ में एक स्थान पर एकत्र नहीं किया जाता है। बल्कि यह काला रूपरेखा द्वारा यहाँ दिखाया गया है कई छोटे स्थानों में प्रकट होता है:
सूचना, अगर उन सभी आयतों एकत्र किए गए थे, जैसा कि आप देख सकते हैं कि यह समय की 11% के लिए खातों, जिसका अर्थ है इसे देख लायक है । यदि आप अपना समय आधे में घटा सकते हैं, तो आप कुल 5.5% बचा सकते हैं। यदि यह वास्तव में पूरी तरह से टाला जा सकता है, तो आप कुल मिलाकर 11% बचा सकते हैं। उन छोटे आयतों में से प्रत्येक कुछ भी नीचे नहीं गिर जाएगा, और शेष ग्राफ को इसके दाहिनी तरफ खींच देगा।
अब मैं आपको the method I use दिखाऊंगा। मैं यादृच्छिक ढेर के नमूनों की एक मध्यम संख्या लेता हूं और प्रत्येक दिन नियमित रूप से जांच करता हूं जो तेज हो सकता है। तो जैसे लौ ग्राफ में नमूने लेने से मेल खाती है कि:
पतला खड़ी लाइनों बीस यादृच्छिक समय ढेर नमूने प्रतिनिधित्व करते हैं। जैसा कि आप देख सकते हैं, उनमें से तीन को एक्स के साथ चिह्नित किया गया है। वे लोग हैं जो Foo
से गुजरते हैं। यह सही संख्या के बारे में है, क्योंकि 11% बार 20 2.2 है।
(उलझन में? ठीक है, यहां आपके लिए थोड़ी सी संभावना है। अगर आप 20 बार सिक्का फिसलते हैं, और इसमें सिर आने का 11% मौका है, तो आप कितने सिर प्राप्त करेंगे? तकनीकी रूप से यह एक द्विपदीय वितरण है। सबसे अधिक संभावना नंबर पर आप मिलेगा 2 है, अगले सबसे अधिक संभावना संख्या 1 और 3 कर रहे हैं (आप केवल 1 मिलता है, तो आप जब तक आप 2. पाने के लिए जा रहा रखने के लिए) यहाँ वितरण :)
(है Foo
को देखने के लिए आपको नमूने की औसत संख्या 2/0.11 = 18.2 नमूने है।)
उन 20 नमूनों को देखकर थोड़ा मुश्किल लग सकता है, क्योंकि वे 20 से 50 स्तरों के बीच गहरे भागते हैं। हालांकि, आप मूल रूप से सभी कोड को अनदेखा कर सकते हैं जो आपके नहीं है। बस अपने कोड के लिए उन्हें जांचें। आप देखेंगे कि आप समय व्यतीत कर रहे हैं, और आपके पास कितना मोटा माप होगा। वे मतलब कोड अच्छी तरह से speedups, और के लिए कमरे के बहुत सारे हो सकता है वे आपको बताएंगे कि वो क्या है - दीप ढेर दोनों बुरी खबर और अच्छी खबर है।
कुछ भी आप देखते हैं कि आप अगर आप एक से अधिक नमूना पर देख ऊपर, गति सकता है, आप एक स्वस्थ speedup देते हैं, की गारंटी होगी। कारण आप एक से अधिक नमूने पर यह देखने के लिए किया जाता है, यदि आप केवल एक नमूना पर देख, आप केवल अपने समय को पता की जरूरत है शून्य नहीं है। यदि आप इसे एक से अधिक नमूने पर देखते हैं, तो आप अभी भी नहीं जानते कि इसमें कितना समय लगता है, लेकिन आप जानते हैं कि यह छोटा नहीं है। Here are the statistics.
कामिल जेड यदि ऑफ cpu रूपरेखा कोशिश कर सकते हैं कार्य I/O बाध्य है, ग्रेग ने स्क्रिप्ट प्रकाशित की - http://stackoverflow.com/a/28784580/196561 इसके अलावा, "यादृच्छिक स्टैक नमूने" लेना (उदाहरण के लिए जीडीबी के साथ, या यहां तक कि 'perf record -g' के साथ, फिर 'perf स्क्रिप्ट' कच्चे ढेर के नमूनों को पकड़ने के लिए, मैन्युअल परीक्षा के लिए कई यादृच्छिक ढेर लेना) यहां मदद नहीं कर सकता है क्योंकि 1) अल्पकालिक कार्यक्रम से जुड़ा होना मुश्किल हो सकता है (एलटीटीएनजी के साथ ट्रेसिंग मदद कर सकता है ...) 2) जीडीबी (या परफ रिकॉर्ड) अभी भी प्रतीक नामों की रिपोर्ट नहीं करेगा, फिर भी वाईमिल द्वारा पूछे गए वाई समस्या। आंतरिक node.js/v8 डीबगर उन्हें हल करने में मदद कर सकता है। – osgx
@osgx: मैन्युअल नमूनाकरण के साथ, आपको इसकी परवाह नहीं है कि क्या I/O बाध्य है या नहीं, यह वही काम करता है। यदि कोई दिनचर्या कम रहता है तो आपको परवाह नहीं है - अगर इसे समय के महत्वपूर्ण अंश का उपयोग करने के लिए पर्याप्त समय कहा जाता है, तो नमूने इसे मार देंगे। (यदि पूरा कार्यक्रम नमूना के लिए बहुत तेज़ हो जाता है, तो मैं जो करता हूं वह एक अस्थायी बाहरी पाश जोड़ता है।) मुझे लगता है कि एक प्रोग्रामर की स्थिति में है, स्रोत कोड और डीबगर के साथ। अन्य स्थितियों के लिए मैं सलाह नहीं दे रहा हूं। –
@ माइकडुनलेवी पहली बात मुझे स्पष्ट नहीं है। क्या यह समस्या तब होती है जब धागा प्रोफाइल किया जा रहा है वही धागा जो नमूने उत्पन्न कर रहा है? दूसरे शब्दों में, पहला ग्राफ I/O प्रतीक्षा समय नहीं दिखाता है कि यह प्रतीक्षा कर रहा है और किसी भी नमूने रिकॉर्ड नहीं कर सका। दूसरी ओर, यदि कोई अन्य थ्रेड नमूने उत्पन्न कर रहा है, तो यह लक्ष्य धागे के सभी प्रतीक्षा और प्रसंस्करण समय पर कब्जा कर लेगा और दूसरा ग्राफ उत्पन्न होगा। –