प्रोफाइलिंग (कंप्यूटर प्रोग्रामिंग)

सॉफ्टवेयर इंजीनियरिंग में, प्रोफाइलिंग ("प्रोग्राम प्रोफाइलिंग", "सॉफ्टवेयर प्रोफाइलिंग") गतिशील प्रोग्राम विश्लेषण का एक रूप है जो मापता है, उदाहरण के लिए, किसी प्रोग्राम का स्थान (मेमोरी) या समय की जटिलता, विशेष निर्देशों का उपयोग, या आवृत्ति और फलन कॉल की अवधि। प्रायः, प्रोफाइलिंग जानकारी प्रोग्राम अनुकूलीकरण और अधिक विशेष रूप से, निष्पादन इंजीनियरिंग में सहायता करने के लिए कार्य करती है।

प्रोफाइलिंग को यंत्र द्वारा प्रोग्राम स्रोत कोड या इसके बाइनरी साध्य (एक्जीक्यूटेबल) रूप को एक प्रोफाइलर (या कोड प्रोफाइलर) नामक उपकरण का उपयोग करके प्राप्त किया जाता है। प्रोफाइलर कई अलग-अलग तकनीकों का उपयोग कर सकते हैं, जैसे कि घटना-आधारित, सांख्यिकीय, यंत्रीकृत और अनुकरण के तरीके।

प्रोग्राम की घटनाओं का संग्रहण
प्रोफाइलर डेटा एकत्र करने के लिए विभिन्न प्रकार की तकनीकों का उपयोग करते हैं, जिनमें हार्डवेयर व्यवधान, कोड उपकरण, निर्देश सेट अनुकरण, ऑपरेटिंग सिस्टम हुक और निष्पादन गणक सम्मिलित हैं।

प्रोफाइलर्स का उपयोग


एक प्रोफाइलर का आउटपुट हो सकता है-

/* स्रोत गणना */
 * देखी गई घटनाओं का एक सांख्यिकीय सारांश (एक प्रोफ़ाइल) सारांश प्रोफ़ाइल जानकारी को प्रायः स्रोत कोड विवरण के विरुद्ध व्याख्या की जाती है जहां घटनाएं होती हैं, इसलिए माप डेटा का आकार प्रोग्राम के कोड आकार के लिए रैखिक होता है।

0001        यदि  X = "A"                   0055

0002          तो करें

0003           X गणना में 1 जोड़े         0032

0004            अतिरिक्त

0005        यदि  X = "B"              0055
 * रिकॉर्ड की गई घटनाओं का स्रोत (एक अनुरेख)
 * अनुक्रमिक प्रोग्रामों के लिए, एक सारांश प्रोफ़ाइल प्रायः पर्याप्त होती है, लेकिन समानांतर प्रोग्रामों (संदेशों या समकालन मुद्दों की प्रतीक्षा) में प्रदर्शन की समस्याएं प्रायः घटनाओं के समय के संबंध पर निर्भर करती हैं, इस प्रकार जो हो रहा है उसे समझने के लिए एक पूर्ण अनुरेख की आवश्यकता होती है। एक (पूर्ण) अनुरेख का आकार प्रोग्राम के निर्देश पथ की लंबाई के लिए रैखिक होता है, जिससे यह कुछ हद तक अव्यावहारिक हो जाता है। इसलिए एक प्रोग्राम में एक बिंदु पर एक अनुरेख प्रारम्भ किया जा सकता है और आउटपुट को सीमित करने के लिए दूसरे बिंदु पर समाप्त किया जा सकता है।

लंबे समय तक चलने वाले कोड को स्पष्ट करके निष्पादन बाधाओं की पहचान करने के लिए एक प्रोफाइलर को एक व्यक्तिगत विधि या प्रतिरूपक (मॉड्यूल) या प्रोग्राम के पैमाने पर लागू किया जा सकता है। विभिन्न कार्यावधि स्थितियों या विभिन्न भारों को संभालने के लिए इसे अनुकूलित करने के उद्देश्य से, समय के दृष्टिकोण से कोड को समझने के लिए एक प्रोफाइलर का उपयोग किया जा सकता है। प्रोफाइलिंग परिणामों को एक संकलक द्वारा ग्रहण किया जा सकता है जो प्रोफाइल-निर्देशित अनुकूलन प्रदान करता है। प्रोफाइलिंग परिणामों का उपयोग व्यक्तिगत एल्गोरिथम के डिजाइन और अनुकूलन को निर्देशित करने के लिए किया जा सकता है क्रॉस मैचिंग वाइल्डकार्ड एल्गोरिथम एक उदाहरण है। प्रोफाइलर्स कुछ एप्लिकेशन निष्पादन प्रबंधन प्रणालियों में निर्मित होते हैं जो वितरित एप्लिकेशनों में लेन-देन कार्यभार में अंतर्दृष्टि प्रदान करने के लिए प्रोफाइलिंग डेटा को एकत्रित करते हैं।
 * हाइपरविजर के साथ एक सतत परस्पर क्रिया (उदाहरण के लिए ऑन-स्क्रीन डिस्प्ले के माध्यम से निरंतर या आवधिक निगरानी) यह (अभी भी निष्पादित) प्रोग्राम के बारे में चल रहे मेट्रिक्स को देखने के अलावा निष्पादन के दौरान किसी भी वांछित बिंदु पर अनुरेख को प्रारम्भ या बंद करने का अवसर प्रदान करता है। यह अन्य समानांतर प्रक्रियाओं के साथ अधिक विस्तार से परस्परिक क्रिया की जांच करने के लिए महत्वपूर्ण बिंदुओं पर अतुल्यकालिक प्रक्रियाओं को निलंबित करने का अवसर भी प्रदान करता है।

इतिहास
1970 के दशक की शुरुआत से IBM/360 और IBM/370 प्लेटफॉर्म पर प्रदर्शन-विश्लेषण उपकरण मौजूद थे, जो आमतौर पर टाइमर इंटरप्ट्स पर आधारित होते थे, जो कोड को निष्पादित करने में हॉट स्पॉट का पता लगाने के लिए सेट टाइमर-अंतराल पर कार्यक्रम की स्थिति शब्द (PSW) रिकॉर्ड करते थे। यह नमूनाकरण (सांख्यिकी) का प्रारंभिक उदाहरण था (नीचे देखें)। 1974 की शुरुआत में इंस्ट्रक्शन सेट सिमुलेटर | इंस्ट्रक्शन-सेट सिमुलेटर ने पूर्ण ट्रेस और अन्य प्रदर्शन-निगरानी सुविधाओं की अनुमति दी। यूनिक्स पर प्रोफाइलर-संचालित कार्यक्रम विश्लेषण 1973 से पहले का है, जब यूनिक्स सिस्टम में एक बुनियादी उपकरण शामिल था,, जिसने प्रत्येक फ़ंक्शन को सूचीबद्ध किया और कितने प्रोग्राम निष्पादन समय का उपयोग किया। 1982 में   अवधारणा को पूर्ण कॉल ग्राफ़ विश्लेषण तक विस्तारित किया। 1994 में, डिजिटल उपकरण निगम के अमिताभ श्रीवास्तव और एलन यूस्टेस ने एटीओएम का वर्णन करते हुए एक पेपर प्रकाशित किया (ओएम के साथ विश्लेषण उपकरण)। एटीओएम प्लेटफॉर्म एक प्रोग्राम को अपने स्वयं के प्रोफाइलर में परिवर्तित करता है: संकलन समय पर, यह विश्लेषण किए जाने वाले कार्यक्रम में कोड सम्मिलित करता है। वह डाला गया कोड विश्लेषण डेटा आउटपुट करता है। यह तकनीक - स्वयं का विश्लेषण करने के लिए एक प्रोग्राम को संशोधित करना - इंस्ट्रुमेंटेशन (कंप्यूटर प्रोग्रामिंग) के रूप में जाना जाता है।

2004 में दोनों  और एटीओएम पेपर 1999 में समाप्त होने वाली 20 साल की अवधि के लिए प्रोग्रामिंग लैंग्वेज डिजाइन और कार्यान्वयन पत्रों पर 50 सबसे प्रभावशाली सम्मेलन की सूची में दिखाई दिए।

फ्लैट प्रोफाइलर
फ्लैट प्रोफाइलर्स कॉल से औसत कॉल समय की गणना करते हैं, और कैली या संदर्भ के आधार पर कॉल के समय को नहीं तोड़ते हैं।

कॉल-ग्राफ प्रोफाइलर
ग्राफ प्रोफाइलर्स को कॉल करें कॉल के समय, और कार्यों की आवृत्तियों, और कैली के आधार पर शामिल कॉल-चेन भी दिखाएं। कुछ उपकरणों में पूर्ण संदर्भ संरक्षित नहीं होता है.

इनपुट-संवेदनशील प्रोफाइलर
इनपुट-संवेदनशील प्रोफाइलर इनपुट वर्कलोड की विशेषताओं, जैसे इनपुट आकार या इनपुट मान, के प्रदर्शन उपायों से संबंधित करके फ्लैट या कॉल-ग्राफ़ प्रोफाइलर्स में एक और आयाम जोड़ें। वे चार्ट उत्पन्न करते हैं जो यह दर्शाते हैं कि किसी एप्लिकेशन का प्रदर्शन उसके इनपुट के कार्य के रूप में कैसे मापता है।

प्रोफाइलर प्रकारों में डेटा ग्रैन्युलैरिटी
प्रोफाइलर, जो खुद भी प्रोग्राम होते हैं, उनके निष्पादन पर जानकारी एकत्र करके लक्षित कार्यक्रमों का विश्लेषण करते हैं। उनके डेटा ग्रैन्युलैरिटी के आधार पर, कैसे प्रोफाइलर्स जानकारी एकत्र करते हैं, उन्हें घटना आधारित या सांख्यिकीय प्रोफाइलर्स में वर्गीकृत किया जाता है। प्रोफाइलर जानकारी एकत्र करने के लिए कार्यक्रम के निष्पादन को बाधित करते हैं, जिसके परिणामस्वरूप समय मापन में एक सीमित संकल्प हो सकता है, जिसे नमक के दाने के साथ लिया जाना चाहिए। बेसिक ब्लॉक प्रोफाइलर कोड की प्रत्येक पंक्ति को निष्पादित करने के लिए समर्पित निर्देश के अनुसार कई मशीन चक्रों की रिपोर्ट करते हैं, या इन्हें एक साथ जोड़ने के आधार पर एक समय; हो सकता है कि प्रति बेसिक ब्लॉक में रिपोर्ट किया गया समय सीपीयू कैश हिट और मिस के बीच के अंतर को न दर्शाए।

इवेंट-आधारित प्रोफाइलर
यहां सूचीबद्ध प्रोग्रामिंग भाषाओं में इवेंट-आधारित प्रोफाइलर हैं:
 * जावा (प्रोग्रामिंग भाषा): जावा वर्चुअल मशीन टूल्स इंटरफ़ेस (जेवीएम टूल्स इंटरफेस) एपीआई, पूर्व में जेवीएमपीआई (जेवीएम प्रोफाइलिंग इंटरफेस), कॉल, क्लास-लोड, अनलोड, थ्रेड एंटर लीव जैसी घटनाओं को फंसाने के लिए प्रोफाइलर्स को हुक प्रदान करता है।
 * .NET फ्रेमवर्क | .NET: प्रोफाइलिंग एपीआई का उपयोग करके सीएलआर को एक COM सर्वर के रूप में एक प्रोफाइलिंग एजेंट संलग्न कर सकता है। जावा की तरह, रनटाइम तब एजेंट को विभिन्न कॉलबैक प्रदान करता है, मेथड दुभाषिया / एंटर / लीव, ​​ऑब्जेक्ट क्रिएशन, आदि जैसी घटनाओं को फंसाने के लिए। विशेष रूप से शक्तिशाली इसमें प्रोफाइलिंग एजेंट मनमाने तरीके से लक्ष्य एप्लिकेशन के बायटेकोड को फिर से लिख सकता है।
 * पायथन (प्रोग्रामिंग लैंग्वेज): पायथन प्रोफाइलिंग में प्रोफाइल मॉड्यूल, हॉटशॉट (जो कॉल-ग्राफ आधारित है), और 'sys.setprofile' फ़ंक्शन का उपयोग c_{call,return,Exception}, python_{call, जैसी घटनाओं को ट्रैप करने के लिए शामिल है। वापसी, अपवाद}।
 * रूबी (प्रोग्रामिंग भाषा): रूबी भी प्रोफाइलिंग के लिए पायथन के समान इंटरफ़ेस का उपयोग करती है। Profile.rb में फ्लैट-प्रोफाइलर, मॉड्यूल और रूबी-प्रोफ एक सी-एक्सटेंशन मौजूद हैं।

सांख्यिकीय प्रोफाइलर
कुछ प्रोफाइलर सैम्पलिंग (सांख्यिकी) द्वारा संचालित होते हैं। एक सैंपलिंग प्रोफाइलर ऑपरेटिंग सिस्टम रुकावट डालना्स का उपयोग करके नियमित अंतराल पर लक्ष्य प्रोग्राम के कॉल स्टैक की जांच करता है। नमूनाकरण प्रोफाइल आमतौर पर संख्यात्मक रूप से कम सटीक और विशिष्ट होते हैं, लेकिन लक्ष्य कार्यक्रम को पूर्ण गति से चलाने की अनुमति देते हैं।

परिणामी डेटा सटीक नहीं है, लेकिन एक सांख्यिकीय अनुमान है। त्रुटि की वास्तविक मात्रा आमतौर पर एक से अधिक नमूना लेने की अवधि होती है। वास्तव में, यदि कोई मान नमूना अवधि का n गुना है, तो उसमें अपेक्षित त्रुटि n नमूनाकरण अवधि का वर्गमूल है। व्यवहार में, सैंपलिंग प्रोफाइलर अक्सर अन्य दृष्टिकोणों की तुलना में लक्ष्य कार्यक्रम के निष्पादन की अधिक सटीक तस्वीर प्रदान कर सकते हैं, क्योंकि वे लक्ष्य कार्यक्रम के लिए घुसपैठ नहीं करते हैं, और इस प्रकार उनके कई दुष्प्रभाव नहीं होते हैं (जैसे मेमोरी कैश या निर्देश पर डिकोडिंग पाइपलाइन)। चूंकि वे निष्पादन की गति को ज्यादा प्रभावित नहीं करते हैं, वे उन मुद्दों का पता लगा सकते हैं जो अन्यथा छिपे रहेंगे। वे छोटे, जिन्हें अक्सर रूटीन या 'तंग' लूप कहा जाता है, की लागत के अधिक-मूल्यांकन के प्रति अपेक्षाकृत प्रतिरोधी होते हैं। वे उपयोगकर्ता मोड बनाम इंटरप्टिबल कर्नेल मोड जैसे सिस्टम कॉल प्रोसेसिंग में बिताए गए समय की सापेक्ष मात्रा दिखा सकते हैं।

फिर भी, व्यवधान को संभालने के लिए कर्नेल कोड में सीपीयू चक्रों की मामूली हानि होती है, डायवर्टेड कैश उपयोग होता है, और अबाधित कर्नेल कोड (माइक्रोसेकंड-रेंज गतिविधि) में होने वाले विभिन्न कार्यों को अलग करने में असमर्थ है।

समर्पित हार्डवेयर इससे आगे जा सकता है: ARM Cortex-M3 और कुछ हाल के MIPS प्रोसेसर JTAG इंटरफ़ेस में एक PCSAMPLE रजिस्टर है, जो कार्यक्रम गणक को वास्तव में undetectable तरीके से सैंपल करता है, जिससे एक फ्लैट प्रोफाइल के गैर-दखल देने वाले संग्रह की अनुमति मिलती है।

कुछ आमतौर पर इस्तेमाल किया Java/प्रबंधित कोड के लिए सांख्यिकीय प्रोफाइलर SmartBear Software का AQtime हैं और माइक्रोसॉफ्ट का सीएलआर प्रोफाइलर। वे प्रोफाइलर Apple Inc. के Apple Developer Tools#Shark (OSX) के साथ नेटिव कोड प्रोफाइलिंग का भी समर्थन करते हैं, ओप्रोफाइल (लिनक्स), Intel VTune और Parallel Amplifier (Intel Parallel Studio का हिस्सा), और Oracle Corporation Performance Analyzer, दूसरों के बीच में।

इंस्ट्रुमेंटेशन
यह तकनीक आवश्यक जानकारी एकत्र करने के लिए लक्ष्य कार्यक्रम में प्रभावी रूप से निर्देश जोड़ती है। ध्यान दें कि किसी प्रोग्राम को यंत्र करने से प्रदर्शन में परिवर्तन हो सकता है, और कुछ मामलों में गलत परिणाम और/या heisenbug हो सकते हैं। प्रभाव इस बात पर निर्भर करेगा कि कौन सी जानकारी एकत्र की जा रही है, रिपोर्ट किए गए समय के विवरण के स्तर पर, और बुनियादी ब्लॉक प्रोफाइलिंग का प्रयोग उपकरण के संयोजन के साथ किया जाता है या नहीं। उदाहरण के लिए, प्रत्येक प्रक्रिया/नियमित कॉल को गिनने के लिए कोड जोड़ने से संभवतः प्रत्येक कथन का कितनी बार पालन किया जाता है, यह गिनने से कम प्रभाव पड़ेगा। कुछ कंप्यूटरों में सूचना एकत्र करने के लिए विशेष हार्डवेयर होते हैं; इस मामले में कार्यक्रम पर प्रभाव न्यूनतम है।

इंस्ट्रुमेंटेशन नियंत्रण के स्तर और प्रोफाइलरों के लिए उपलब्ध समय संकल्प की मात्रा निर्धारित करने के लिए महत्वपूर्ण है।
 * मैनुअल: प्रोग्रामर द्वारा निष्पादित, उदा। स्पष्ट रूप से रनटाइम की गणना करने के लिए निर्देशों को जोड़कर, माप एपीआई जैसे कि आवेदन प्रतिक्रिया माप मानक के लिए घटनाओं या कॉलों की गणना करें।
 * स्वचालित स्रोत स्तर: उपकरण नीति के अनुसार स्वचालित उपकरण द्वारा स्रोत कोड में जोड़ा गया उपकरण।
 * इंटरमीडिएट भाषा: कई उच्च-स्तरीय स्रोत भाषाओं के लिए समर्थन देने और (गैर-प्रतीकात्मक) बाइनरी ऑफ़सेट री-राइटिंग मुद्दों से बचने के लिए असेंबली भाषा या विघटित बाईटकोड में जोड़ा गया इंस्ट्रूमेंटेशन।
 * कंपाइलर ने सहायता की
 * बाइनरी अनुवाद: उपकरण एक संकलित निष्पादन योग्य में इंस्ट्रूमेंटेशन जोड़ता है।
 * रनटाइम इंस्ट्रूमेंटेशन: सीधे निष्पादन से पहले कोड को इंस्ट्रूमेंट किया जाता है। प्रोग्राम रन पूरी तरह से टूल द्वारा पर्यवेक्षण और नियंत्रित किया जाता है।
 * रनटाइम इंजेक्शन: रनटाइम इंस्ट्रूमेंटेशन की तुलना में अधिक हल्का। सहायक कार्यों के लिए छलांग लगाने के लिए कोड को रनटाइम पर संशोधित किया जाता है।

दुभाषिया उपकरण

 * दुभाषिया डिबग विकल्प प्रदर्शन मेट्रिक्स के संग्रह को सक्षम कर सकता है क्योंकि दुभाषिया प्रत्येक लक्ष्य कथन का सामना करता है। एक बायटेकोड, नियंत्रण तालिका या समय-समय पर संकलन दुभाषिया तीन उदाहरण हैं जो आमतौर पर लक्ष्य कोड के निष्पादन पर पूर्ण नियंत्रण रखते हैं, इस प्रकार अत्यंत व्यापक डेटा संग्रह अवसरों को सक्षम करते हैं।

हाइपरवाइजर/सिम्युलेटर

 * हाइपरवाइजर: हाइपरवाइजर के तहत (आमतौर पर) अनमॉडिफाइड प्रोग्राम चलाकर डेटा एकत्र किया जाता है। उदाहरण: सिमोन
 * सिम्युलेटर और हाइपरविजर: निर्देश सेट सिम्युलेटर के तहत असंशोधित कार्यक्रम चलाकर डेटा को इंटरैक्टिव और चुनिंदा रूप से एकत्र किया गया।

यह भी देखें

 * एल्गोरिथम दक्षता
 * बेंचमार्क (कंप्यूटिंग)
 * जावा प्रदर्शन
 * प्रदर्शन विश्लेषण उपकरणों की सूची
 * प्रदर्शन अनुप्रयोग प्रोग्रामिंग इंटरफ़ेस आधुनिक माइक्रोप्रोसेसरों पर हार्डवेयर प्रदर्शन काउंटरों के लिए एक पोर्टेबल इंटरफ़ेस (लाइब्रेरी के रूप में) है।
 * प्रदर्शन इंजीनियरिंग
 * प्रदर्शन की भविष्यवाणी
 * प्रदर्शन सुधारना
 * रनटाइम सत्यापन
 * प्रोफ़ाइल-निर्देशित अनुकूलन
 * स्टेटिक कोड विश्लेषण
 * सॉफ्टवेयर पुरातत्व
 * वर्स्ट-केस निष्पादन समय (WCET)

इस पेज में लापता आंतरिक लिंक की सूची

 * कार्यक्रम अनुकूलन
 * गतिशील कार्यक्रम विश्लेषण
 * प्रोफ़ाइल-निर्देशित अनुकूलन
 * लेनदेन प्रक्रिया
 * आवेदन प्रदर्शन प्रबंधन
 * वितरित अभिकलन
 * प्रोग्रामिंग भाषा डिजाइन और कार्यान्वयन पर सम्मेलन
 * निर्देश के अनुसार चक्र
 * पायथन (प्रोग्रामिंग भाषा)
 * सभा की भाषा
 * सिमॉन
 * सबसे खराब स्थिति निष्पादन समय
 * स्थैतिक कोड विश्लेषण
 * प्रदर्शन भविष्यवाणी

बाहरी संबंध

 * Article "Need for speed &mdash; Eliminating performance bottlenecks" on doing execution time analysis of Java applications using IBM Rational Application Developer.
 * Profiling Runtime Generated and Interpreted Code using the VTune Performance Analyzer