আপডেট: নোট করুন যে নীচের উত্তরটি RHEL 6 এর ক্ষেত্রে প্রযোজ্য R
এই প্রশ্নটি পোস্ট করার পর থেকে আমি উপরে উল্লিখিত পুরো গাইডটি, পাশাপাশি সিংহভাগ cgroups.txt ডকুমেন্টেশন এবং cpusets.txt অধ্যয়ন করেছি । আমি এখন সিগ্রুপ সম্পর্কে শিখার চেয়ে বেশি জানলাম, তাই আমি এখানে আমার নিজের প্রশ্নের উত্তর দেব।
আপনি নিতে পারেন একাধিক পদ্ধতির। রেড হ্যাট (আমাদের প্রযুক্তিগত আর্কিটেক্ট) এ আমাদের সংস্থার যোগাযোগ আরও প্রসারণমূলক পদ্ধতির পক্ষে সমস্ত প্রসেসের কম্বল সীমাবদ্ধতার বিরুদ্ধে প্রস্তাবিত — কেবলমাত্র আমরা সেই প্রক্রিয়াগুলিকে সীমাবদ্ধ করে যা বিশেষত সীমাবদ্ধ ছিল। বিষয়টি সম্পর্কিত তাঁর বক্তব্য অনুসারে এর কারণটি হ'ল সিস্টেম কলগুলির পক্ষে ব্যবহারকারী স্পেস কোড (যেমন এলভিএম প্রসেস) এর উপর নির্ভর করা সম্ভব হয় যা সীমাবদ্ধ থাকলে সিস্টেমটি ধীর করে ফেলতে পারে the অভিপ্রায়িত প্রভাবের বিপরীতে। সুতরাং আমি বেশ কয়েকটি নির্দিষ্ট-নামযুক্ত প্রক্রিয়াগুলিকে সীমাবদ্ধ করে অন্য সমস্ত কিছু একা রেখেছি।
অতিরিক্তভাবে, আমি কিছু সিগ্রুপ বেসিক ডেটা উল্লেখ করতে চাই যা আমি আমার প্রশ্ন পোস্ট করার সময় অনুপস্থিত ছিল।
সিগ্রুপগুলি ইনস্টল হওয়ার উপর নির্ভর করে নাlibcgroup
। তবে, সিগ্রুপের কনফিগারেশন এবং প্রক্রিয়া অ্যাসাইনমেন্টগুলি স্বয়ংক্রিয়ভাবে হ্যান্ডলিংয়ের জন্য এটি সরঞ্জামগুলির একটি সেট এবং এটি খুব সহায়ক হতে পারে।
আমি দেখতে পেয়েছি যে libcgroup সরঞ্জামগুলিও বিভ্রান্তিমূলক হতে পারে, কারণ libcgrou প্যাকেজটি আপনার নিজস্ব cgroups ব্যবহার সম্পর্কে বিমূর্ততা এবং অনুমানের উপর সেট করা হয়েছে, যা cgroups এর প্রকৃত কার্নেল স্তর প্রয়োগের চেয়ে কিছুটা আলাদা। (আমি উদাহরণ স্থাপন করতে পারি তবে এতে কিছুটা সময় লাগবে; আপনার আগ্রহ থাকলে মন্তব্য করুন))
অতএব, libcgroup সরঞ্জাম ব্যবহার করার আগে (যেমন /etc/cgconfig.conf
, /etc/cgrules.conf
, cgexec
, cgcreate
, cgclassify
, ইত্যাদি) আমি অত্যন্ত সঙ্গে খুব পরিচিত পেয়ে সুপারিশ /cgroup
ভার্চুয়াল ফাইল সিস্টেম নিজে এবং ম্যানুয়ালি Cgroups, নির্ধারিত সঠিক cgroup- শ্রেণীবিন্যাসের (সংযুক্ত একাধিক সাব সঙ্গে শ্রেণীবিন্যাসের সহ, যা sneakily libcgroup এবং leakily বিমূর্ত তৈরি দূরে), চালনা করে বিভিন্ন সিগ্রুপগুলিতে প্রক্রিয়াগুলি পুনরায় অর্পণ এবং হুডের অধীনে সম্পাদিত echo $the_pid > /cgroup/some_cgroup_hierarchy/a_cgroup_within_that_hierarchy/tasks
অন্যান্য আপাতদৃষ্টিতে যাদুকরী কাজগুলি libcgroup
।
আরেকটি মৌলিক ধারণা আমি অনুপস্থিত ছিল যে যদি /cgroup
ভার্চুয়াল ফাইল সিস্টেম এ সব আপনার সিস্টেমে মাউন্ট করা (বা আরো সঠিকভাবে, যদি নির্ধারিত সঠিক cgroup- সাব ওরফে "কন্ট্রোলার" এ সব মাউন্ট করা হয় কোন), তারপর যে আপনার সমগ্র সিস্টেমে প্রক্রিয়া হয় একটি নির্ধারিত সঠিক cgroup-। "কিছু প্রক্রিয়া একটি গ্রুপে রয়েছে এবং কিছুতে নেই" এর মতো কোনও জিনিস নেই।
প্রদত্ত শ্রেণিবিন্যাসের জন্য মূল সিগ্রুপ বলা হয় , যা সংযুক্ত সাবসিস্টেমগুলির জন্য সমস্ত সিস্টেমের সংস্থার মালিকানাধীন । উদাহরণস্বরূপ একটি নির্ধারিত সঠিক cgroup- অনুক্রমের cpuset এবং blkio সাব সংযুক্ত করেছেন যে, একজন রুট নির্ধারিত সঠিক cgroup- মালিক হবে হবে সব সিস্টেমে CPU ও সিস্টেমের সব blkio এবং যাদের সম্পদের কিছু শেয়ার করতে পারে শিশু Cgroups। আপনি রুট সিগ্রুপকে সীমাবদ্ধ করতে পারবেন না কারণ এটি আপনার সিস্টেমের সমস্ত সংস্থার মালিকানাধীন , তাই এটি সীমাবদ্ধ করা এমনকি অর্থবোধ করে না।
লাইবগ্রুপ সম্পর্কে আমি অনুপস্থিত কিছু অন্যান্য সাধারণ ডেটা:
আপনি যদি ব্যবহার করেন তবে /etc/cgconfig.conf
আপনার অবশ্যই এটি নিশ্চিত করা উচিত chkconfig --list cgconfig
যে cgconfig
এটি সিস্টেম বুটে চালিত হবে।
আপনি যদি পরিবর্তন করেন তবে পরিবর্তনগুলি লোড করার জন্য /etc/cgconfig.conf
আপনাকে চালনা service cgconfig restart
করতে হবে। (এবং পরিষেবাটি বন্ধ করা বা চালানো সমস্যাগুলি cgclear
পরীক্ষার আশেপাশে বোকা বানাতে খুব সাধারণ বিষয় ug ডিবাগিংয়ের জন্য আমি সুপারিশ করি, উদাহরণস্বরূপ lsof /cgroup/cpuset
, যদি cpuset
আপনি যে সিগ্রুপ হায়ারার্কির নাম ব্যবহার করছেন))
আপনি যদি ব্যবহার করতে চান তবে আপনাকে /etc/cgrules.conf
"সিগ্রুপ বিধি ইঞ্জিন ডেমন" ( cgrulesengd
) চলছে কিনা তা নিশ্চিত করতে হবে : service cgred start
এবং chkconfig cgred on
। (এবং পৃষ্ঠার নীচের অংশে ২.৮.১ বিভাগে রেড হ্যাট রিসোর্স ম্যানেজমেন্ট গাইডে বর্ণিত, এই পরিষেবাদি সম্পর্কিত আপনার সম্ভাব্য তবে সম্ভাবনাময় বর্ণের অবস্থা সম্পর্কে সচেতন হওয়া উচিত ।)
আপনি যদি নিজেই বোকা বানাতে চান এবং ভার্চুয়াল ফাইল সিস্টেম (যা আমি প্রথম ব্যবহারের জন্য প্রস্তাব দিই) ব্যবহার করে আপনার সিগ্রুপ সেট আপ করতে চাইলে আপনি এটি করতে পারেন এবং তারপরে বিভিন্ন বিকল্পের cgconfig.conf
সাহায্যে আপনার সেটআপটি আয়না করার জন্য একটি ফাইল তৈরি করতে পারেন cgsnapshot
।
এবং অবশেষে, আমি নিম্নলিখিতটি লিখতে গিয়ে তথ্যটির মূল অংশটি অনুপস্থিত ছিল:
যাইহোক, এই বিষয়ে সতর্কতাই বলে মনে হচ্ছে ... যে মাইপ্রোসেসনামের বাচ্চাদের সীমাবদ্ধ cpu0only সিগ্রুপে পুনরায় নিয়োগ দেওয়া হবে।
আমি সঠিক ছিলাম, তবে এমন একটি বিকল্প আছে যা সম্পর্কে আমি অজানা ছিলাম।
cgexec
একটি প্রক্রিয়া শুরু করার / কমান্ড চালানোর এবং এটি একটি সিগ্রুপকে নির্ধারণ করার জন্য আদেশ command
cgclassify
ইতিমধ্যে চলমান প্রক্রিয়াটি একটি সিগ্রুপকে নির্ধারণের জন্য আদেশ।
এই দুটি এছাড়াও প্রতিরোধ করবে cgred
( cgrulesengd
একটি ভিন্ন উপর ভিত্তি করে নির্ধারিত সঠিক cgroup- নির্দিষ্ট প্রক্রিয়া পুনরায় নির্ধারণের থেকে) /etc/cgrules.conf
।
উভয়ই cgexec
এবং পতাকা cgclassify
সমর্থন করে --sticky
, যা অতিরিক্ত ভিত্তিতে শিশু প্রক্রিয়াগুলি cgred
পুনরায় নিয়োগ করা থেকে বাধা দেয় ।/etc/cgrules.conf
সুতরাং, আমি যেমন এটি লিখেছি প্রশ্নের উত্তর (যদিও উপরে বর্ণিত রেড হ্যাট টেকনিক্যাল আর্কিটেক্টের পরামর্শের কারণে আমি প্রয়োগটি শেষ করেছিলাম তা সেটআপ না হলেও) হ'ল:
আমার প্রশ্নে বর্ণিত হিসাবে cpu0only
এবং anycpu
সিগ্রুপ তৈরি করুন । ( cgconfig
বুট চলাকালীন নিশ্চিত করা হয়েছে))
* cpuset cpu0only
আমার প্রশ্নে বর্ণিত নিয়মটি তৈরি করুন । (এবং নিশ্চিত cgred
হ'ল বুট চালানো হবে))
কোনো প্রসেস আমি চাই শুরু অবাধ সঙ্গে cgexec -g cpuset:anycpu --sticky myprocessname
।
এই প্রক্রিয়াগুলি সীমাহীন থাকবে এবং তাদের সমস্ত শিশু প্রক্রিয়াও সীমিত হবে না। সিস্টেমে থাকা সমস্ত কিছু সিপিইউ 0- তে সীমাবদ্ধ থাকবে (একবার আপনি পুনরায় বুট করার পরে, যেহেতু cgred
তারা ইতিমধ্যে চলমান প্রক্রিয়াগুলিতে সিগ্রুল প্রয়োগ না করে যদি না তারা তাদের ইডিউ পরিবর্তন না করে)। এটি সম্পূর্ণরূপে পরামর্শযোগ্য নয়, তবে এটি আমি প্রথমে অনুরোধ করেছি এবং এটি সিগ্রুপের সাহায্যে করা যেতে পারে।