পারফরম্যান্স সমস্যার সন্ধানে ইভেন্ট ডেটা ভিজ্যুয়ালাইজ করার উপায়


10

আমি একটি এমসিআই অ্যাপ্লিকেশনকে একটি অত্যন্ত অ্যাসিনক্রোনাস যোগাযোগের ধরণ দিয়ে অনুকূলিত করার চেষ্টা করছি। প্রতিটি র‌্যাঙ্কে গণনা করার জন্য জিনিসগুলির একটি তালিকা রয়েছে এবং ইনপুট বা আউটপুটগুলি যদি অন্য কোনও র‌্যাঙ্কে থাকে তবে প্রয়োজনীয় হিসাবে বার্তা প্রেরণ করে। এছাড়াও, প্রতিটি পদক্ষেপ থ্রেড করা হয় (বর্তমানে একটি যোগাযোগের থ্রেড এবং 5 জন কর্মী সহ)।

আমি কোডের বিভিন্ন পারফরম্যান্সের সমালোচনামূলক অংশগুলির চারপাশে টাইমারগুলির সাথে কোডটি চালিত করেছি, যা আমাকে প্রতিটি থ্রেডের জন্য (শুরু, শেষ, প্রকার) ট্রিপলগুলির একটি তালিকা দেয়। অনুভূমিক অক্ষ হিসাবে সময় সহ, উল্লম্ব হিসাবে র‌্যাঙ্ক এবং থ্রেড এবং প্রতিটি থ্রেড বর্তমানে কী করছে তা নির্দেশ করে রঙের সাথে সুস্পষ্ট উপায়ে প্লট করা হয়েছে, আমি 6 টি থ্রেড / র‌্যাঙ্ক সহ 16 টি র‌্যাঙ্কের জন্য এই জাতীয় চিত্র পেয়েছি:

পেন্টাগোর র‌্যাঙ্ক এবং থ্রেডের ইতিহাস

আমার প্রশ্ন হ'ল: এই ডেটাটি ভিজ্যুয়ালাইজ করার অন্যান্য উপায়গুলি কী যা পারফরম্যান্স সমস্যার সমাধান করতে পারে? অ্যাসিক্রোনাস অ্যাপ্লিকেশনগুলি প্রোফাইলিং করার সময় কি কারও কাছে পছন্দসই ধরণের প্লট ব্যবহার করা হয়?

এই ডেটা সেটটি সীমাবদ্ধ যেহেতু এটি ডেটাফ্লো কাঠামোটি জানেন না, তবে আরও জটিল কিছু সংগ্রহ করার চেষ্টা করার আগে আমি যতটা সম্ভব এর থেকে অন্তর্দৃষ্টি পেতে চাই।

ডিকম্প্রেস করা ইমেজ এখানে ক্ষেত্রে যে কেউ (এটা স্বাভাবিক রুট মাধ্যমে আপলোড করতে ব্যর্থ হয়েছে) চারপাশে তাকান করতে চায়। দুর্ভাগ্যক্রমে, ফায়ারফক্স এটি কার্যকর বলে আমি বিশ্বাস করি, সম্ভবত এটি খুব বড় কারণ সম্ভবত।


বৃহত্তর চিত্রটি লোড করতে আমার ব্রাউজার বা প্রায় কোনও প্রোগ্রাম পেতে বেশ খানিকটা সমস্যা হয়েছিল। শেষ পর্যন্ত, জিম্প এটি করেছে তবে আপনি আকার বা ফাইল ফর্ম্যাট বিকল্পগুলি পুনরায় বিবেচনা করতে চাইতে পারেন।
পেড্রো

এর জন্যে দুঃখিত. আমি মনে করি যে চিত্রটি বৈধ, ফায়ারফক্স আমাকে যে একই ত্রুটি দেয় তা রূপান্তর (ইমেজম্যাগিক) এর মাধ্যমে চলমান running সম্ভবত এটি কিছু স্বেচ্ছাকৃতির আকারের প্রান্তিকে ছাড়িয়ে গেছে।
জেফ্রি ইরভিং

উত্তর:


4

আমি ভাগ করে নেওয়া এবং / অথবা বিতরণ করা মেমরি উভয়ই সমান্তরাল কোড লিখতে এবং ডিবাগ করার জন্য অনেক সময় ব্যয় করি তবে আপনার নির্দিষ্ট সমস্যাটি না জেনে আমি কেবল আপনাকেই বলতে পারি যে আমার পক্ষে সবচেয়ে ভাল কী কাজ করে।

আপনি যদি গণনার দক্ষতার দিকে তাকিয়ে থাকেন তবে কোন রুটিনগুলি কতটা সময় লাগে তা জেনে রাখা, তবে আপনি যদি সমান্তরাল দক্ষতার বিষয়ে উদ্বিগ্ন হন তবে আপনার কোডটি কোনও গণনা না করায় আপনাকে কী করবে তা নিয়ে আপনার আরও চিন্তিত হওয়া উচিত । খুব শান্ত যখন বাচ্চারা কী করছে তা উদ্বিগ্ন হওয়ার মতো বিষয় ...

যেহেতু আপনি একটি হাইব্রিড শেয়ার্ড / বিতরণ মেমরি পদ্ধতির ব্যবহার করছেন, তাই অনুমান করি আপনার কোডটি ফাঁকা অংশে, এমপিআই কল বা একটি মিটেক্স / শর্ত ভেরিয়েবলের জন্য অপেক্ষা করছে। আপনি এই কলগুলি টাইমারগুলিতেও মোড়াতে পারেন এবং এটি আপনাকে ধীর করে দেওয়ার একটি আরও ভাল চিত্র দেবে, যেমন যদি এটি সর্বদা একই শর্তযুক্ত বা সর্বদা একই থাকে MPI_REDUCEযা আপনার থ্রেড আটকে থাকে।

আমি প্রায়শই একটি সফ্টওয়্যার ব্যবহার করি যা হ'ল ইন্টেল ভটিউন অ্যাম্প্লিফায়ার এক্সই । এটিতে একটি দুর্দান্ত প্লটিং বৈশিষ্ট্য / বিকল্প রয়েছে যা থ্রেড সম্মতিতে কল্পনা করে। প্রোগ্রামটি আপনার অনুরূপ একটি প্লট আঁকবে, তবুও যখন একটি থ্রেড একটি মুটেক্স বা শর্তের পরিবর্তনশীলটির জন্য অপেক্ষা করে, এটি অপেক্ষা করার থ্রেড থেকে একটি তির্যক রেখা আঁকবে, এটি অপেক্ষা করা শুরু করার সময়, প্রকৃতপক্ষে মুটেক্সকে মুক্তি দিয়েছে বা সিগন্যাল করা হয়েছে এটি যে শর্তের জন্য অপেক্ষা করছিল, এটি প্রকাশ / সংকেত দেওয়া হয়েছিল। এটি বেশ অগোছালো হতে পারে তবে এটি বাধাগুলি সঙ্গে সঙ্গে উপস্থিত হতে পারে।

পরিশেষে, আমি বাল্কের পরিসংখ্যানও সংগ্রহ করি, যেমন প্রতিটি মিটেক্স / সিগন্যাল / এমপিআই-কলের জন্য, গড় এবং সর্বোচ্চ অপেক্ষা করার সময়টি কত ছিল? সংগৃহীত অপেক্ষার সময়ের হিস্টোগ্রামটি কী? প্লটটি আপনাকে একটি সুন্দর ওভারভিউ দেয়, যখন এটি সূক্ষ্ম বিবরণে নেমে আসে তখন তা যথেষ্ট অগোছালো হতে পারে।

অবশেষে, একটি প্রশ্ন যা অবমূল্যায়ন করা উচিত নয়: আপনি কীভাবে আপনার সময় সংগ্রহ করছেন? আপনার কোডারটি আপনার কোডকে প্রভাবিত করতে না পারার পক্ষে যথেষ্ট টাইমার কি অ-ইন্টিভ্রেসিভ? আমি যখনই সম্ভব সিপিইউ নির্দেশিকা গণনা ব্যবহার করি, অর্থাত্ RDTSCx86 আর্কিটেকচারে। এটি সাধারণত আপনার কোডে একটি মাত্র নির্দেশ যুক্ত করে।


ইতিমধ্যে সমস্ত অপেক্ষার চারপাশে ডেটাগুলির ব্লক রয়েছে; ডায়াগ্রামে তারা অলস কর্মী থ্রেডগুলির জন্য সাদা এবং অপেক্ষাকৃত যোগাযোগের থ্রেডের জন্য হলুদ হিসাবে দেখায়। দুর্ভাগ্যক্রমে, যোগাযোগের থ্রেডের সমস্ত অপেক্ষাগুলি একক কম্বল MPI_Waitsome এ অ্যাসিনক্রোনির কারণে ঘটে occur খাঁটি থ্রেডেড পারফরম্যান্সটি মূলত নিখুঁত হওয়ায় ভিটুন এই ক্ষেত্রে প্রযোজ্য নয় তবে পয়েন্টারের জন্য ধন্যবাদ। হিস্টোগ্রামের পরামর্শটিও একটি ভাল।
জেফ্রি ইরভিং

ওভারহেডের টাইমিংয়ের জন্য: আমি গেটটাইম ডে ব্যবহার করছি, যা কমপক্ষে নিষ্ক্রিয় বিভাগগুলির চারপাশে প্রয়োজনীয় কারণ সেখানে আমি পাইথ্রেড শর্ত ভেরিয়েবলগুলি ব্যবহার করি। এমন পরিস্থিতিতে কি সিপিইউর নির্দেশনা গণনা করা যায়? ওভারহেড ইতিমধ্যে যথেষ্ট কম, তবে কম অবশ্যই অবশ্যই সুন্দর হবে।
জেফ্রি ইরভিং

1
@ জিফ্রে আইরিভিং: হ্যাঁ, আপনি এগুলি ব্যবহার করতে পারেন তবে তারা কেবল সিপিইউগুলিতেই বোঝায় যেগুলি constant_tscপতাকা সেট (চেক /proc/cpuinfo) রয়েছে এবং যদি আপনি প্রতিটি থ্রেড নির্দিষ্ট কোরে লক ব্যবহার করেন, অর্থাত প্রতিটি থ্রেড সর্বদা একই কোর থেকে একই রেজিস্টারটি পড়ে থাকে, যেমন ব্যবহার pthread_setaffinity_np। মনে রাখবেন যে আধুনিকটি লিনাক্স-নির্দিষ্ট এবং এটি বহনযোগ্য নয়।
পেড্রো

@ জিফ্রেআইরিভিং: আপনি যদি কিছু অঘোষিত ইভেন্ট ব্যবহার করে অপেক্ষা করে থাকেন তবে আপনি MPI_Waitsomeকী অনুরোধগুলি আসলে এসেছিল এবং কোথা থেকে রেকর্ড করতে পারেন। এই তথ্যগুলি ব্যবহারে বা নাও হতে পারে ...
পেড্রো

5

কখনও কখনও আপনি উচ্চ-স্তরের রিসোর্স বিশ্লেষণের মাধ্যমে পারফরম্যান্স সমস্যার বিষয়ে বিকল্প দৃষ্টিভঙ্গি পেতে পারেন: মেমরি ব্যান্ডউইথের মতো কোনও প্রাসঙ্গিক বাধা আছে কি? প্রতিটি শ্রমিক থ্রেড কি একই পরিমাণ কাজ করে? এই ডেটা LIKWID সরঞ্জাম স্যুট LIKWID গুগল কোড প্রকল্প থেকে লিকুইড-পারফেক্টর দিয়ে সহজেই সংগ্রহ করা যেতে পারে । প্রোফাইলটি যদি এমন হয় যে অনেকগুলি বিভিন্ন গরম দাগ বিদ্যমান, আপনার একে একে একে সামাল দেওয়ার প্রয়োজন হতে পারে। কতগুলি থ্রেড / প্রক্রিয়া ব্যবহৃত হয় তার উপর নির্ভর করে বিভিন্ন সমস্যাও থাকতে পারে।


নিখুঁত প্রকাশের স্বার্থে, জর্জি LIKWID প্রকল্পে কাজ করে এবং আমি এই প্রতিক্রিয়াটি চেয়েছিলাম কারণ আমি পেড্রোর দুর্দান্ত উত্তরটিকে অন্য দৃষ্টিকোণ (এবং একটি দুর্দান্ত, অবাধে উপলভ্য সরঞ্জাম) দিয়ে পরিপূরক করতে চেয়েছিলাম।
আরন আহমদিয়া

2

যখন বার্তা বা ইভেন্টগুলি দ্বারা পরিচালিত অত্যন্ত অ্যাসিনক্রোনাস প্রক্রিয়াগুলির একটি নেটওয়ার্কে আমার সমস্যা হয়, তখন আমি একটি পদ্ধতি ব্যবহার করি যা সহজ নয় তবে কার্যকর। এতে প্রক্রিয়াগুলির টাইম-স্ট্যাম্পড লগ পাওয়া, এগুলিকে একটি সাধারণ টাইমলাইনে মার্জ করা এবং কিছু বার্তাগুলির ক্রিয়াকলাপ চালিয়ে যাওয়ার সাথে সাথে আরও বার্তাগুলি ট্রিগার করার অগ্রগতি ট্র্যাক করা জড়িত। আমি যা খুঁজছি তা হ'ল কোনও বার্তা পাওয়ার সময় এবং এটিতে যে সময় প্রয়োগ করা হয় তার মধ্যে বিলম্ব হয় এবং বিলম্বের কারণ বোঝা যায়। যখন কোনও সমস্যা পাওয়া যায়, এটি স্থির হয় এবং প্রক্রিয়াটি পুনরাবৃত্তি হয়। এইভাবে, আপনি সত্যই সন্তোষজনক পারফরম্যান্স পেতে পারেন।

আপনি যেখানে পরিমাপ, পরিমাপ, পরিমাপ করেন সেখানে এটি কীভাবে পৃথক হয় তা দেখতে গুরুত্বপূর্ণ। মাপার একমাত্র জিনিসটি অনুধাবন করে আপনাকে বলতে পারে যে কোথায় নয় । বাস্তব পারফরম্যান্সের সুরের জন্য সময়ের দৃষ্টিভঙ্গি থেকে বিশদটি মনোযোগ সহকারে দেখতে হবে। আপনি যা সন্ধান করছেন তা কোথায় সময় ব্যয় হয় তা নয়, যেখানে অযথা ব্যয় হয়।

শুভকামনা।


অন্য কথায়, আমার কাছে থাকা ডেটাটির কোনও কার্যকর দৃশ্যায়ন নেই। :) জেড ব্রাউন আপনার প্রস্তাবিত ডেটা সংগ্রহ এবং ভিজ্যুয়ালাইজ করার এক উপায় হিসাবে জাম্পশট (এবং সম্পর্কিত ইউটিলিটিগুলি) পরামর্শ দিয়েছে, তাই আমি এটিতে সন্ধান করব।
জেফ্রি ইরভিং

@ জিওফ: ভিজ্যুয়ালাইজেশনের জন্য শুভকামনা। আমি যে কৌশলটি দরকারী পেয়েছি তা হ'ল ইভেন্ট লগগুলি সংগ্রহ এবং একত্রীকরণ করার জন্য যাতে আমি এক বা একাধিক অনুরোধের পথটি অনুসরণ করতে পারি কারণ এটি বিভিন্ন থ্রেডের মধ্য দিয়ে চলেছে, 'কারণ এটিই কেবলমাত্র অপ্রয়োজনীয় শনাক্ত করার জন্য আমি জানি বিলম্ব। যে কোনও পারফরম্যান্স সমস্যার মধ্যে এটিই থাকবে - অপ্রয়োজনীয় বিলম্ব।
মাইক ডুনলাভে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.