chrt से लिनक्स प्रोसेस प्राथमिकता व रीयल-टाइम शेड्यूलिंग

परिचय एवं बुनियादी संकल्पना

जब किसी लिनक्स सर्वर पर लेटेंसी-सेंसिटिव वर्कलोड्स को संभालना होता है, तो सिस्टम के प्रोसेस शेड्यूलर और उनकी प्राथमिकताओं पर सीधा नियंत्रण रखना बेहद अनिवार्य हो जाता है। लिनक्स कर्नल सामान्यतः टाइम-शेयरिंग मॉडल पर काम करता है, लेकिन क्रिटिकल सर्विसों के लिए हमें रीयल-टाइम शेड्यूलिंग मैकेनिज्म की दरकार होती है। इस ट्यूटोरियल में हम util-linux टूलसेट के लोकप्रिय यूटिलिटी chrt की मदद से विभिन्न रीयल-टाइम नीतियों (विशेषकर FIFO और Round Robin) के व्यावहारिक कार्यान्वयन को समझेंगे। उबुंटू परिवेश में आवश्यक पैकेज की उपलब्धता सुनिश्चित करने से लेकर बैकग्राउंड टास्क की प्राथमिकताओं में फेरबदल और उनकी लाइव मॉनिटरिंग तक का पूरा सफर यहाँ स्टेप-बाय-स्टेप प्रस्तुत है।

सिस्टम समर्थित शेड्यूलिंग नीतियाँ व प्राथमिकता सीमाएँ जाँचना

प्रयोग शुरू करने से पहले सिस्टम में util-linux और प्रोसेस मॉनिटरिंग टूल procps की अद्यतन स्थिति तैयार कर लेते हैं।

util-linux एवं procps पैकेज इंस्टॉलेशन

कमांड chrt किसी भी रनिंग टास्क की रीयल-टाइम प्रॉपर्टीज को देखने और उनमें गतिशीलता से बदलाव करने की सुविधा देता है।
जब हम -m स्विच का प्रयोग करते हैं, तो कर्नल द्वारा समर्थित सभी शेड्यूलिंग पॉलिसीज और उनके लिए स्वीकार्य न्यूनतम व अधिकतम प्राथमिकता सीमाओं की सूची स्क्रीन पर आ जाती है।
⚙️ [महत्वपूर्ण विकल्प]

-m : कर्नल द्वारा सपोर्टेड शेड्यूलिंग रणनीतियों और उनकी मान्य प्रायोरिटी रेंज का विवरण प्रदर्शित करता है।
-p : टारगेट प्रोसेस की पहचान (PID) तय करके उसकी पॉलिसी व प्राथमिकता को जांचने या ओवरराइट करने हेतु उपयोग होता है।
-f : रीयल-टाइम फर्स्ट-इन-फर्स्ट-आउट शेड्यूलिंग मॉडल (SCHED_FIFO) सक्रिय करता है।
-r : रीयल-टाइम राउंड-रॉबिन शेड्यूलिंग मॉडल (SCHED_RR) लागू करता है।
-o : कर्नल की डिफ़ॉल्ट टाइम-शेयरिंग शेड्यूलिंग व्यवस्था (SCHED_OTHER) पर स्विच करता है।
-b : गैर-इंटरैक्टिव बैच प्रोसेसिंग कार्यों के अनुकूल नीति (SCHED_BATCH) लागू करता है।
-i : अत्यंत निम्न प्राथमिकता वाले आइडल टास्क हेतु पॉलिसी (SCHED_IDLE) सेट करता है।
-d : सख्त समयसीमा आधारित शेड्यूलिंग (SCHED_DEADLINE) का चुनाव करता है।

chrt -m कमांड आउटपुट

सक्रिय प्रोसेस की मौजूदा शेड्यूलिंग पॉलिसी और प्रायोरिटी का निरीक्षण

परीक्षण के लिए एक डमी टास्क की आवश्यकता होगी, जिसके लिए हम sleep 600 & के जरिए 10 मिनट तक निष्क्रिय रहने वाला बैकग्राउंड प्रोसेस आरंभ करते हैं।

sleep 600 बैकग्राउंड प्रोसेस

बाद के कमांड्स में इस प्रोसेस को आसानी से इंगित करने के लिए हम अंतिम बैकग्राउंड प्रोसेस की आईडी को शेल वेरिएबल TARGET_PID=$! में सुरक्षित कर लेते हैं।

TARGET_PID वेरिएबल असाइनमेंट

टारगेट प्रोसेस की मौजूदा स्थिति का विश्लेषण करने के लिए chrt -p चलाकर देखते हैं।
परिणाम से साफ हो जाता है कि लिनक्स ने इसे मानक टाइम-शेयरिंग क्लास SCHED_OTHER में रखा है और इसकी रीयल-टाइम प्राथमिकता का मान स्वाभाविक रूप से 0 निर्धारित है।

chrt -p द्वारा प्रोसेस शेड्यूलिंग जांच

गहराई से विवरण देखने के लिए ps कमांड में -o फ़्लैग जोड़कर शेड्यूलिंग क्लास (CLS), रीयल-टाइम प्रायोरिटी (RTPRIO), और आंतरिक कर्नेल प्रायोरिटी (PRI) का एक साथ परीक्षण करते हैं।
यहाँ क्लास कॉलम में सामान्य टाइम-शेयरिंग (TS) दर्ज है, रीयल-टाइम स्लॉट रिक्त (-) दिखाई देता है, और सामान्य शेड्यूलिंग स्तर 19 पर सेट है।

ps कमांड से विस्तृत प्राथमिकता विश्लेषण

रीयल-टाइम नीतियों (SCHED_FIFO एवं SCHED_RR) में प्रोसेस माइग्रेशन

अब हम sudo chrt -f -p 50 $TARGET_PID निष्पादित करके लक्षित प्रक्रिया को रीयल-टाइम फर्स्ट-इन-फर्स्ट-आउट यानी SCHED_FIFO में स्थानांतरित करते हैं और इसकी प्राथमिकता का मान सीधे 50 तय कर देते हैं।
चूंकि सीपीयू शेड्यूलर के नियमों में बदलाव सीधे सर्वर के रिसोर्स डिस्ट्रीब्यूशन को प्रभावित करता है, इसलिए इसके लिए रूट विशेषाधिकार (sudo) अनिवार्य हैं।

SCHED_FIFO नीति लागू करना

संशोधन की पुष्टि हेतु दोबारा chrt -p का प्रयोग करके आउटपुट की पड़ताल करते हैं।
स्क्रीन पर स्पष्ट दिखाई देता है कि पॉलिसी अब सफलतापूर्वक SCHED_FIFO में तब्दील हो चुकी है और प्रायोरिटी वैल्यू 50 प्रभावी रूप से असाइन हो गई है।

FIFO प्राथमिकता पुष्टि

इसके उपरांत, नीति को राउंड-रॉबिन मॉडल में बदलने के लिए sudo chrt -r -p 30 $TARGET_PID कमांड चलाते हैं, जिससे यह SCHED_RR के अंतर्गत प्रायोरिटी 30 के साथ काम करने लगे।
SCHED_RR तकनीक में एक ही प्राथमिकता समूह के रीयल-टाइम प्रोसेस तयशुदा टाइम स्लाइस (Time Slice) के आधार पर बारी-बारी से प्रोसेसर का उपयोग करते हैं, जिससे किसी एक प्रक्रिया द्वारा सीपीयू को पूरी तरह अवरुद्ध करने की संभावना नहीं रहती।

SCHED_RR नीति में बदलाव

कर्नल स्तर पर हुए बदलावों की पुष्टि के लिए पुनः ps कमांड चलाकर पैरामीटर्स (CLS, RTPRIO, PRI) की स्थिति देखते हैं।
आउटपुट में शेड्यूलिंग क्लास RR के रूप में अपडेट हो चुकी है, रीयल-टाइम प्राथमिकता 30 पर सेट है, और आंतरिक प्राथमिक स्तर तदनुसार 70 प्रदर्शित हो रहा है।

RR शेड्यूलिंग क्लास सत्यापन

सीधे रीयल-टाइम मोड में नया प्रोसेस शुरू करना व सिस्टम क्लीनअप

chrt की एक बड़ी खूबी यह है कि यह केवल चल रहे कार्यों को बदलने तक सीमित नहीं है, बल्कि नए प्रोग्राम को शुरू से ही रीयल-टाइम व्यवहार के साथ लॉन्च कर सकता है। उदाहरण के लिए, sudo chrt -r 25 sleep 300 & चलाकर हम 300 सेकंड का एक नया बैकग्राउंड कार्य सीधे SCHED_RR और प्राथमिकता 25 के साथ ट्रिगर कर सकते हैं।

रीयल-टाइम मोड में नया प्रोसेस निष्पादन

कमांड ps -eo pid,cls,rtprio,comm | grep '[s]leep' की सहायता से वर्तमान में सक्रिय सभी स्लीप प्रक्रियाओं के शेड्यूलिंग गुणों की तुलनात्मक जांच करते हैं।
विवरण से यह पुख्ता होता है कि पूर्ववर्ती प्रक्रिया और नवीनतम प्रक्रिया दोनों ही राउंड-रॉबिन (RR) व्यवस्था में अपनी-अपनी तय प्राथमिकताओं (30 एवं 25) के साथ सुचारू रूप से चल रही हैं।

सक्रिय स्लीप प्रोसेस की निगरानी

प्रैक्टिकल समाप्त होने के उपरांत बनाए गए दोनों परीक्षण प्रक्रियाओं को समाप्त करने और सिस्टम संसाधनों को पुनः सामान्य करने के लिए kill -9 $TARGET_PID && pkill -f 'sleep 300' का उपयोग करते हैं।
इससे शेल वेरिएबल में मौजूद प्रोसेस और 300 सेकंड वाली टास्क दोनों टर्मिनेट हो जाती हैं और वर्कस्पेस पहले जैसा स्वच्छ हो जाता है।

प्रक्रियाओं का समापन और संसाधन मुक्त करना

इस लेख के माध्यम से हमने जाना कि किस प्रकार chrt टूल लिनक्स कर्नेल की शेड्यूलिंग प्राथमिकताओं पर बारीक नियंत्रण स्थापित करने में सक्षम बनाता है। ऑडियो/वीडियो प्रोसेसिंग, हाई-फ़्रीक्वेंसी ट्रेडिंग सिस्टम या किसी भी ऐसे परिवेश में जहाँ मिलीसेकंड की देरी भी मायने रखती हो, यह ज्ञान सिस्टम की परफॉरमेंस ट्यूनिंग में मील का पत्थर साबित होता है।