মাল্টি-কোর প্রসেসিং-এর সুবিধা ও অসুবিধা রয়েছে, এবং কখনো কখনো আপনাকে প্রোগ্রামের জন্য ম্যানুয়ালি CPU কোর বরাদ্দ করতে হয় (যা "CPU affinity" নামে পরিচিত) সেরা পারফরম্যান্স পাওয়ার জন্য। লিনাক্সে, প্রাথমিক টুল হচ্ছে taskset। এটা শুনতে ভয়ঙ্কর লাগতে পারে, কিন্তু আমরা এটাকে সহজ ধাপে ভাগ করে প্রক্রিয়াটি সহজ করব।
Taskset বেসিক্স
Taskset ব্যবহার দুটি পার্টে ভাগ করা যাবে: চালু হবার আগে প্রোগ্রামের সাথে CPU affinity, এবং ইতিমধ্যে চলমান প্রোগ্রামের সাথে। প্রোগ্রাম লঞ্চ করা দুটির মধ্যে সহজ, তাই আমরা সেখান থেকে শুরু করব। একটি লঞ্চ কমান্ড এরকম দেখাবে:
taskset -c cpu-core-number(s) application
আপনি যে CPU কোর নম্বর বরাদ্দ করতে চান সেটা দারুণ করার আগে, ভুলবেন না যে Unix নাম্বারিং স্কিম সাধারণত ০ থেকে শুরু হয়, তাই আপনার প্রথম কোর হবে ০, দ্বিতীয় কোর ১, এবং এভাবে চলবে। এভাবে, একটি ডুয়াল-কোর মেশিনে কোর ০ এবং ১ থাকবে, এবং একটি কোয়াড-কোর মেশিনে কোর ০, ১, ২, এবং ৩ থাকবে।
মান লিন, আপনি একটি ডুয়াল-কোর সিস্টেমে Audacity চালাতে চান, এবং আপনি চান এটি আপনার দ্বিতীয় কোরে চলে। সেটার কমান্ড হবে:
taskset -c 1 audacity
একাধিক কোর ব্যবহার করা
আমাদের একটি মেশিনে, Chrome কখনো কখনো ভিডিও স্ট্রিমিং করার সময় ফ্রেম ড্রপ করত কিন্তু দুই কোর বরাদ্দ করলে ভালো বिहেভ করত। আপনি যদি একই জিনিস একটি কোয়াড-কোর সিস্টেমে চেষ্টা করতে চান এবং Chrome কোর তিন এবং চার বরাদ্দ করতে চান, তবে কমান্ড হবে:
taskset -c 2,3 google-chrome
আপনাকে সিকোয়েনশিয়াল কোর বরাদ্দ করতে হবে না - আপনি যেকোনো কোর র্যান্ডমলি পিক করতে পারেন। মেন লিন, আপনার একটি সিক্স-কোর মেশিন রয়েছে এবং আপনি Chrome কোর দুই এবং ছয়ে ব্যবহার করতে চান। আপনি লিখবেন:
taskset -c 1,5 google-chrome
আপনি একটি ড্যাশও ব্যবহার করতে পারেন একটি অ্যাপ্লিকেশনকে একাধিক কোরে ছড়িয়ে দিতে। উদাহরণস্বরূপ, অনেক পুরনো প্রোগ্রাম বা সিস্টেম ফাংশন ডিফল্টভাবে আপনার প্রথম কোরে চলে। কী হয় যদি আপনি প্রথম কোর যতটা সম্ভব ফ্রি রাখতে চান বড় একটি অ্যাপ্লিকেশন আপনার অন্যান্য সব কোরে ছড়িয়ে দিয়ে?
মান লিন, আপনার একটি এট-কোর সিস্টেম রয়েছে এবং আপনি Steam দ্বিতীয় কোর থেকে অষ্টম কোর পর্যন্ত চালাতে চান। সেটার কমান্ড হবে:
taskset -c 1-7 steam
ইতিমধ্যে লঞ্চ হওয়া প্রোগ্রামের Affinity পরিবর্তন করা
Taskset শুধু অ্যাপ্লিকেশন লঞ্চ করার জন্য সীমাবদ্ধ নয়। আপনি ইতিমধ্যে চলমান একটি প্রোগ্রামের CPU affinityও পরিবর্তন করতে পারেন। তবে, আপনি একটি অ্যাপ্লিকেশনের affinity পরিবর্তন করার আগে, আপনাকে তার Process ID (সংক্ষেপে PID) জানতে হবে।
আপনার অ্যাপ্লিকেশনের PID জানতে, আপনি আপনার ডেস্কটপের সিস্টেম মনিটর ব্যবহার করার চেষ্টা করতে পারেন, কিন্তু সবচেয়ে দ্রুত উপায় হচ্ছে শুধু top ব্যবহার করা। আশ্চর্য না, এটি কমান্ড ব্যবহার করে:
top
সকল রানিং কমান্ডের নাম স্ক্রিনের ডানপাশে রয়েছে। সংশ্লিষ্ট Process IDগুলো বামপাশে রয়েছে।
আপনার PID লিখে রাখুন কারণ একটু পর এটিই ব্যবহার করবেন। এই উদাহরণে, আমরা VLC ব্যবহার করব, যা একটি পুরনো পিসিতে ছয় কোরের সাথে হাই-ডেফিনিশন Matroska ভিডিও প্লে করছে। আমরা ভিন্ন CPU affinity এক্সপেরিমেন্ট করছি VLC-র সেরা পারফরম্যান্স নিচোড়ে আনতে।
এক্সিস্টিং প্রসেসের affinity পরিবর্তন করার সিনট্যাক্স এরকম দেখাবে:
taskset -cp core-numbers PID
আপনি উপরের স্ক্রিনশটে দেখতে পাচ্ছেন, VLC-এর Process ID হলো 20485। আমরা চतुর্থ, পঞ্চম, এবং ষষ্ঠ কোরে VLC চালানোর চেষ্টা করব, যা Unix নাম্বারিং-এ ৩-৫ হবে। তাই সব 끝나ে, কমান্ড হবে:
taskset -cp 3-5 20485
কিন্তু আপনি যদি পরিবর্তন করার আগে এক্সিস্টিং affinity চেক করতে চান? সেক্ষেত্রে, কোনো কোর নম্বর না দিয়ে, taskset আপনাকে বলে দেবে affinity কীভাবে বরাদ্দ করা আছে। তাই যদি আমরা শেষ কমান্ডটি এভাবে পরিবর্তন করি:
taskset -cp 20485
তবে এটি দেখাবে যে VLC সকল কোরে ছড়িয়ে আছে।
আরেকটি প্রোগ্রাম দিয়ে আবার চেষ্টা করি। মান লিন, আমরা একটি বড় Matroska SMPlayer-এ রান করি, এবং SMPlayer ইতিমধ্যে লঞ্চ হয়েছে। Top বলে PID হলো ১৬০৫৮।
কিন্তু প্রথমে আমরা এর এক্সিস্টিং affinity জানতে চাই। -cp সুইচ দিয়ে কমান্ডটি কিন্তু কোনো কোর নম্বর ছাড়া, আমরা দেখতে পাচ্ছি affinity বর্তমানে সকল কোরে ছড়িয়ে আছে।
এখন আমরা SMPlayer-কে VLC এক্সপেরিমেন্টের মত তিনটি কোরে ছড়িয়ে দিতে পারি কমান্ড দিয়ে:
taskset -cp 3-5 16058
এটা সহজ ছিল, ঠিক না? আপনি যদি আপনার পিসি বেন্চмар্ক করতে চান, তবে ৮টি উপকারী CPU স্ট্রেস-টেস্ট টুলের আমাদের গাইড চেক করুন।