An Introduction to Linux Resource Management with Cgroups and Namespaces
लिनक्स एक ओपन-सोर्स ऑपरेटिंग सिस्टम है जो अपनी मजबूती, मापनीयता और सुरक्षा के कारण एंटरप्राइज़ कंप्यूटिंग और वेब इंफ्रास्ट्रक्चर में व्यापक रूप से उपयोग किया जाता है। लिनक्स सिस्टम संसाधनों के प्रबंधन के लिए कई सुविधाएँ प्रदान करता है, जैसे सीपीयू, मेमोरी, डिस्क I/O, और नेटवर्क बैंडविड्थ, जो सिस्टम पर चलने वाले अनुप्रयोगों के विश्वसनीय और कुशल प्रदर्शन को सुनिश्चित करने के लिए महत्वपूर्ण हैं। इस लेख में, हम दो महत्वपूर्ण Linux संसाधन प्रबंधन तकनीकों पर चर्चा करेंगे: cgroups और namespaces।
Cgroups
नियंत्रण समूह, या cgroups, एक लिनक्स कर्नेल सुविधा है जो प्रक्रियाओं या प्रक्रियाओं के समूह के लिए सिस्टम संसाधनों के सूक्ष्म नियंत्रण और आवंटन की अनुमति देता है। Cgroups का उपयोग CPU समय, मेमोरी, या डिस्क I/O की मात्रा को प्रतिबंधित करने के लिए किया जा सकता है जो एक प्रक्रिया या प्रक्रियाओं का एक समूह उपयोग कर सकता है, और सिस्टम लोड और उपयोगकर्ता की मांग के आधार पर गतिशील रूप से समायोजित किया जा सकता है।
Cgroups को नियंत्रण समूहों के एक पदानुक्रम के रूप में कार्यान्वित किया जाता है, जहाँ प्रत्येक समूह में एक या अधिक प्रक्रियाएँ हो सकती हैं, और प्रत्येक समूह के पास संसाधन सीमाओं और नीतियों का अपना सेट हो सकता है। Cgroup पदानुक्रम शीर्ष-स्तर cgroup पर निहित है, जिसमें अन्य सभी cgroups शामिल हैं और कर्नेल द्वारा प्रबंधित किया जाता है। पदानुक्रम में प्रत्येक cgroup में चाइल्ड cgroups हो सकते हैं, जिन्हें किसी भी स्तर पर नेस्टेड किया जा सकता है। यह प्रक्रियाओं और संसाधनों के लचीले संगठन की अनुमति देता है, जहां माता-पिता सीग्रुप को आवंटित संसाधनों को उसके चाइल्ड सीग्रुप्स के बीच साझा किया जाता है, और प्रत्येक चाइल्ड सीग्रुप की अपनी विशिष्ट संसाधन सीमाएं हो सकती हैं।
Cgroups को /sys/fs/cgroup निर्देशिका में स्थित वर्चुअल फाइलों के एक सेट का उपयोग करके नियंत्रित किया जाता है। ये फ़ाइलें cgroup पदानुक्रम का प्रतिनिधित्व करती हैं और प्रशासकों को नए cgroups बनाने, cgroups के बीच प्रक्रियाओं को स्थानांतरित करने और संसाधन सीमा और नीतियों को सेट करने की अनुमति देती हैं। उदाहरण के लिए, एक नया cgroup बनाने के लिए, व्यवस्थापक /sys/fs/cgroup निर्देशिका में एक नई निर्देशिका बना सकता है, और cgroup से जुड़ी वर्चुअल फ़ाइलों को लिखकर cgroup के लिए उपयुक्त संसाधन सीमाएँ और नीतियां निर्धारित कर सकता है।
Namespaces
नामस्थान एक और लिनक्स कर्नेल सुविधा है जो प्रक्रिया अलगाव और संसाधन प्रबंधन प्रदान करती है। नामस्थान प्रक्रियाओं को अन्य प्रक्रियाओं या पूरे सिस्टम को प्रभावित किए बिना सिस्टम संसाधनों, जैसे कि नेटवर्क स्टैक, फ़ाइल सिस्टम और प्रोसेस ट्री का अपना निजी दृश्य रखने की अनुमति देते हैं। नाम स्थान का उपयोग पृथक वातावरण बनाने के लिए किया जा सकता है, जैसे कंटेनर, जहां अनुप्रयोग एक दूसरे या मेजबान सिस्टम के साथ हस्तक्षेप किए बिना चल सकते हैं।
नामस्थानों को नामस्थानों के एक पदानुक्रम के रूप में लागू किया जाता है, जहां प्रत्येक नामस्थान में सिस्टम संसाधनों का एक सबसेट होता है, और प्रक्रियाओं को एक विशिष्ट नामस्थान में रखा जा सकता है ताकि उन्हें बाकी सिस्टम से अलग किया जा सके। नाम स्थान का उपयोग किसी एकल प्रक्रिया, प्रक्रियाओं के समूह या संपूर्ण सिस्टम को अलग करने के लिए किया जा सकता है।
लिनक्स कई प्रकार के नामस्थानों का समर्थन करता है, जिसमें नेटवर्क, माउंट, आईपीसी, पीआईडी, उपयोगकर्ता और यूटीएस नामस्थान शामिल हैं। प्रत्येक नामस्थान के पास /proc/[pid]/ns/ निर्देशिका में स्थित आभासी फ़ाइलों का अपना सेट होता है, जहाँ [pid] उस प्रक्रिया की प्रक्रिया ID है जो नामस्थान की स्वामी है। ये फ़ाइलें नामस्थान पदानुक्रम का प्रतिनिधित्व करती हैं और प्रशासकों को नए नामस्थान बनाने, मौजूदा नामस्थानों में प्रक्रियाओं में शामिल होने और नामस्थानों की स्थिति देखने की अनुमति देती हैं।
कार्रवाई में Cgroups और Namespaces
चल रहे अनुप्रयोगों के लिए पृथक वातावरण बनाने के लिए सीग्रुप्स और नेमस्पेस का एक साथ उपयोग किया जा सकता है। उदाहरण के लिए, एक नया सीग्रुप और नेमस्पेस पदानुक्रम बनाकर और उचित सीग्रुप और नेमस्पेस में कंटेनर से संबंधित प्रक्रियाओं को रखकर एक कंटेनर बनाया जा सकता है।
एक कंटेनर बनाने के लिए, व्यवस्थापक पहले निम्न आदेशों का उपयोग करके एक नया cgroup पदानुक्रम बना सकता है:
$ mkdir /sys/fs/cgroup/cpu/container
$ mkdir /sys/fs/cgroup/memory/container
ये आदेश दो नए cgroups बनाते हैं, एक CPU उपयोग को सीमित करने के लिए और दूसरा स्मृति उपयोग को सीमित करने के लिए। तब व्यवस्थापक प्रत्येक cgroup से जुड़ी वर्चुअल फ़ाइलों को लिखकर cgroups के लिए संसाधन सीमाएँ निर्धारित कर सकता है। उदाहरण के लिए, कंटेनर cgroup के लिए CPU उपयोग को कुल सिस्टम CPU के 50% तक सीमित करने के लिए, निम्न आदेश का उपयोग किया जा सकता है:
$ echo 50 > /sys/fs/cgroup/cpu/container/cpu.cfs_quota_us
यह कंटेनर cgroup के लिए CPU कोटा को कुल सिस्टम CPU समय के 50% पर सेट करता है। इसी तरह, कंटेनर cgroup के लिए मेमोरी उपयोग को 1GB तक सीमित करने के लिए, निम्न कमांड का उपयोग किया जा सकता है:
$ echo 1G > /sys/fs/cgroup/memory/container/memory.limit_in_bytes
यह कंटेनर cgroup की मेमोरी सीमा को 1GB पर सेट करता है।
एक बार cgroups बन जाने और संसाधन सीमा निर्धारित हो जाने के बाद, व्यवस्थापक निम्न आदेश का उपयोग करके कंटेनर के लिए एक नया नामस्थान बना सकता है:
$ unshare –mount –uts –ipc –net –pid –fork
यह कमांड कंटेनर के लिए एक नया नेमस्पेस बनाता है, इसे होस्ट सिस्टम के नेटवर्क स्टैक, फाइल सिस्टम, प्रोसेस ट्री और अन्य संसाधनों से अलग करता है। नामस्थान के अंदर वांछित एप्लिकेशन चलाकर कंटेनर को फिर से शुरू किया जा सकता है:
$ chroot /path/to/container/rootfs /bin/sh
यह कमांड कंटेनर के रूट फाइल सिस्टम को शुरुआती बिंदु के रूप में उपयोग करते हुए कंटेनर नेमस्पेस के अंदर एक नई शेल प्रक्रिया शुरू करता है।
निष्कर्ष
Cgroups और namespaces शक्तिशाली Linux संसाधन प्रबंधन प्रौद्योगिकियाँ हैं जो सूक्ष्म नियंत्रण और सिस्टम संसाधनों के आवंटन की अनुमति देती हैं। Cgroups का उपयोग CPU समय, मेमोरी, या डिस्क I/O की मात्रा को सीमित करने के लिए किया जा सकता है, जो कि एक प्रक्रिया या प्रक्रियाओं का समूह उपयोग कर सकता है, जबकि नेमस्पेस का उपयोग अनुप्रयोगों को चलाने के लिए पृथक वातावरण बनाने के लिए किया जा सकता है। साथ में, cgroups और namespaces सिस्टम संसाधनों के प्रबंधन के लिए एक लचीला और शक्तिशाली ढांचा प्रदान करते हैं और लिनक्स पर चल रहे अनुप्रयोगों के विश्वसनीय और कुशल प्रदर्शन को सुनिश्चित करते हैं।