Profiling (computer programming)
सॉफ्टवेयर इंजीनियरिंग में, प्रोफाइलिंग ("प्रोग्राम प्रोफाइलिंग", "सॉफ्टवेयर प्रोफाइलिंग") गतिशील प्रोग्राम विश्लेषण का एक रूप है जो मापता है, उदाहरण के लिए, किसी प्रोग्राम की जगह (स्मृति) या समय की जटिलता, विशेष निर्देशों का उपयोग, या आवृत्ति और कार्य कॉल की अवधि। सबसे आम तौर पर, प्रोफाइलिंग जानकारी कार्यक्रम अनुकूलन, और अधिक विशेष रूप से, प्रदर्शन इंजीनियरिंग में सहायता करने का काम करती है। प्रोफाइलिंग या तो प्रोग्राम स्रोत कोड या इसके द्विआधारी निष्पादन योग्य रूप को प्रोफाइलर (या कोड प्रोफाइलर) नामक उपकरण का उपयोग करके प्राप्त किया जाता है। प्रोफाइलर कई अलग-अलग तकनीकों का उपयोग कर सकते हैं, जैसे कि घटना-आधारित, सांख्यिकीय, उपकरण और अनुकरण विधियाँ। कार्यक्रम आयोजनों को इकट्ठा करने के लिए प्रोफाइलर डेटा एकत्र करने के लिए विभिन्न प्रकार की तकनीकों का उपयोग करते हैं, जिसमें हार्डवेयर इंटरप्ट, कोड इंस्ट्रूमेंटेशन, इंस्ट्रक्शन सेट सिमुलेशन, ऑपरेटिंग सिस्टम हुक और परफॉर्मेंस काउंटर शामिल हैं। प्रोफाइलर का उपयोग एक प्रोफाइलर का आउटपुट हो सकता हैः देखी गई घटनाओं का एक सांख्यिकीय सारांश (एक प्रोफ़ाइल) सारांश प्रोफ़ाइल जानकारी को अक्सर स्रोत कोड बयानों के खिलाफ एनोटेट किया जाता है जहां घटनाएं होती हैं, इसलिए माप डेटा का आकार प्रोग्राम के कोड आकार के लिए रैखिक होता है। / *------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ एक (पूर्ण) निशान का आकार कार्यक्रम के निर्देश पथ की लंबाई के लिए रैखिक है, जिससे यह कुछ हद तक अव्यावहारिक हो जाता है। इसलिए एक कार्यक्रम में एक बिंदु पर एक निशान शुरू किया जा सकता है और उत्पादन को सीमित करने के लिए दूसरे बिंदु पर समाप्त किया जा सकता है। हाइपरवाइजर के साथ एक निरंतर बातचीत (उदाहरण के लिए ऑन-स्क्रीन डिस्प्ले के माध्यम से निरंतर या आवधिक निगरानी) यह (अभी भी निष्पादित) कार्यक्रम के बारे में चल रहे मेट्रिक्स को देखने के अलावा निष्पादन के दौरान किसी भी वांछित बिंदु पर एक निशान को चालू या बंद करने का अवसर प्रदान करता है। यह अन्य समानांतर प्रक्रियाओं के साथ बातचीत की अधिक विस्तार से जांच करने के लिए महत्वपूर्ण बिंदुओं पर अतुल्यकालिक प्रक्रियाओं को निलंबित करने का अवसर भी प्रदान करता है। एक प्रोफाइलर को एक व्यक्तिगत विधि पर या एक मॉड्यूल या प्रोग्राम के पैमाने पर लागू किया जा सकता है, ताकि लंबे समय से चलने वाले कोड को स्पष्ट करके प्रदर्शन की बाधाओं की पहचान की जा सके। एक प्रोफाइलर का उपयोग समय के दृष्टिकोण से कोड को समझने के लिए किया जा सकता है, जिसका उद्देश्य विभिन्न रनटाइम स्थितियों या विभिन्न भारों को संभालने के लिए इसे अनुकूलित करना है। प्रोफाइलिंग के परिणामों को एक संकलक द्वारा निगला जा सकता है जो प्रोफ़ाइल-निर्देशित अनुकूलन प्रदान करता है। प्रोफाइलिंग परिणामों का उपयोग एक व्यक्तिगत एल्गोरिथ्म के डिजाइन और अनुकूलन का मार्गदर्शन करने के लिए किया जा सकता है; क्रॉस मैचिंग वाइल्डकार्ड एल्गोरिथ्म एक उदाहरण है। प्रोफाइलर को कुछ अनुप्रयोग प्रदर्शन प्रबंधन प्रणालियों में बनाया जाता है जो वितरित अनुप्रयोगों में लेनदेन कार्यभार में अंतर्दृष्टि प्रदान करने के लिए प्रोफाइलिंग डेटा को एकत्रित करते हैं। इतिहास प्रदर्शन-विश्लेषण उपकरण 1970 के दशक की शुरुआत से आईबीएम/360 और आईबीएम/370 प्लेटफार्मों पर मौजूद थे, जो आमतौर पर टाइमर इंटरप्ट पर आधारित होते थे, जो कोड को निष्पादित करने में "हॉट स्पॉट" का पता लगाने के लिए निर्धारित टाइमर-अंतराल पर प्रोग्राम स्थिति शब्द (पीएसडब्ल्यू) को रिकॉर्ड करते थे। यह नमूने लेने का एक प्रारंभिक उदाहरण था (नीचे देखें)। 1974 की शुरुआत में निर्देश-सेट सिमुलेटर ने पूर्ण निशान और अन्य प्रदर्शन-निगरानी सुविधाओं की अनुमति दी। यूनिक्स पर प्रोफाइलर-संचालित कार्यक्रम विश्लेषण 1973 का है, जब यूनिक्स सिस्टम में एक बुनियादी उपकरण, प्रो शामिल था, जिसमें प्रत्येक कार्य को सूचीबद्ध किया गया था और इसमें कार्यक्रम निष्पादन समय का कितना उपयोग किया गया था। 1982 में जीप्रोफ ने अवधारणा को एक पूर्ण कॉल ग्राफ विश्लेषण तक विस्तारित किया। 1994 में, डिजिटल उपकरण निगम के अमिताभ श्रीवास्तव और एलन यूस्टेस ने ए. टी. ओ. एम. (ओ. एम. के साथ विश्लेषण उपकरण) का वर्णन करते हुए एक पेपर प्रकाशित किया। ए. टी. ओ. एम. प्लेटफॉर्म एक प्रोग्राम को अपने स्वयं के प्रोफाइलर में परिवर्तित करता हैः संकलन के समय, यह विश्लेषण के लिए प्रोग्राम में कोड डालता है। वह अंतःस्थापित कोड विश्लेषण डेटा आउटपुट करता है। यह तकनीक-स्वयं का विश्लेषण करने के लिए एक कार्यक्रम को संशोधित करना-"इंस्ट्रूमेंटेशन" के रूप में जाना जाता है। 2004 में जीप्रोफ और ए. टी. ओ. एम. दोनों पेपर 1999 में समाप्त होने वाली 20 साल की अवधि के लिए 50 सबसे प्रभावशाली पी. एल. डी. आई. पेपरों की सूची में दिखाई दिए। आउटपुट फ्लैट प्रोफाइलर फ्लैट प्रोफाइलर पर आधारित प्रोफाइलर प्रकार कॉल से औसत कॉल समय की गणना करते हैं, और कॉल या संदर्भ के आधार पर कॉल समय को विभाजित नहीं करते हैं। कॉल-ग्राफ प्रोफाइलर कॉल का समय, और कार्यों की आवृत्ति, और कॉल के आधार पर शामिल कॉल-श्रृंखला भी दिखाते हैं। कुछ उपकरणों में पूर्ण संदर्भ संरक्षित नहीं है। इनपुट-सेंसिटिव प्रोफाइलर इनपुट-सेंसिटिव प्रोफाइलर प्रदर्शन उपायों को इनपुट वर्कलोड की विशेषताओं, जैसे इनपुट आकार या इनपुट मूल्यों से संबंधित करके फ्लैट या कॉल-ग्राफ प्रोफाइलर में एक और आयाम जोड़ते हैं। वे चार्ट उत्पन्न करते हैं जो यह दर्शाते हैं कि किसी अनुप्रयोग का प्रदर्शन उसके इनपुट के कार्य के रूप में कैसे मापा जाता है। प्रोफाइलर प्रकारों में डेटा ग्रैनुलेरिटी प्रोफाइलर, जो स्वयं भी प्रोग्राम हैं, लक्ष्य कार्यक्रमों का उनके निष्पादन पर जानकारी एकत्र करके विश्लेषण करते हैं। उनकी डेटा ग्रैनुलरिटी के आधार पर, प्रोफाइलर जानकारी कैसे एकत्र करते हैं, उन्हें घटना आधारित या सांख्यिकीय प्रोफाइलर में वर्गीकृत किया जाता है। प्रोफाइलर जानकारी एकत्र करने के लिए कार्यक्रम के निष्पादन को बाधित करते हैं, जिसके परिणामस्वरूप समय माप में सीमित संकल्प हो सकता है, जिसे नमक के दाने के साथ लिया जाना चाहिए। बेसिक ब्लॉक प्रोफाइलर कोड की प्रत्येक पंक्ति को निष्पादित करने के लिए समर्पित कई मशीन घड़ी चक्रों की रिपोर्ट करते हैं, या इन्हें एक साथ जोड़ने के आधार पर एक समय; प्रति बेसिक ब्लॉक रिपोर्ट किया गया समय कैश हिट और मिस के बीच अंतर को प्रतिबिंबित नहीं कर सकता है। घटना-आधारित प्रोफाइलर यहाँ सूचीबद्ध प्रोग्रामिंग भाषाओं में घटना-आधारित प्रोफाइलर हैंः जावाः जे. वी. एम. टी. आई. (जे. वी. एम. टूल्स इंटरफेस) ए. पी. आई., पूर्व में जे. वी. एम. पी. आई. (जे. वी. एम. प्रोफाइलिंग इंटरफेस), कॉल, क्लास-लोड, अनलोड, थ्रेड एंटर लीव जैसी घटनाओं को ट्रैप करने के लिए प्रोफाइलर को हुक प्रदान करता है। . NET: प्रोफाइलिंग API का उपयोग करके सी. एल. आर. में एक प्रोफाइलिंग एजेंट को COM सर्वर के रूप में संलग्न कर सकते हैं। जावा की तरह, रनटाइम तब एजेंट को विभिन्न कॉलबैक प्रदान करता है, जो जेआईटी/एंटर/लीव, ऑब्जेक्ट क्रिएशन आदि जैसी घटनाओं को फंसाने के लिए होता है। विशेष रूप से शक्तिशाली है कि प्रोफाइलिंग एजेंट लक्ष्य अनुप्रयोग के बाइटकोड को मनमाने तरीके से फिर से लिख सकता है। पायथनः पायथन प्रोफाइलिंग में प्रोफ़ाइल मॉड्यूल, हॉटशॉट (जो कॉल-ग्राफ आधारित है), और c _ {कॉल, रिटर्न, एक्सेप्शन}, पायथन _ {कॉल, रिटर्न, एक्सेप्शन} जैसी घटनाओं को ट्रैप करने के लिए 'sys.setprofile' फ़ंक्शन का उपयोग करना शामिल है। रूबीः रूबी भी प्रोफाइलिंग के लिए पायथन के समान इंटरफेस का उपयोग करता है। profile.rb, मॉड्यूल में फ्लैट-प्रोफाइलर और रूबी-प्रो सी-एक्सटेंशन मौजूद हैं। सांख्यिकीय प्रोफाइलर कुछ प्रोफाइलर नमूने लेकर काम करते हैं। एक सैंपलिंग प्रोफाइलर ऑपरेटिंग सिस्टम इंटरप्ट का उपयोग करके नियमित अंतराल पर लक्ष्य प्रोग्राम के कॉल स्टैक की जांच करता है। सैंपलिंग प्रोफाइल आमतौर पर कम संख्यात्मक रूप से सटीक और विशिष्ट होते हैं, लेकिन लक्ष्य कार्यक्रम को लगभग पूरी गति से चलाने की अनुमति देते हैं। परिणामी आँकड़े सटीक नहीं हैं, बल्कि एक सांख्यिकीय अनुमान हैं। "त्रुटि की वास्तविक मात्रा आमतौर पर एक से अधिक नमूना अवधि होती है। वास्तव में, यदि एक मान नमूना अवधि का n गुना है, तो इसमें अपेक्षित त्रुटि n नमूना अवधि का वर्गमूल है। व्यवहार में, सैंपलिंग प्रोफाइलर अक्सर अन्य दृष्टिकोणों की तुलना में लक्ष्य कार्यक्रम के निष्पादन की अधिक सटीक तस्वीर प्रदान कर सकते हैं, क्योंकि वे लक्ष्य कार्यक्रम के लिए उतने घुसपैठ नहीं करते हैं, और इस प्रकार उनके उतने दुष्प्रभाव नहीं होते हैं (जैसे कि मेमोरी कैश या निर्देश डिकोडिंग पाइपलाइन पर)। इसके अलावा क्योंकि वे निष्पादन की गति को उतना प्रभावित नहीं करते हैं, वे उन मुद्दों का पता लगा सकते हैं जो अन्यथा छिपे होंगे। वे छोटे, जिन्हें अक्सर दिनचर्या या 'तंग' लूप कहा जाता है, की लागत का अधिक मूल्यांकन करने के लिए भी अपेक्षाकृत प्रतिरक्षित हैं। वे उपयोगकर्ता मोड बनाम बाधित करने योग्य कर्नेल मोड जैसे सिस्टम कॉल प्रोसेसिंग में बिताए गए समय की सापेक्ष मात्रा दिखा सकते हैं। फिर भी, व्यवधानों को संभालने के लिए कर्नेल कोड में सीपीयू चक्रों का मामूली नुकसान होता है, कैश उपयोग को मोड़ दिया जाता है, और निर्बाध कर्नेल कोड (माइक्रोसेकंड-रेंज गतिविधि) में होने वाले विभिन्न कार्यों को अलग करने में असमर्थ होता है। समर्पित हार्डवेयर इससे आगे जा सकता हैः ए. आर. एम. कोर्टेक्स-एम. 3 और कुछ हाल के एम. आई. पी. एस. प्रोसेसर जे. टी. ए. जी. इंटरफेस में एक पी. सी. एस. ए. एम. पी. एल. ई. रजिस्टर होता है, जो वास्तव में अज्ञात तरीके से प्रोग्राम काउंटर का नमूना लेता है, जिससे एक सपाट प्रोफ़ाइल के गैर-घुसपैठ संग्रह की अनुमति मिलती है। जावा/प्रबंधित कोड के लिए आमतौर पर उपयोग किए जाने वाले कुछ सांख्यिकीय प्रोफाइलर स्मार्टबियर सॉफ्टवेयर के एक्यूटाइम और माइक्रोसॉफ्ट के सीएलआर प्रोफाइलर हैं। ऐप्पल इंक. की शार्क (ओएसएक्स), ओप्रोफाइल (लिनक्स), इंटेल वीट्यून और पैरेलल एम्पलीफायर (इंटेल पैरेलल स्टूडियो का हिस्सा), और ओरेकल प्रदर्शन विश्लेषक के साथ-साथ ये प्रोफाइलर देशी कोड प्रोफाइलिंग का भी समर्थन करते हैं। उपकरण यह तकनीक प्रभावी रूप से आवश्यक जानकारी एकत्र करने के लिए लक्ष्य कार्यक्रम में निर्देश जोड़ती है। ध्यान दें कि किसी प्रोग्राम को इंस्ट्रूमेंट करने से प्रदर्शन में बदलाव हो सकता है, और कुछ मामलों में गलत परिणाम और/या हाइजेनबग हो सकते हैं। प्रभाव इस बात पर निर्भर करेगा कि कौन सी जानकारी एकत्र की जा रही है, रिपोर्ट किए गए समय के विवरण के स्तर पर, और क्या बुनियादी ब्लॉक प्रोफाइलिंग का उपयोग इंस्ट्रूमेंटेशन के साथ किया जाता है। उदाहरण के लिए, प्रत्येक प्रक्रिया/नियमित कॉल को गिनने के लिए कोड जोड़ने से संभवतः प्रत्येक कथन का कितनी बार पालन किया जाता है, इसकी तुलना में कम प्रभाव पड़ेगा। कुछ कंप्यूटरों में जानकारी एकत्र करने के लिए विशेष हार्डवेयर होता है; इस मामले में प्रोग्राम पर प्रभाव न्यूनतम होता है। प्रलेखनकर्ताओं के लिए उपलब्ध नियंत्रण के स्तर और समय समाधान की मात्रा को निर्धारित करने के लिए उपकरण महत्वपूर्ण है। नियमावलीः प्रोग्रामर द्वारा निष्पादित, जैसे। रनटाइम की स्पष्ट रूप से गणना करने के लिए निर्देशों को जोड़कर, केवल एप्लिकेशन प्रतिक्रिया मापन मानक जैसे माप एपीआई के लिए घटनाओं या कॉल को गिनें। स्वचालित स्रोत स्तरः एक उपकरण नीति के अनुसार एक स्वचालित उपकरण द्वारा स्रोत कोड में उपकरण जोड़ा जाता है। मध्यवर्ती भाषाः कई उच्च-स्तरीय स्रोत भाषाओं के लिए समर्थन देने और (गैर-प्रतीकात्मक) द्विआधारी ऑफसेट पुनर्लेखन मुद्दों से बचने के लिए संयोजन या विघटित बाइटकोड में उपकरण जोड़ा जाता है। संकलक सहायता प्राप्त द्विआधारी अनुवादः यह उपकरण एक संकलित निष्पादन योग्य में उपकरण जोड़ता है। रनटाइम इंस्ट्रूमेंटेशनः निष्पादन से ठीक पहले कोड को इंस्ट्रूमेंट किया जाता है। कार्यक्रम का संचालन पूरी तरह से उपकरण द्वारा पर्यवेक्षण और नियंत्रित किया जाता है। रनटाइम इंजेक्शनः रनटाइम इंस्ट्रूमेंटेशन की तुलना में अधिक हल्का। कोड को सहायक कार्यों में कूदने के लिए रनटाइम पर संशोधित किया जाता है। इंटरप्रेटर उपकरण इंटरप्रेटर डीबग विकल्प प्रदर्शन मेट्रिक्स के संग्रह को सक्षम कर सकते हैं क्योंकि इंटरप्रेटर प्रत्येक लक्ष्य कथन का सामना करता है। एक बाइटकोड, कंट्रोल टेबल या जे. आई. टी. दुभाषिया तीन उदाहरण हैं जो आमतौर पर लक्ष्य कोड के निष्पादन पर पूर्ण नियंत्रण रखते हैं, इस प्रकार अत्यंत व्यापक डेटा संग्रह के अवसरों को सक्षम करते हैं। हाइपरवाइजर/सिम्युलेटर हाइपरवाइजरः डेटा को एक हाइपरवाइजर के तहत (आमतौर पर) अपरिवर्तित प्रोग्राम को चलाकर एकत्र किया जाता है। उदाहरण-सिममॉन सिम्युलेटर और हाइपरवाइजरः निर्देश सेट सिम्युलेटर के तहत अपरिवर्तित प्रोग्राम को चलाकर अंतरक्रियात्मक और चुनिंदा रूप से डेटा एकत्र किया जाता है। एल्गोरिदमिक दक्षता बेंचमार्क जावा प्रदर्शन सूची प्रदर्शन विश्लेषण उपकरण पी. ए. पी. आई. आधुनिक माइक्रोप्रोसेसरों पर हार्डवेयर प्रदर्शन काउंटरों के लिए एक पोर्टेबल इंटरफेस (एक पुस्तकालय के रूप में) है। परफॉरमेंस इंजीनियरिंग परफॉरमेंस प्रेडिक्शन परफॉरमेंस ट्यूनिंग रनटाइम वेरिफिकेशन प्रोफाइल-गाइडेड ऑप्टिमाइजेशन स्टेटिक कोड एनालिसिस सॉफ्टवेयर आर्कियोलॉजी वर्स्ट-केस एग्जीक्यूशन टाइम (डब्ल्यू. सी. ई. टी.) संदर्भ बाहरी लिंक आई. बी. एम. रैशनल एप्लीकेशन डेवलपर का उपयोग करके जावा अनुप्रयोगों के निष्पादन समय विश्लेषण करने पर लेख "गति की आवश्यकता-प्रदर्शन बाधाओं को दूर करना"। वी-ट्यून प्रदर्शन विश्लेषक सॉफ्टवेयर अनुकूलन का उपयोग करके रनटाइम जनरेटेड और इंटरप्रेटेड कोड की रूपरेखा बनाना