मैं उपयोगकर्ताओं के बीच संसाधनों को काफी साझा करने के लिए cgroups को कैसे कॉन्फ़िगर कर सकता हूं?


11

वहाँ एक कर्नेल कॉन्फ़िग विकल्प होता था, जिसे शेड्यूलर के अंतर्गत शेड्यूल_सियर या समान कहा जाता है। इसने (मेरे ज्ञान को) सभी उपयोगकर्ताओं को सिस्टम संसाधनों को काफी साझा करने की अनुमति दी। 2.6.35 में यह उपलब्ध नहीं है। क्या कोई ऐसा तरीका है जिससे मैं अपने सिस्टम को सभी उपयोगकर्ताओं (रूट सहित?) के बीच स्वतः io / cpu / मेमोरी संसाधनों को साझा करने के लिए कॉन्फ़िगर कर सकता हूं। मैंने पहले कभी कोई cgroup सेट नहीं किया है, क्या ऐसा करने के लिए एक अच्छा ट्यूटोरियल है? आपका बहुत बहुत धन्यवाद।


खैर, मैंने उबंटू के cgroups-bin पैकेज में एक लूट ली, और मुझे पूरा यकीन है कि यह "डिफ़ॉल्ट रूप से" अगर मैं इसे स्थापित करता हूं तो यह "करता है"। मुझे लगा कि इसके लिए सेटअप की आवश्यकता होगी, लेकिन मुझे लगता है कि अगर आपको विशेष आवश्यकता है तो मैं इसे बस करता हूं। मैंने अपने उपयोगकर्ता के तहत रूट के तहत 2 सीपीयू थ्रेड्स और 2 के साथ तनाव चलाकर परीक्षण किया और सभी 4 धागे शीर्ष पर 50% साझा करते हैं, जिससे मुझे लगता है कि यह काम कर रहा है। यह मेरे लिए "इसे हल" कर सकता है, हालांकि अगर कुछ भी मैं पुष्टि करने के लिए अधिक स्पष्ट तरीका, या बेहतर तरीके से कॉन्फ़िगर करना चाहता हूं, तो फिर से धन्यवाद!
नाइटविशफैन

जवाबों:


12

कर्नेल प्रलेखन उदाहरणों के साथ cgroups का एक सामान्य कवरेज प्रदान करता है।

cgroups-binपैकेज (जो पर निर्भर करता है libcgroup1) पहले से ही वितरण द्वारा प्रदान की ठीक होना चाहिए।

निम्न दो फ़ाइलों को संपादित करके विन्यास किया जाता है:

/etc/cgconfig.conf

नियंत्रण समूहों, उनके मापदंडों और आरोह बिंदुओं को परिभाषित करने के लिए libcgroup द्वारा उपयोग किया जाता है।

/etc/cgrules.conf

नियंत्रण समूहों को परिभाषित करने के लिए libcgroup द्वारा उपयोग किया जाता है जिसके लिए प्रक्रिया संबंधित है।

उन कॉन्फ़िगरेशन फ़ाइलों में पहले से ही उदाहरण हैं, इसलिए उन्हें अपनी आवश्यकताओं के अनुसार समायोजित करने का प्रयास करें। मैन पेज उनके कॉन्फ़िगरेशन को काफी अच्छी तरह से कवर करते हैं।

बाद में, कार्यभार प्रबंधक और नियम डेमन शुरू करें:

service cgconfig restart
service cgred restart

कार्यभार प्रबंधक (cgconfig) ressources आवंटित करने के लिए जिम्मेदार है।
प्रबंधक के लिए एक नई प्रक्रिया जोड़ना:

cgexec [-g <controllers>:<path>] command [args]

प्रबंधक के लिए पहले से चल रही प्रक्रिया को जोड़ना:

cgclassify [-g <controllers>:<path>] <pidlist>

या स्वचालित रूप से cgrules.conf फ़ाइल और CGroup नियम Daemon (cgred) के ऊपर, जो निर्दिष्ट समूह में हर नव-प्रायोजित प्रक्रिया को बाध्य करता है।


उदाहरण /etc/cgconfig.conf:

group group1 {
    perm {
            task {
                    uid = alice;
                    gid = alice;
            }
            admin {
                    uid = root;
                    gid = root;
            }
    }

    cpu {
            cpu.shares = 500;
    }

}

group group2 {
    perm {
            task {
                    uid = bob;
                    gid = bob;
            }
            admin {
                    uid = root;
                    gid = root;
            }
    }

    cpu {
            cpu.shares = 500;
    }

}

mount {
    cpu = /dev/cgroups/cpu;
    cpuacct = /dev/cgroups/cpuacct;
}

उदाहरण /etc/cgrules.conf:

alice            cpu             group1/
bob              cpu             group2/

यह उपयोगकर्ता के 'ऐलिस' और 'बॉब' के बीच लगभग 50-50 सीपीयू के रेसरस को साझा करेगा।


लर्निंग cgroups, यह बुकमार्क। धन्यवाद।
जिगर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.