Profiling (computer programming)
সফ্টওয়্যার ইঞ্জিনিয়ারিংয়ের ক্ষেত্রে, প্রোফাইলিং ("প্রোগ্রাম প্রোফাইলিং", "সফ্টওয়্যার প্রোফাইলিং") হল গতিশীল প্রোগ্রাম বিশ্লেষণের একটি রূপ যা পরিমাপ করে, উদাহরণস্বরূপ, কোনও প্রোগ্রামের স্থান (মেমরি) বা সময় জটিলতা, নির্দিষ্ট নির্দেশাবলীর ব্যবহার, বা ফ্রিকোয়েন্সি এবং ফাংশন কলগুলির সময়কাল। সাধারণত, প্রোফাইলিং তথ্য প্রোগ্রাম অপ্টিমাইজেশনে সহায়তা করে এবং আরও নির্দিষ্টভাবে, কর্মক্ষমতা প্রকৌশল। প্রোফাইলার (বা কোড প্রোফাইলার) নামক একটি সরঞ্জাম ব্যবহার করে প্রোগ্রামের সোর্স কোড বা এর বাইনারি এক্সিকিউটেবল ফর্মের যন্ত্রের মাধ্যমে প্রোফাইলিং অর্জন করা হয়। প্রোফাইলাররা বিভিন্ন কৌশল ব্যবহার করতে পারে, যেমন ইভেন্ট-ভিত্তিক, পরিসংখ্যানগত, যন্ত্রযুক্ত এবং সিমুলেশন পদ্ধতি। প্রোগ্রাম ইভেন্ট সংগ্রহ প্রোফাইলাররা তথ্য সংগ্রহের জন্য হার্ডওয়্যার ইন্টারাপ্ট, কোড ইন্সট্রুমেন্টেশন, ইন্সট্রাকশন সেট সিমুলেশন, অপারেটিং সিস্টেম হুক এবং পারফরম্যান্স কাউন্টার সহ বিভিন্ন কৌশল ব্যবহার করে। প্রোফাইলারের ব্যবহার প্রোফাইলারের আউটপুট হতে পারেঃ পর্যবেক্ষণ করা ঘটনাগুলির একটি পরিসংখ্যানগত সারসংক্ষেপ (একটি প্রোফাইল) সংক্ষিপ্ত প্রোফাইল তথ্য প্রায়শই সোর্স কোড স্টেটমেন্টের বিপরীতে ব্যাখ্যা করা হয় যেখানে ঘটনাগুলি ঘটে, তাই পরিমাপের ডেটার আকার প্রোগ্রামের কোডের আকারের সাথে রৈখিক। / *------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ একটি (পূর্ণ) ট্রেসের আকার প্রোগ্রামের নির্দেশের পথের দৈর্ঘ্যের সাথে রৈখিক, যা এটিকে কিছুটা অবাস্তব করে তোলে। সুতরাং একটি ট্রেস একটি প্রোগ্রামের এক পর্যায়ে শুরু করা যেতে পারে এবং আউটপুট সীমাবদ্ধ করার জন্য অন্য সময়ে শেষ করা যেতে পারে। হাইপারভাইজারের সাথে একটি চলমান মিথস্ক্রিয়া (উদাহরণস্বরূপ অন-স্ক্রিন ডিসপ্লের মাধ্যমে অবিচ্ছিন্ন বা পর্যায়ক্রমিক পর্যবেক্ষণ) এটি (এখনও কার্যকর) প্রোগ্রাম সম্পর্কে চলমান মেট্রিক্স দেখার পাশাপাশি কার্যকর করার সময় যে কোনও পছন্দসই বিন্দুতে একটি ট্রেস চালু বা বন্ধ করার সুযোগ প্রদান করে। এটি অন্যান্য সমান্তরাল প্রক্রিয়াগুলির সাথে মিথস্ক্রিয়া আরও বিস্তারিতভাবে পরীক্ষা করার জন্য সমালোচনামূলক বিন্দুতে অ্যাসিঙ্ক্রোনাস প্রক্রিয়াগুলি স্থগিত করার সুযোগও সরবরাহ করে। একটি প্রোফাইলার একটি পৃথক পদ্ধতিতে বা একটি মডিউল বা প্রোগ্রামের স্কেলে প্রয়োগ করা যেতে পারে, দীর্ঘমেয়াদী কোডকে সুস্পষ্ট করে পারফরম্যান্সের বাধাগুলি সনাক্ত করতে। একটি প্রোফাইলার একটি সময় দৃষ্টিকোণ থেকে কোড বোঝার জন্য ব্যবহার করা যেতে পারে, যার উদ্দেশ্য বিভিন্ন রানটাইম পরিস্থিতি বা বিভিন্ন লোড পরিচালনা করার জন্য এটিকে অনুকূল করা। প্রোফাইলিং ফলাফলগুলি একটি সংকলক দ্বারা গ্রহণ করা যেতে পারে যা প্রোফাইল-নির্দেশিত অপ্টিমাইজেশন প্রদান করে। প্রোফাইলিং ফলাফলগুলি একটি পৃথক অ্যালগরিদমের নকশা এবং অপ্টিমাইজেশানকে গাইড করতে ব্যবহার করা যেতে পারে; ক্রাউস ম্যাচিং ওয়াইল্ডকার্ড অ্যালগরিদম একটি উদাহরণ। প্রোফাইলারগুলি কিছু অ্যাপ্লিকেশন পারফরম্যান্স ম্যানেজমেন্ট সিস্টেমে নির্মিত হয় যা বিতরণকৃত অ্যাপ্লিকেশনগুলিতে লেনদেনের কাজের চাপ সম্পর্কে অন্তর্দৃষ্টি প্রদানের জন্য প্রোফাইলিং ডেটা একত্রিত করে। ইতিহাস কর্মক্ষমতা-বিশ্লেষণ সরঞ্জামগুলি 1970-এর দশকের গোড়ার দিক থেকে আইবিএম/360 এবং আইবিএম/370 প্ল্যাটফর্মে বিদ্যমান ছিল, সাধারণত টাইমার ইন্টারাপ্টের উপর ভিত্তি করে যা কোড সম্পাদনে "হট স্পট" সনাক্ত করতে নির্ধারিত টাইমার-বিরতিতে প্রোগ্রাম স্ট্যাটাস ওয়ার্ড (পিএসডাব্লু) রেকর্ড করে। এটি নমুনা সংগ্রহের একটি প্রাথমিক উদাহরণ ছিল (নীচে দেখুন)। 1974 সালের গোড়ার দিকে নির্দেশ-সেট সিমুলেটরগুলি সম্পূর্ণ ট্রেস এবং অন্যান্য কর্মক্ষমতা-পর্যবেক্ষণ বৈশিষ্ট্যগুলির অনুমতি দেয়। ইউনিক্সে প্রোফাইলার-চালিত প্রোগ্রাম বিশ্লেষণ 1973 সাল থেকে শুরু হয়, যখন ইউনিক্স সিস্টেমে একটি মৌলিক সরঞ্জাম, প্রো অন্তর্ভুক্ত ছিল, যা প্রতিটি ফাংশন এবং এটি কতটা প্রোগ্রাম কার্যকর করার সময় ব্যবহার করে তা তালিকাভুক্ত করে। 1982 সালে জি. প্রো. এফ এই ধারণাটিকে একটি সম্পূর্ণ কল গ্রাফ বিশ্লেষণে প্রসারিত করে। 1994 সালে, ডিজিটাল ইকুইপমেন্ট কর্পোরেশনের অমিতাভ শ্রীবাস্তব এবং অ্যালান ইউস্টেস এটিওএম (অ্যানালাইসিস টুলস উইথ ওএম) বর্ণনা করে একটি গবেষণাপত্র প্রকাশ করেন। এটিওএম প্ল্যাটফর্ম একটি প্রোগ্রামকে তার নিজস্ব প্রোফাইলারে রূপান্তর করেঃ সংকলনের সময়, এটি বিশ্লেষণ করার জন্য প্রোগ্রামে কোড সন্নিবেশ করে। সেই সন্নিবেশিত কোড বিশ্লেষণ তথ্য আউটপুট করে। এই কৌশল-নিজেকে বিশ্লেষণ করার জন্য একটি প্রোগ্রামকে সংশোধন করা-"যন্ত্রপাতি" হিসাবে পরিচিত। 2004 সালে জি. প্রো. এবং এ. টি. ও. এম উভয় গবেষণাপত্রই 1999 সালে শেষ হওয়া 20 বছরের জন্য 50টি সবচেয়ে প্রভাবশালী পি. এল. ডি. আই গবেষণাপত্রের তালিকায় স্থান পায়। আউটপুট ফ্ল্যাট প্রোফাইলার ফ্ল্যাট প্রোফাইলারগুলির উপর ভিত্তি করে প্রোফাইলার প্রকারগুলি কল থেকে গড় কলের সময় গণনা করে এবং ক্যালি বা প্রসঙ্গের উপর ভিত্তি করে কলের সময়গুলি ভেঙে দেয় না। কল-গ্রাফ প্রোফাইলার কলের সময় এবং ফাংশনের ফ্রিকোয়েন্সি এবং ক্যালির উপর ভিত্তি করে কল-চেইনগুলিও দেখায়। কিছু সরঞ্জামগুলিতে সম্পূর্ণ প্রসঙ্গ সংরক্ষণ করা হয় না। ইনপুট-সংবেদনশীল প্রোফাইলার ইনপুট-সংবেদনশীল প্রোফাইলারগুলি ইনপুট আকার বা ইনপুট মানের মতো ইনপুট কাজের চাপের বৈশিষ্ট্যগুলির সাথে কর্মক্ষমতা পরিমাপগুলি সম্পর্কিত করে ফ্ল্যাট বা কল-গ্রাফ প্রোফাইলারগুলিতে আরও মাত্রা যুক্ত করে। তারা চার্ট তৈরি করে যা একটি অ্যাপ্লিকেশনের পারফরম্যান্সকে তার ইনপুটের ফাংশন হিসাবে চিহ্নিত করে। প্রোফাইলার ধরনের ডেটা গ্রানুলারিটি প্রোফাইলার, যা নিজেরাই প্রোগ্রাম, তাদের সম্পাদন সম্পর্কে তথ্য সংগ্রহ করে লক্ষ্য প্রোগ্রামগুলি বিশ্লেষণ করে। তাদের ডেটা গ্রানুলারিটির উপর ভিত্তি করে, প্রোফাইলাররা কীভাবে তথ্য সংগ্রহ করে, তাদের ইভেন্ট ভিত্তিক বা পরিসংখ্যানগত প্রোফাইলারে শ্রেণীবদ্ধ করা হয়। প্রোফাইলাররা তথ্য সংগ্রহের জন্য প্রোগ্রাম সম্পাদনে বাধা দেয়, যার ফলে সময় পরিমাপে সীমিত রেজোলিউশন হতে পারে, যা লবণের দানা দিয়ে নেওয়া উচিত। মৌলিক ব্লক প্রোফাইলারগুলি কোডের প্রতিটি লাইন কার্যকর করার জন্য নিবেদিত বেশ কয়েকটি মেশিন ঘড়ি চক্র বা এগুলি একসাথে যোগ করার উপর ভিত্তি করে একটি সময় রিপোর্ট করে; মৌলিক ব্লক প্রতি রিপোর্ট করা সময়গুলি ক্যাশ হিট এবং মিসের মধ্যে পার্থক্য প্রতিফলিত করতে পারে না। ইভেন্ট-ভিত্তিক প্রোফাইলার এখানে তালিকাভুক্ত প্রোগ্রামিং ভাষাগুলিতে ইভেন্ট-ভিত্তিক প্রোফাইলার রয়েছেঃ জাভাঃ জেভিএমটিআই (জেভিএম টুলস ইন্টারফেস) এপিআই, পূর্বে জেভিএমপিআই (জেভিএম প্রোফাইলিং ইন্টারফেস), কল, ক্লাস-লোড, আনলোড, থ্রেড এন্টার লিভের মতো ইভেন্টগুলিকে ট্র্যাপ করার জন্য প্রোফাইলারদের হুক সরবরাহ করে। . NET: প্রোফাইলিং এপিআই ব্যবহার করে সিএলআর-এর সাথে কম সার্ভার হিসাবে একটি প্রোফাইলিং এজেন্ট সংযুক্ত করতে পারেন। জাভার মতো, রানটাইম তখন জেআইটি/এন্টার/লিভ, অবজেক্ট ক্রিয়েশন ইত্যাদির মতো ইভেন্টগুলিকে ট্র্যাপ করার জন্য এজেন্টের মধ্যে বিভিন্ন কলব্যাক সরবরাহ করে। বিশেষত শক্তিশালী যে প্রোফাইলিং এজেন্ট লক্ষ্য অ্যাপ্লিকেশনের বাইটকোডকে নির্বিচারে পুনর্লিখন করতে পারে। পাইথনঃ পাইথন প্রোফাইলিং-এ প্রোফাইল মডিউল, হটশট (যা কল-গ্রাফ ভিত্তিক) এবং সি _ {কল, রিটার্ন, এক্সসেপশন}, পাইথন _ {কল, রিটার্ন, এক্সসেপশন}-এর মতো ঘটনাগুলিকে ট্র্যাপ করতে 'sys.setprofile' ফাংশন ব্যবহার করা হয়। রুবিঃ রুবি প্রোফাইলিংয়ের জন্য পাইথনের অনুরূপ ইন্টারফেসও ব্যবহার করে। profile.rb, মডিউলে ফ্ল্যাট-প্রোফাইলার এবং রুবি-প্রো একটি সি-এক্সটেনশন উপস্থিত রয়েছে। পরিসংখ্যানগত প্রোফাইলার কিছু প্রোফাইলার নমুনা সংগ্রহ করে কাজ করে। একটি স্যাম্পলিং প্রোফাইলার অপারেটিং সিস্টেম ইন্টারাপ্ট ব্যবহার করে নিয়মিত বিরতিতে টার্গেট প্রোগ্রামের কল স্ট্যাক পরীক্ষা করে। স্যাম্পলিং প্রোফাইলগুলি সাধারণত সংখ্যার দিক থেকে কম নির্ভুল এবং নির্দিষ্ট হয়, তবে লক্ষ্য প্রোগ্রামটিকে প্রায় পূর্ণ গতিতে চালানোর অনুমতি দেয়। ফলস্বরূপ প্রাপ্ত তথ্য সঠিক নয়, তবে একটি পরিসংখ্যানগত অনুমান। "ত্রুটির প্রকৃত পরিমাণ সাধারণত একাধিক নমুনা নেওয়ার সময়কালের বেশি হয়। প্রকৃতপক্ষে, যদি একটি মান স্যাম্পলিং পিরিয়ডের n গুণ হয়, তবে এতে প্রত্যাশিত ত্রুটি হল n স্যাম্পলিং পিরিয়ডের বর্গমূল। বাস্তবে, স্যাম্পলিং প্রোফাইলারগুলি প্রায়শই অন্যান্য পদ্ধতির তুলনায় টার্গেট প্রোগ্রামের কার্যকরকরণের আরও সঠিক চিত্র সরবরাহ করতে পারে, কারণ তারা টার্গেট প্রোগ্রামের মতো অনুপ্রবেশকারী নয় এবং এইভাবে তাদের অনেকগুলি পার্শ্ব প্রতিক্রিয়া নেই (যেমন মেমরি ক্যাশে বা নির্দেশ ডিকোডিং পাইপলাইনে)। এছাড়াও যেহেতু তারা কার্যকর করার গতিকে ততটা প্রভাবিত করে না, তাই তারা এমন সমস্যাগুলি সনাক্ত করতে পারে যা অন্যথায় লুকিয়ে থাকবে। তারা তুলনামূলকভাবে ছোট, প্রায়শই বলা হয় রুটিন বা 'টাইট' লুপগুলির দামের অতিরিক্ত মূল্যায়ন করতে পারে না। তারা ব্যবহারকারী মোডে বনাম বিঘ্নিত কার্নেল মোডে যেমন সিস্টেম কল প্রক্রিয়াকরণে ব্যয় করা সময়ের আপেক্ষিক পরিমাণ দেখাতে পারে। তবুও, ইন্টারাপ্টগুলি পরিচালনা করার জন্য কার্নেল কোডটি সিপিইউ চক্রের সামান্য ক্ষতি করে, ক্যাশে ব্যবহারের দিক পরিবর্তন করে এবং নিরবচ্ছিন্ন কার্নেল কোডে (মাইক্রোসেকেন্ড-রেঞ্জ ক্রিয়াকলাপ) ঘটে যাওয়া বিভিন্ন কাজকে আলাদা করতে অক্ষম। ডেডিকেটেড হার্ডওয়্যার এর বাইরেও যেতে পারেঃ এআরএম কর্টেক্স-এম3 এবং কিছু সাম্প্রতিক এমআইপিএস প্রসেসর জেটিএজি ইন্টারফেসের একটি পিসিএসএএমপিএলই রেজিস্টার রয়েছে, যা প্রোগ্রাম কাউন্টারটিকে সত্যিকারের সনাক্তযোগ্য পদ্ধতিতে নমুনা দেয়, যা একটি সমতল প্রোফাইলের অ-অনুপ্রবেশমূলক সংগ্রহের অনুমতি দেয়। জাভা/পরিচালিত কোডের জন্য কিছু সাধারণভাবে ব্যবহৃত পরিসংখ্যানগত প্রোফাইলার হল স্মার্টবিয়ার সফ্টওয়্যারের একিউটাইম এবং মাইক্রোসফ্টের সিএলআর প্রোফাইলার। এই প্রোফাইলারগুলি অ্যাপল ইনকর্পোরেটেডের শার্ক (ওএসএক্স), ওপ্রোফাইল (লিনাক্স), ইন্টেল ভিটুন এবং প্যারালাল এম্প্লিফায়ার (ইন্টেল প্যারালাল স্টুডিওর অংশ) এবং ওরাকল পারফরম্যান্স অ্যানালাইজার সহ নেটিভ কোড প্রোফাইলিং সমর্থন করে। যন্ত্রপাতি এই কৌশলটি কার্যকরভাবে প্রয়োজনীয় তথ্য সংগ্রহের জন্য লক্ষ্য প্রোগ্রামে নির্দেশাবলী যোগ করে। মনে রাখবেন যে কোনও প্রোগ্রামের যন্ত্রের কাজ কর্মক্ষমতার পরিবর্তন ঘটাতে পারে এবং কিছু ক্ষেত্রে ভুল ফলাফল এবং/অথবা হাইজেনবাগ হতে পারে। কোন তথ্য সংগ্রহ করা হচ্ছে, রিপোর্ট করা সময়ের বিবরণের স্তরের উপর এবং যন্ত্রের সাথে মৌলিক ব্লক প্রোফাইলিং ব্যবহার করা হয় কিনা তার উপর প্রভাব নির্ভর করবে। উদাহরণস্বরূপ, প্রতিটি পদ্ধতি/রুটিন কল গণনা করার জন্য কোড যোগ করা সম্ভবত প্রতিটি বিবৃতি কতবার মেনে চলা হয় তা গণনা করার চেয়ে কম প্রভাব ফেলবে। কিছু কম্পিউটারের তথ্য সংগ্রহের জন্য বিশেষ হার্ডওয়্যার রয়েছে; এই ক্ষেত্রে প্রোগ্রামের উপর প্রভাব ন্যূনতম। প্রোফাইলারদের জন্য উপলব্ধ নিয়ন্ত্রণের স্তর এবং সময় রেজোলিউশনের পরিমাণ নির্ধারণের মূল চাবিকাঠি হল যন্ত্র। ম্যানুয়ালঃ প্রোগ্রামার দ্বারা সঞ্চালিত, যেমন। স্পষ্টভাবে রানটাইম গণনা করার জন্য নির্দেশাবলী যোগ করে, কেবল অ্যাপ্লিকেশন রেসপন্স মেজারমেন্ট স্ট্যান্ডার্ডের মতো পরিমাপ এপিআইগুলিতে ইভেন্ট বা কল গণনা করুন। স্বয়ংক্রিয় উৎস স্তরঃ একটি যন্ত্রের নীতি অনুযায়ী একটি স্বয়ংক্রিয় সরঞ্জাম দ্বারা উৎস কোডে যন্ত্রের সংযোজন। মধ্যবর্তী ভাষাঃ একাধিক উচ্চ-স্তরের উৎস ভাষাগুলির জন্য সমর্থন প্রদান করে এবং (অ-প্রতীকী) বাইনারি অফসেট পুনর্লিখনের সমস্যাগুলি এড়ানোর জন্য অ্যাসেম্বলি বা ডিকম্পাইলড বাইটকোডে যন্ত্রপাতি যুক্ত করা হয়। কম্পাইলার অ্যাসিস্টেড বাইনারি ট্রান্সলেশনঃ টুলটি একটি সংকলিত এক্সিকিউটেবল-এ যন্ত্রপাতি যোগ করে। রানটাইম ইন্সট্রুমেন্টেশনঃ কোডটি কার্যকর করার ঠিক আগে ইন্সট্রুমেন্টেশন করা হয়। প্রোগ্রামটি সম্পূর্ণরূপে তত্ত্বাবধান করা হয় এবং টুল দ্বারা নিয়ন্ত্রিত হয়। রানটাইম ইনজেকশনঃ রানটাইম যন্ত্রের চেয়ে বেশি হালকা। সহায়ক ফাংশনগুলিতে ঝাঁপ দেওয়ার জন্য কোডটি রানটাইমে সংশোধন করা হয়। ইন্টারপ্রেটার ইনস্ট্রুমেন্টেশন ইন্টারপ্রেটার ডিবাগ বিকল্পগুলি কর্মক্ষমতা মেট্রিক্সের সংগ্রহকে সক্ষম করতে পারে কারণ ইন্টারপ্রেটার প্রতিটি লক্ষ্য বিবৃতির মুখোমুখি হয়। একটি বাইটকোড, কন্ট্রোল টেবিল বা জেআইটি দোভাষী হল তিনটি উদাহরণ যা সাধারণত লক্ষ্য কোড সম্পাদনের উপর সম্পূর্ণ নিয়ন্ত্রণ রাখে, এইভাবে অত্যন্ত ব্যাপক তথ্য সংগ্রহের সুযোগ সক্ষম করে। হাইপারভাইজার/সিমুলেটর হাইপারভাইজারঃ হাইপারভাইজারের অধীনে (সাধারণত) অপরিবর্তিত প্রোগ্রাম চালানোর মাধ্যমে তথ্য সংগ্রহ করা হয়। উদাহরণস্বরূপঃ সিমমন সিমুলেটর এবং হাইপারভাইজারঃ একটি ইন্সট্রাকশন সেট সিমুলেটরের অধীনে অপরিবর্তিত প্রোগ্রামটি চালিয়ে ইন্টারেক্টিভ এবং নির্বাচিতভাবে ডেটা সংগ্রহ করা হয়। আরও দেখুন অ্যালগরিদমিক দক্ষতা বেঞ্চমার্ক জাভা পারফরম্যান্স পারফরম্যান্স বিশ্লেষণ সরঞ্জামের তালিকা পি. এ. পি. আই হল আধুনিক মাইক্রোপ্রসেসরগুলিতে হার্ডওয়্যার পারফরম্যান্স কাউন্টারগুলির জন্য একটি বহনযোগ্য ইন্টারফেস (একটি লাইব্রেরি আকারে)। পারফরম্যান্স ইঞ্জিনিয়ারিং পারফরম্যান্স পূর্বাভাস পারফরম্যান্স টিউনিং রানটাইম ভেরিফিকেশন প্রোফাইল-গাইডেড অপ্টিমাইজেশন স্ট্যাটিক কোড বিশ্লেষণ সফ্টওয়্যার প্রত্নতত্ত্ব সবচেয়ে খারাপ-কেস এক্সিকিউশন টাইম (ডাব্লুসিইটি) রেফারেন্স বাহ্যিক লিঙ্ক নিবন্ধ আইবিএম যুক্তিসঙ্গত অ্যাপ্লিকেশন ডেভেলপার ব্যবহার করে জাভা অ্যাপ্লিকেশনগুলির এক্সিকিউশন সময় বিশ্লেষণ করার ক্ষেত্রে "গতির প্রয়োজন-পারফরম্যান্সের বাধাগুলি দূর করা"। ভিটিউন পারফরম্যান্স অ্যানালাইজার সফ্টওয়্যার অপ্টিমাইজেশন ব্যবহার করে রানটাইম জেনারেটেড এবং ইন্টারপ্রিটেড কোড প্রোফাইলিং