Profiling (computer programming)
سافٹ ویئر انجینئرنگ میں، پروفائلنگ ("پروگرام پروفائلنگ"، "سافٹ ویئر پروفائلنگ") متحرک پروگرام تجزیہ کی ایک شکل ہے جو پیمائش کرتی ہے، مثال کے طور پر، کسی پروگرام کی جگہ (میموری) یا وقت کی پیچیدگی، مخصوص ہدایات کا استعمال، یا فنکشن کالز کی تعدد اور مدت۔ زیادہ تر عام طور پر، پروفائلنگ کی معلومات پروگرام کو بہتر بنانے میں مدد کرتی ہے، اور خاص طور پر، پرفارمنس انجینئرنگ۔ پروفائلنگ یا تو پروگرام سورس کوڈ یا اس کے بائنری قابل عمل فارم کو پروفائلر (یا کوڈ پروفائلر) نامی ٹول کا استعمال کرتے ہوئے انسٹرومینٹنگ کے ذریعے حاصل کی جاتی ہے۔ پروفائلرز متعدد مختلف تکنیکوں کا استعمال کر سکتے ہیں، جیسے واقعہ پر مبنی، شماریاتی، آلات، اور تخروپن کے طریقے۔ پروگرام کے واقعات کو جمع کرنا پروفائلرز ڈیٹا اکٹھا کرنے کے لیے مختلف قسم کی تکنیکوں کا استعمال کرتے ہیں، جن میں ہارڈ ویئر انٹرپٹس، کوڈ انسٹرومینٹیشن، انسٹرکشن سیٹ سیمولیشن، آپریٹنگ سسٹم ہک، اور پرفارمنس کاؤنٹر شامل ہیں۔ پروفائلرز کا استعمال پروفائلر کا آؤٹ پٹ یہ ہو سکتا ہے: مشاہدہ کیے گئے واقعات کا شماریاتی خلاصہ (ایک پروفائل) خلاصہ پروفائل کی معلومات کو اکثر سورس کوڈ کے بیانات کے خلاف بیان کیا جاتا ہے جہاں واقعات پیش آتے ہیں، لہذا پیمائش کے ڈیٹا کا سائز پروگرام کے کوڈ سائز سے لکیری ہوتا ہے۔ / *-------------ماخذ-----------------------شمار */0001 اگر X = "A" 0055 0002 پھر ڈو 0003 ADD 1 سے XCOUNT 0032 0004 ELSE 0005 اگر X = "B" 0055 ریکارڈ شدہ واقعات کا ایک سلسلہ (ایک سراغ) ترتیب وار پروگراموں کے لیے، ایک خلاصہ پروفائل عام طور پر کافی ہوتا ہے، لیکن متوازی پروگراموں میں کارکردگی کے مسائل (پیغامات یا مطابقت پذیری کے مسائل کا انتظار) اکثر واقعات کے وقت کے تعلق پر منحصر ہوتے ہیں، اس طرح کیا ہو رہا ہے اس کی تفہیم حاصل کرنے کے لیے مکمل سراغ کی ضرورت ہوتی ہے۔ (مکمل) ٹریس کا سائز پروگرام کے انسٹرکشن پاتھ کی لمبائی کے لیے لکیری ہوتا ہے، جس سے یہ کسی حد تک ناقابل عمل ہو جاتا ہے۔ اس لیے آؤٹ پٹ کو محدود کرنے کے لیے ایک ٹریس کو پروگرام کے ایک مقام پر شروع کیا جا سکتا ہے اور دوسرے مقام پر ختم کیا جا سکتا ہے۔ ہائپر وائزر کے ساتھ جاری تعامل (مثال کے طور پر آن اسکرین ڈسپلے کے ذریعے مسلسل یا وقتا فوقتا نگرانی) یہ عمل کے دوران کسی بھی مطلوبہ مقام پر ٹریس کو آن یا آف کرنے کا موقع فراہم کرتا ہے اس کے علاوہ (اب بھی انجام دینے والے) پروگرام کے بارے میں جاری میٹرکس کو دیکھنے کا موقع فراہم کرتا ہے۔ یہ دیگر متوازی عمل کے ساتھ تعاملات کو مزید تفصیل سے جانچنے کے لیے اہم نکات پر غیر متزلزل عمل کو معطل کرنے کا موقع بھی فراہم کرتا ہے۔ ایک پروفائلر کو انفرادی طریقہ کار پر یا کسی ماڈیول یا پروگرام کے پیمانے پر لاگو کیا جا سکتا ہے، تاکہ طویل عرصے سے چلنے والے کوڈ کو واضح بنا کر کارکردگی کی رکاوٹوں کی نشاندہی کی جا سکے۔ ایک پروفائلر کو وقت کے نقطہ نظر سے کوڈ کو سمجھنے کے لیے استعمال کیا جا سکتا ہے، جس کا مقصد اسے مختلف رن ٹائم حالات یا مختلف بوجھ کو سنبھالنے کے لیے بہتر بنانا ہے۔ پروفائلنگ کے نتائج ایک مرتب کے ذریعے حاصل کیے جا سکتے ہیں جو پروفائل گائیڈڈ آپٹیمائزیشن فراہم کرتا ہے۔ پروفائلنگ کے نتائج کو انفرادی الگورتھم کے ڈیزائن اور اصلاح کی رہنمائی کے لیے استعمال کیا جا سکتا ہے۔ کراس میچنگ وائلڈ کارڈز الگورتھم ایک مثال ہے۔ پروفائلرز کچھ ایپلیکیشن پرفارمنس مینجمنٹ سسٹمز میں بنائے جاتے ہیں جو تقسیم شدہ ایپلی کیشنز میں لین دین کے کام کے بوجھ کے بارے میں بصیرت فراہم کرنے کے لیے پروفائلنگ ڈیٹا کو جمع کرتے ہیں۔ ہسٹری پرفارمنس اینالیسس ٹولز 1970 کی دہائی کے اوائل سے آئی بی ایم/360 اور آئی بی ایم/370 پلیٹ فارمز پر موجود تھے، جو عام طور پر ٹائمر انٹرپٹس پر مبنی ہوتے ہیں جو کوڈ کو انجام دینے میں "ہاٹ اسپاٹس" کا پتہ لگانے کے لیے سیٹ ٹائمر وقفوں پر پروگرام اسٹیٹس ورڈ (پی ایس ڈبلیو) کو ریکارڈ کرتے ہیں۔ یہ نمونے لینے کی ابتدائی مثال تھی (نیچے دیکھیں)۔ 1974 کے اوائل میں انسٹرکشن سیٹ سمیلیٹرز نے مکمل ٹریس اور دیگر کارکردگی کی نگرانی کی خصوصیات کی اجازت دی۔ یونیکس پر پروفائلر سے چلنے والے پروگرام کا تجزیہ 1973 کا ہے، جب یونیکس سسٹمز میں ایک بنیادی ٹول، پروفیسر شامل تھا، جس میں ہر فنکشن کو درج کیا گیا تھا اور اس نے پروگرام پر عمل درآمد کا کتنا وقت استعمال کیا تھا۔ 1982 میں جیپروف نے اس تصور کو کال گراف کے مکمل تجزیے تک بڑھا دیا۔ 1994 میں، ڈیجیٹل ایکوپمنٹ کارپوریشن کے امیتابھ سریواستو اور ایلن یوسٹس نے اے ٹی او ایم (اینالیسس ٹولز ود او ایم) کو بیان کرتے ہوئے ایک مقالہ شائع کیا۔ اے ٹی او ایم پلیٹ فارم ایک پروگرام کو اپنے پروفائلر میں تبدیل کرتا ہے: مرتب کرنے کے وقت، یہ تجزیہ کرنے کے لیے پروگرام میں کوڈ داخل کرتا ہے۔ وہ داخل شدہ کوڈ تجزیہ ڈیٹا کو آؤٹ پٹ کرتا ہے۔ یہ تکنیک-خود کا تجزیہ کرنے کے لیے کسی پروگرام میں ترمیم کرنا-"انسٹرومینٹیشن" کے نام سے جانا جاتا ہے۔ 2004 میں جی پروف اور اے ٹی او ایم دونوں پیپرز 1999 میں ختم ہونے والے 20 سالہ عرصے کے لیے 50 سب سے زیادہ بااثر پی ایل ڈی آئی پیپرز کی فہرست میں شامل ہوئے۔ آؤٹ پٹ فلیٹ پروفائلر پر مبنی پروفائلر کی اقسام فلیٹ پروفائلر کالوں سے اوسط کال کے اوقات کا حساب لگاتے ہیں، اور کال یا سیاق و سباق کی بنیاد پر کال کے اوقات کو نہیں توڑتے ہیں۔ کال گراف پروفائلر کال کے اوقات، اور افعال کی تعدد، اور کاللی کی بنیاد پر شامل کال چینز کو بھی دکھاتے ہیں۔ کچھ ٹولز میں مکمل سیاق و سباق محفوظ نہیں ہے۔ ان پٹ حساس پروفائلر ان پٹ حساس پروفائلر کارکردگی کے اقدامات کو ان پٹ ورک لوڈ کی خصوصیات، جیسے ان پٹ سائز یا ان پٹ ویلیوز سے جوڑ کر فلیٹ یا کال گراف پروفائلرز میں مزید جہت کا اضافہ کرتے ہیں۔ وہ چارٹ تیار کرتے ہیں جو اس بات کی خصوصیت رکھتے ہیں کہ کسی ایپلی کیشن کی کارکردگی اس کے ان پٹ کے فنکشن کے طور پر کس طرح پیمائش کرتی ہے۔ پروفائلر کی اقسام میں ڈیٹا گرینولرٹی، جو خود بھی پروگرام ہوتے ہیں، ٹارگٹ پروگراموں کا تجزیہ ان کے نفاذ کے بارے میں معلومات اکٹھا کرکے کرتے ہیں۔ ان کے ڈیٹا گرینولرٹی کی بنیاد پر، پروفائلرز کس طرح معلومات اکٹھا کرتے ہیں، ان کی درجہ بندی واقعہ پر مبنی یا شماریاتی پروفائلرز میں کی جاتی ہے۔ پروفائلرز معلومات اکٹھا کرنے کے لیے پروگرام کے نفاذ میں خلل ڈالتے ہیں، جس کے نتیجے میں وقت کی پیمائش میں محدود ریزولوشن ہو سکتا ہے، جسے نمک کے دانے کے ساتھ لیا جانا چاہیے۔ بنیادی بلاک پروفائلرز کوڈ کی ہر لائن کو انجام دینے کے لیے وقف متعدد مشین کلاک سائیکلوں کی اطلاع دیتے ہیں، یا ان کو ایک ساتھ شامل کرنے پر مبنی وقت ؛ فی بنیادی بلاک کے مطابق بتائے گئے اوقات کیشے ہٹ اور مس کے درمیان فرق کی عکاسی نہیں کر سکتے ہیں۔ ایونٹ پر مبنی پروفائلر یہاں درج پروگرامنگ زبانوں میں ایونٹ پر مبنی پروفائلر ہوتے ہیں: جاوا: جے وی ایم ٹی آئی (جے وی ایم ٹولز انٹرفیس) اے پی آئی، جو پہلے جے وی ایم پی آئی (جے وی ایم پروفائلنگ انٹرفیس) تھا، پروفائلرز کو کالز، کلاس لوڈ، ان لوڈ، تھریڈ انٹر لیف جیسے واقعات کو ٹریپ کرنے کے لیے ہک فراہم کرتا ہے۔ . NET: پروفائلنگ API کا استعمال کرتے ہوئے ایک پروفائلنگ ایجنٹ کو COM سرور کے طور پر CLR سے منسلک کیا جا سکتا ہے۔ جاوا کی طرح، رن ٹائم پھر ایجنٹ میں مختلف کال بیکس فراہم کرتا ہے، جیسے کہ جے آئی ٹی/انٹر/لیو، آبجیکٹ تخلیق وغیرہ جیسے واقعات کو ٹریپ کرنے کے لیے۔ خاص طور پر اس لحاظ سے طاقتور ہے کہ پروفائلنگ ایجنٹ ٹارگٹ ایپلی کیشن کے بائٹ کوڈ کو من مانی طریقوں سے دوبارہ لکھ سکتا ہے۔ ازگر: ازگر پروفائلنگ میں پروفائل ماڈیول، ہاٹ شاٹ (جو کال گراف پر مبنی ہے)، اور c _ {کال، ریٹرن، ایکسپشن}، ازگر _ {کال، ریٹرن، ایکسپشن} جیسے واقعات کو ٹریپ کرنے کے لیے 'sys.setprofile' فنکشن کا استعمال شامل ہے۔ روبی: روبی بھی پروفائلنگ کے لیے ازگر سے ملتا جلتا انٹرفیس استعمال کرتی ہے۔ profile.rb، ماڈیول، اور روبی-پروفیسر اے سی-ایکسٹینشن میں فلیٹ-پروفائلر موجود ہیں۔ شماریاتی پروفائلر کچھ پروفائلر نمونے لے کر کام کرتے ہیں۔ ایک سیمپلنگ پروفائلر آپریٹنگ سسٹم کی رکاوٹوں کا استعمال کرتے ہوئے باقاعدہ وقفوں پر ٹارگٹ پروگرام کے کال اسٹیک کی جانچ کرتا ہے۔ نمونے لینے والے پروفائلز عام طور پر عددی لحاظ سے کم درست اور مخصوص ہوتے ہیں، لیکن ہدف پروگرام کو پوری رفتار کے قریب چلانے کی اجازت دیتے ہیں۔ نتیجے میں حاصل ہونے والے اعداد و شمار درست نہیں ہیں، بلکہ ایک شماریاتی تخمینہ ہے۔ "غلطی کی اصل مقدار عام طور پر نمونے لینے کی ایک سے زیادہ مدت ہوتی ہے۔ درحقیقت، اگر کوئی قدر نمونے لینے کی مدت کا n گنا ہے، تو اس میں متوقع غلطی n نمونے لینے کی مدت کا مربع جڑ ہے۔ عملی طور پر، نمونے لینے والے پروفائلر اکثر دوسرے طریقوں کے مقابلے میں ٹارگٹ پروگرام کے نفاذ کی زیادہ درست تصویر فراہم کر سکتے ہیں، کیونکہ وہ ٹارگٹ پروگرام میں اتنے گھسنے والے نہیں ہوتے ہیں، اور اس طرح ان کے اتنے مضر اثرات نہیں ہوتے ہیں (جیسے کہ میموری کیشز یا انسٹرکشن ڈیکوڈنگ پائپ لائنز پر)۔ اس کے علاوہ چونکہ وہ عمل درآمد کی رفتار کو زیادہ متاثر نہیں کرتے ہیں، اس لیے وہ ان مسائل کا پتہ لگا سکتے ہیں جو بصورت دیگر چھپے ہوں گے۔ وہ چھوٹے، جنہیں اکثر معمولات یا 'تنگ' لوپس کہا جاتا ہے، کی لاگت کا زیادہ اندازہ لگانے سے بھی نسبتا محفوظ ہیں۔ وہ یوزر موڈ بمقابلہ انٹرپٹیبل کرنل موڈ جیسے سسٹم کال پروسیسنگ میں گزارے گئے وقت کی نسبتا مقدار کو دکھا سکتے ہیں۔ پھر بھی، رکاوٹوں کو سنبھالنے کے لیے کرنل کوڈ میں سی پی یو سائیکلوں کا معمولی نقصان ہوتا ہے، کیش کے استعمال کو موڑ دیا جاتا ہے، اور یہ بلاتعطل کرنل کوڈ (مائیکرو سیکنڈ رینج ایکٹیویٹی) میں ہونے والے مختلف کاموں میں فرق کرنے سے قاصر ہے۔ وقف شدہ ہارڈ ویئر اس سے آگے جا سکتا ہے: اے آر ایم کورٹیکس-ایم 3 اور کچھ حالیہ ایم آئی پی ایس پروسیسرز جے ٹی اے جی انٹرفیس میں پی سی ایس اے ایم پی ایل ای رجسٹر ہوتا ہے، جو واقعی ناقابل شناخت انداز میں پروگرام کاؤنٹر کا نمونہ بناتا ہے، جس سے فلیٹ پروفائل کے غیر مداخلت والے مجموعہ کی اجازت ملتی ہے۔ جاوا/منظم کوڈ کے لیے کچھ عام طور پر استعمال ہونے والے شماریاتی پروفائلرز اسمارٹ بیئر سافٹ ویئر کا اے کیو ٹائم اور مائیکروسافٹ کا سی ایل آر پروفائلر ہیں۔ وہ پروفائلرز مقامی کوڈ پروفائلنگ کی بھی حمایت کرتے ہیں، اس کے ساتھ ساتھ ایپل انکارپوریٹڈ کی شارک (او ایس ایکس)، اوپرو فائل (لینکس)، انٹیل وی ٹیون اور متوازی یمپلیفائر (انٹیل متوازی اسٹوڈیو کا حصہ)، اور اوریکل پرفارمنس تجزیہ کار، دوسروں کے درمیان۔ انسٹرومینٹیشن یہ تکنیک مطلوبہ معلومات جمع کرنے کے لیے ٹارگٹ پروگرام میں مؤثر طریقے سے ہدایات شامل کرتی ہے۔ نوٹ کریں کہ کسی پروگرام کو انسٹرومنٹ کرنا کارکردگی میں تبدیلیوں کا سبب بن سکتا ہے، اور بعض صورتوں میں غلط نتائج اور/یا ہائزن بگ کا باعث بن سکتا ہے۔ اثر اس بات پر منحصر ہوگا کہ کون سی معلومات اکٹھا کی جا رہی ہے، رپورٹ کردہ وقت کی تفصیلات کی سطح پر، اور اس بات پر کہ آیا بنیادی بلاک پروفائلنگ کو آلات کے ساتھ مل کر استعمال کیا جاتا ہے۔ مثال کے طور پر، ہر طریقہ کار/معمول کی کال کو شمار کرنے کے لیے کوڈ شامل کرنے کا شاید اس شمار سے کم اثر پڑے گا کہ ہر بیان کی کتنی بار اطاعت کی جاتی ہے۔ کچھ کمپیوٹرز کے پاس معلومات اکٹھا کرنے کے لیے خصوصی ہارڈ ویئر ہوتا ہے ؛ اس صورت میں پروگرام پر اثر کم سے کم ہوتا ہے۔ کنٹرول کی سطح اور پروفائلرز کے لیے دستیاب وقت کے حل کی مقدار کا تعین کرنے کے لیے آلات کلیدی حیثیت رکھتے ہیں۔ دستی: پروگرامر کے ذریعہ انجام دیا گیا، مثال کے طور پر۔ واضح طور پر رن ٹائم کا حساب لگانے کے لیے ہدایات شامل کر کے، صرف واقعات یا کالوں کو پیمائش API جیسے کہ ایپلیکیشن رسپانس پیمائش کے معیار میں شمار کریں۔ خودکار ماخذ کی سطح: آلات کی پالیسی کے مطابق خودکار ٹول کے ذریعے ماخذ کوڈ میں آلات کا اضافہ۔ انٹرمیڈیٹ زبان: اسمبلی یا ڈکمپائلڈ بائٹ کوڈز میں شامل کردہ آلات جو متعدد اعلی سطح کی ماخذ زبانوں کے لیے معاونت فراہم کرتے ہیں اور (غیر علامتی) بائنری آفسیٹ دوبارہ لکھنے کے مسائل سے گریز کرتے ہیں۔ مرتب کرنے والے کی مدد سے بائنری ترجمہ: یہ ٹول ایک مرتب شدہ قابل عمل میں آلات کا اضافہ کرتا ہے۔ رن ٹائم انسٹرومینٹیشن: عمل درآمد سے براہ راست پہلے کوڈ کو انسٹرومینٹ کیا جاتا ہے۔ پروگرام کی مکمل نگرانی اور ٹول کے ذریعے کنٹرول کیا جاتا ہے۔ رن ٹائم انجکشن: رن ٹائم آلات سے زیادہ ہلکا پھلکا۔ ہیلپر فنکشنز پر چھلانگ لگانے کے لیے کوڈ کو رن ٹائم پر تبدیل کیا جاتا ہے۔ انٹرپریٹر انسٹرومینٹیشن انٹرپریٹر ڈیبگ آپشنز کارکردگی کے میٹرکس کو جمع کرنے کے قابل بنا سکتے ہیں کیونکہ انٹرپریٹر ہر ٹارگٹ سٹیٹمنٹ کا سامنا کرتا ہے۔ بائٹ کوڈ، کنٹرول ٹیبل یا جے آئی ٹی ترجمان تین مثالیں ہیں جن کا عام طور پر ٹارگٹ کوڈ پر عمل درآمد پر مکمل کنٹرول ہوتا ہے، اس طرح ڈیٹا اکٹھا کرنے کے انتہائی جامع مواقع کو قابل بناتا ہے۔ ہائپر وائزر/سمیلیٹر ہائپر وائزر: (عام طور پر) غیر تبدیل شدہ پروگرام کو ہائپر وائزر کے تحت چلا کر ڈیٹا اکٹھا کیا جاتا ہے۔ مثال: سمون سمیلیٹر اور ہائپر وائزر: انسٹرکشن سیٹ سمیلیٹر کے تحت غیر تبدیل شدہ پروگرام کو چلا کر انٹرایکٹو اور منتخب طور پر ڈیٹا اکٹھا کیا جاتا ہے۔ الگورتھمک ایفیشنسی بینچ مارک جاوا پرفارمنس لسٹ آف پرفارمنس اینالیسس ٹولز پی اے پی آئی جدید مائکرو پروسیسرز پر ہارڈ ویئر پرفارمنس کاؤنٹرز کے لیے ایک پورٹیبل انٹرفیس (لائبریری کی شکل میں) ہے۔ کارکردگی انجینئرنگ کارکردگی کی پیش گوئی کارکردگی ٹیوننگ رن ٹائم تصدیق پروفائل گائیڈڈ آپٹیمائزیشن جامد کوڈ تجزیہ سافٹ ویئر آثار قدیمہ بدترین کیس پر عمل درآمد کا وقت (ڈبلیو سی ای ٹی) حوالہ جات بیرونی لنکس آرٹیکل "رفتار کی ضرورت-کارکردگی کی رکاوٹوں کو ختم کرنا" آئی بی ایم ریشنل ایپلی کیشن ڈویلپر کا استعمال کرتے ہوئے جاوا ایپلی کیشنز کے عمل درآمد کے وقت کا تجزیہ کرنے پر۔ وی ٹیون پرفارمنس اینالائزر سافٹ ویئر آپٹیمائزیشن کا استعمال کرتے ہوئے پروفائلنگ رن ٹائم جنریٹڈ اور انٹرپریٹڈ کوڈ