শুধুমাত্র একটি সিপিইউ কোর ব্যবহার করা হচ্ছে


9

আমার একযোগে প্রোগ্রামের জন্য পারফরম্যান্স পরীক্ষা চালানো দরকার এবং আমার প্রয়োজনটি হ'ল এটি কেবল একটি সিপিইউ কোরতে চালানো উচিত । (আমি সমবায় থ্রেড রাখতে চাই না - আমার সর্বদা একটি প্রসঙ্গে প্রসঙ্গে যেতে চাই)।

সুতরাং আমার দুটি প্রশ্ন আছে:

  1. সর্বোত্তম সমাধান - কীভাবে কেবলমাত্র আমার প্রোগ্রামের জন্য কেবলমাত্র একটি সিপিইউ কোর সাইন করতে এবং সংরক্ষণ করতে হয় (ওএসকে এই সিপিইউ কোরটি ব্যবহার না করার জন্য বাধ্য করা)। আমার ধারণা এটি সম্ভব নয় তবে সম্ভবত আমি ভুল ...

  2. একটি মাত্র সিপিইউ কোর ব্যবহার করতে কীভাবে লিনাক্স (ফেডোরা 24) সেট করবেন?



1
নোট করুন যে মোট কতটি কোর ব্যবহৃত হয় তার উপর নির্ভর করে আধুনিক সিপিইউগুলি তাদের গতি পরিবর্তন করতে পারে। এমনকি আপনি যদি নিশ্চিত হন যে আপনার প্রক্রিয়াটি কেবল একটি একক কোর ব্যবহার করছে এবং অন্য কোনও প্রক্রিয়া এটি ব্যবহার করছে না, অপারেটিং সিস্টেম অন্যান্য কোরগুলি কীভাবে ব্যবহার করবে তার উপর নির্ভর করে সেই কোরটির গতি আলাদা হবে। আপনার পরীক্ষা চালানোর সময় এটিকে বিবেচনা করুন।
লাইওরি

আপনি বিআইওএস থেকে সিপিইউ কোরগুলি নিষ্ক্রিয় করতে সক্ষম হবেন, সম্ভবত আপনার পরীক্ষাগুলির জন্য এটি আরও নির্ভরযোগ্য যেমন @ লিওরি উপরে বলেছিলেন যে ওএস কোর গতির পরিবর্তন করতে পারে।
মার্কস

একটি ভিএম তৈরি এবং এটিতে কেবল একটি কোর নির্ধারণ সম্পর্কে কী? ওহ, আমি কেবল "এই সিপিইউ কোরটি ব্যবহার না করার জন্য" পড়েছি তাই কোনও আপত্তি নেই ...
সাকিস্ক

উত্তর:


26

লিনাক্সে, কোনও প্রক্রিয়াটির জন্য সিপিইউ অ্যাফিনিটি সেট করার জন্য সিস্টেম কল sched_setaffinity। তারপরে কমান্ড লাইনে এটি করার tasksetসরঞ্জাম রয়েছে

সেই একক প্রোগ্রামটি কেবল একটি সিপিইউতে চালানোর জন্য, আমি মনে করি আপনি এর মতো কিছু চান

taskset -c 1 ./myprogram

(যে কোনও সিপিইউ নম্বরটি -cস্যুইচটিতে একটি আর্গুমেন্ট হিসাবে সেট করুন ))

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

অর্থাৎ আমি না সঠিকভাবে কিভাবে জানি। initএটি সিস্টেমের সমস্ত প্রক্রিয়াতে উত্তরাধিকার সূত্রে প্রাপ্ত তা নিশ্চিত করার জন্য আপনাকে বুট প্রক্রিয়া শুরুতে প্রসেসরের সাদৃশ্য স্থাপন করতে হবে। একটি কর্মক্ষেত্র হিসাবে, আপনি taskset -c -p 0 $PIDকেবলমাত্র CPU # 0 এ চালাতে বাধ্য করার জন্য অন্যান্য সমস্ত প্রক্রিয়াগুলির জন্য ব্যবহার করতে পারেন ।

systemd হল এছাড়াও আছেCPUAffinity= ইউনিট ফাইলে সম্বন্ধ নিয়ন্ত্রণ করতে এবং আছে একটি দম্পতি এর প্রশ্ন unix.SE এখানে ডিফল্ট সম্বন্ধ সেটিং, কিন্তু আমি একটি ভাল সমাধান সঙ্গে কোনো খুঁজে পাইনি।

যদিও @ কামিল ম্যাকিয়েরোভস্কি সুপারউজার ডটকম-এ অন্য প্রশ্নের উত্তর দিয়েছেন এবং উত্তর দিয়েছেন , কার্নেল কমান্ড লাইনে সেট isolcpus=1 করাতে "সেই সিপিইউকে সাধারণ শিডিয়ুলিং অ্যালগরিদমগুলি থেকে আলাদা করা উচিত", যা আপনার পছন্দ হতে পারে।


এটি প্রশ্নের পুরোপুরি উত্তর দেয় না। যদিও টাস্কসেট (বা টাস্কের সম্পর্ক স্থাপনের অন্যান্য পদ্ধতিগুলি) নিশ্চিত করবে যে কোনও প্রক্রিয়া কেবলমাত্র নির্দিষ্ট কোরের সেটগুলিতে চলছে, তবে এটি গ্যারান্টি দেয় না যে কেবলমাত্র সেই প্রক্রিয়া সেই কোরে চলবে। এটি বলার অপেক্ষা রাখে না যে অপারেটিং সিস্টেমটি আপনার প্রক্রিয়াটির সান্নিধ্যটি নির্ধারণ করেছে এমন कोरের সাথে অন্যান্য প্রক্রিয়াগুলি নির্ধারণ করতে পারে। অনুশীলনে, এটি সর্বাধিক দরকারী উত্তর, তবে সীমাবদ্ধতা সম্পর্কে সচেতন হন এবং বিশেষত সচেতন হন যে আপনি 1 তে যা চান তা তা দেয় না) "কেবলমাত্র আমার প্রোগ্রামের জন্য কেবলমাত্র একটি সিপিইউ কোর সংরক্ষণ করুন (ওএসকে বাধ্য করতে এই সিপিইউ কোরটি ব্যবহার করবেন না) "
জেমস গ্রিনহালঘ

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

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

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