টাস্কসেট আইসলকপাসে অনেকগুলি করের উপর কাজ করে না


13

উপস্থাপনের জন্য আমি একটি AMD64 চিপসেটে কার্নেল 3.2 দিয়ে দেবিয়ান হুইজি ব্যবহার করছি। আমার মেশিনটিতে দুটি জিওন ই 5-2690 কোর রয়েছে। আমি বুট প্যারামিটারগুলি সেট আপ করেছি যাতে একটি সিপিইউতে সমস্ত কোর একক প্রক্রিয়াতে উত্সর্গীকৃত হয়। এটি করতে আমি গ্রাবগুলিতে আইসলকপাস = 8,9,10,11,12,13,14,15 সেট করেছি।

এ পর্যন্ত সব ঠিকই. এখন বলা যাক আমি একটি নির্দিষ্ট কমান্ডের জন্য বিচ্ছিন্ন সিপিইউগুলি ব্যবহার করতে চাই, সহজ হতে আমি কেবল একটি সাধারণ অসীম লুপ ব্যবহার করব:

$ টাস্কসেট -c 8-15 বাশ-সি 'সত্য হলেও; ইকো হ্যালো> / দেব / নাল; সম্পন্ন' &

এখন পর্যন্ত এত ভাল, শীর্ষগুলি দেখায় যে কোর 8 স্পিঞ্জ করে প্রায় 100% ব্যবহারের জন্য। এখন বলা যাক আমি আবার সেই আদেশটি চালু করি:

$ টাস্কসেট -c 8-15 বাশ-সি 'সত্য হলেও; ইকো হ্যালো> / দেব / নাল; সম্পন্ন' &

এখন শীর্ষগুলি দেখায় যে কোর 9-15 টি অলস থাকে এবং দুটি প্রক্রিয়া কোর 8 ভাগ করে নিচ্ছে তবে পরিবর্তে আমি যদি এটি করি:

$ Tassetset -c 8 bash -c 'সত্য হলেও; ইকো হ্যালো> / দেব / নাল; সম্পন্ন' &

$ টাস্কসেট -c 9 বাশ-সি 'সত্য হলেও; ইকো হ্যালো> / দেব / নাল; সম্পন্ন' &

8 এবং 9 টি কোর প্রতিটি তাদের উচিত হিসাবে 100% ব্যবহার করে। এটি কেবল আইলকপাসের ক্ষেত্রেই প্রযোজ্য কারণ 1-7 কোরের একই টাস্কসেটটি প্রাসঙ্গিক কোরগুলিতে যথাযথভাবে ছড়িয়ে দেয়। তদ্ব্যতীত "টাস্কসেট-পি" দেখায় যে 8-15 প্রসেসের জন্য অ্যাফিনিটি মাস্কটি সঠিকভাবে সেট করা আছে। এটি প্রদর্শিত হয় যে কর্নেল সিডিউলার আইসলকপাস অ্যাফিনিটি মাস্কের উপরে বর্ণিত সর্বনিম্ন কোর ব্যতীত অন্য কিছু ব্যবহার করতে অস্বীকার করেছে।

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

আইসলকপু সেট থেকে আমাকে একাধিক কোর দেওয়ার জন্য শিডিয়ুলার কীভাবে পাবেন সে সম্পর্কে কারও কি ধারণা আছে?


আপনি একটি মাল্টিথ্রিড প্রোগ্রাম ব্যবহার করে দেখতে পারেন? বাশ মাল্টিথ্রেড নয়
c4f4t0r

1
হ্যাঁ, এটিই মূলত আমাকে লক্ষ্য করতে পেরেছিল (আমার বহুবিবাহিত প্রোগ্রামটি একাধিক কোর ব্যবহার করছিল না)। আইসলকপাস সেটে চলার সময় একটি সাধারণ পাইথন স্ক্রিপ্ট যা প্রচুর থ্রেড তৈরি করে একাধিক কোর ব্যবহার করতে ব্যর্থ হয়। (যখন অ-বিচ্ছিন্ন কোরগুলিতে চালিত হয় এটি সমস্ত উপলব্ধ 8 টি কোরের ব্যবহার করে)।
ব্যবহারকারী 79126

এই linuxtopia.org/online_books/linux_kernel/kernel_configration/… পড়ুন , এটি কার্নেল শিডিয়ুলার থেকে একটি সিপাস বাদ দেয়, তবে আপনি সিপাস বাদ দেওয়ার পরে আপনি বাদ পড়া সিপাসে প্রক্রিয়া চালাতে চান?
c4f4t0r

1
প্রসেসরের অ্যাফিনিটি মাস্কটি এটি ব্যবহার করা উচিত না যদি না কার্নেল আইসলকপুতে কোনও থ্রেড বা প্রক্রিয়া নির্ধারণ করে না। অন্যথায় আইসলকপাসটি কোরটি বন্ধ করার সমান হবে, যখন উদ্দেশ্যটি কোনও ব্যবহারকারী-নির্দিষ্ট কারণে একটি কোর সংরক্ষণ করা এবং কোনও অযাচিত প্রক্রিয়া এটি ব্যবহার না করে তা নিশ্চিত করা। টাসকসেট 8-15 রেঞ্জের সমস্ত কোর ব্যবহার করার জন্য অ্যাফিনিটি মাস্ক সেট করে (যা / প্রোকে চেক করার সময় সঠিকভাবে সেট করা থাকে) তাই কার্নেলটি নিষ্ক্রিয় কোরগুলিতে প্রক্রিয়াটি নির্ধারিত করে।
ব্যবহারকারী 79126

উত্তর:


10

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

আমি SCHED_RR ব্যবহার করে শেষ করেছি, তবে আমি SCHED_FIFO এবং SCHED_IDLE উভয়কেই কাজ করে বলে মনে করেছি tested প্রক্রিয়াটি chrt ইউটিলিটি ব্যবহার করে বিকল্প অ্যালগরিদম দিয়ে চালু করা যেতে পারে:

$ সুডো chrt -r 1 [কমান্ড]

(আপনি যদি অ-রুট হিসাবে চালাতে চান তবে আপনি কমান্ডের সাথে সম্পর্কিত বাইনারি ফাইলটিতে CAP_SYS_NICE সক্ষম করতে সেটক্যাপ ইউটিলিটিটি ব্যবহার করতে পারেন)


1
যদিও আপনার জাভা অ্যাপ্লিকেশনটি প্রথম কোরের সাথে 0,1 কোরের সাথে টাস্কেস্টিং করা হয়েছে only 'sudo chrt -r 1 [আদেশ]' আমার সমস্যাও সমাধান করেছে।
ব্যারি এনএল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.