गैर-समूहित प्रक्रियाओं के साथ cgroups कैसे बातचीत करते हैं?


12

मेरे पास एक ही कोर मशीन पर 3 प्रक्रियाएं हैं। प्रत्येक प्रक्रिया बिल्कुल समान है और सीपीयू को जितनी तेजी से जला सकती है (तंग लूप) कर सकती है। उनमें से दो ( Aऔर B) अलग समूहों में cgexec के साथ 512 और 512 के सेट के साथ Cलॉन्च किए गए हैं । तीसरा ( ) नियमित रूप से लॉन्च किया गया है, न कि cgexec के साथ।

एक बार सभी कर रहे हैं और चल रहे हैं, Cसीपीयू, जबकि 66% हो जाता है Aऔर Bविभाजन 33%। अगर मैं मारने Cतो Aऔर B50% प्रत्येक मिल (उम्मीद के रूप में)।

C66% क्यों मिलता है? मुझे इस परिदृश्य में 33%, या शायद 50% (C), 25% (A) और 25% (B) की अपेक्षा होगी। 66% Cकाम नहीं करने जा रहे हैं, फिर भी मैं गणित कैसे करता हूं।

सामान्य तौर पर, मैं समझना चाहता हूं कि संसाधन साझाकरण (विशेष रूप से सीपीयू) के cgexecसाथ शुरू की गई प्रक्रियाओं के साथ बातचीत किए बिना कैसे लॉन्च की गई प्रक्रियाएं cgexec(यदि यह बहुत जटिल नहीं है, तो अधिक सामान्य उत्तर की सराहना की जाएगी)।


सबसे पहले, मुझे आश्चर्य है कि आप CPU उपयोग प्रतिशत कैसे मापते हैं? आप A, B और C को चलाने वाली प्राथमिकताएँ क्या हैं?
KWubbufetowicz

मेरा मानना ​​है कि मैं सीपीयू के उपयोग को माप रहा था topऔर मुझे विश्वास है कि वे एक कमांड प्रॉम्प्ट से काफी सरलता से शुरू किए गए थे: cgexec -g cpu:foo myprogramऔर ./myprogram। यह एक समय हो गया है तो मुझे निश्चितता के साथ याद नहीं है।
मीका ज़ोल्टू

क्या यह मामला हो सकता है कि मायप्रोग्राम सिंगल थ्रेड / प्रक्रिया से अधिक उपयोग करता है? Btw आप अभी भी इस समस्या को हल करने में रुचि रखते हैं?
KWubbufetowicz

कार्यक्रम इस व्यवहार का परीक्षण करने के लिए लिखा गया एक परीक्षण अनुप्रयोग था। यह जानबूझकर एकल परिणामों को संकीर्ण करने के लिए पिरोया गया था। मुझे इस प्रश्न के उत्तर में अभी भी दिलचस्पी है।
मीका ज़ोल्टू

RedHat का यह पृष्ठ यहां सहायता के लिए हो सकता है। cpu.sharesएक बहुत ही अजीब विन्यास विकल्प है; यदि संभव हो तो cpuset.cpusइसके बजाय मैं सीपीयू द्वारा चीजों को विभाजित करने की सलाह देता हूं ।
वाइल्डकार्ड

जवाबों:


3

Cgroups hierarhical हैं और वे सभी उपप्रजातियों द्वारा विरासत में मिले हैं। तो सभी प्रक्रियाएं कुछ cgroup में होनी चाहिए। डिफ़ॉल्ट रूप से यह रूट cgroup है और डिफ़ॉल्ट रूप से इसमें 1024 शेयर हैं जो आपके उदाहरण में ए और बी से दोगुना है।

सीपीयू का समय बिट्वीन सीग्रुप्स के अनुसार cpu.shares में उन्हें सौंपा गया वजन है।

यदि A में 1024 शेयर और B 512 और C 256 और D 256 थे, तो cpu समय वितरण को A - 50%, B - 25%, C और D 12,5% होना चाहिए।


तो cgexec के साथ लॉन्च नहीं की गई कोई भी प्रक्रिया 1024% शेयरों के साथ मूल cgroup में है, समान रूप से सभी तत्काल बच्चों के बीच विभाजित। ऐसा ही एक तत्काल बच्चा कॉलिंग द्वारा उत्पन्न cgroup है cgexec। तो गैर- cgexecप्रक्रिया को 50% और cgrouped प्रक्रियाओं को शेष 50% हिस्सा मिलेगा। Cgrouped प्रक्रियाओं के भीतर वे अपने 50% समान रूप से साझा करते हैं, जिसका अर्थ है कि दोनों को 25% मिलता है। यह समझ में आता है, लेकिन यह मेरे द्वारा देखे गए व्यवहार नहीं है। मैंने जो देखा वह 66%, 33% और 33% है। क्या आप अधिक विवरण और शायद एक उदाहरण वितरण को शामिल करने के लिए उत्तर को अपडेट कर सकते हैं?
मीका ज़ोल्टू

ओह, मुझे लगता है कि मैं देख रहा हूं। बिना OS के लॉन्च की गई किसी भी प्रक्रिया को cgexec1024 शेयर मिलते हैं। के साथ शुरू की गई कोई भी प्रक्रिया cgexecशेयरों को निर्दिष्ट करती है। तो इस मामले में, एक प्रक्रिया को 1024 शेयर मिलते हैं और अन्य दो को 512 प्रत्येक मिलते हैं, जिसके परिणामस्वरूप मैंने देखा। क्या आप एक उदाहरण के साथ, थोड़ा और स्पष्टता देने के लिए अपने जवाब को अपडेट करने का मन बना लेंगे?
मीका झोलटु

वास्तव में, यह अभी भी जोड़ नहीं है। 1024 + 512 + 512 = 2048512/2048 == 25%। मुझे विश्वास नहीं है कि यह उत्तर वास्तव में सही है, कम से कम सतह पर नहीं।
मीका झोलटु

क्या आपके पास कोई अन्य समूह हैं? यह संख्या को प्रभावित कर सकता है। आप रेडहैट
Lazy404

रनिंग के अलावा और कुछ भी नहीं है, टेस्ट रन से पहले और बाद में बॉक्स बेकार था। सभी उदाहरण केवल दिखाते हैं कि क्या होता है जब सभी प्रक्रियाएं cgroups सेटअप के साथ शुरू की जाती हैं। यह चर्चा नहीं करता है कि क्या होता है जब कुछ प्रक्रियाएं cgroups का उपयोग नहीं कर रही हैं, जो कि मैं यह पता लगाने की कोशिश कर रहा हूं।
मीका झोलटु
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.