सीपीयू आत्मीयता लिनक्स में cgroups के साथ कैसे बातचीत करता है?


10

मैं अलग-अलग सीपीयू के सेट पर बहु-थ्रेडेड बेंचमार्क चलाने की कोशिश कर रहा हूं। एक लंबी कहानी को छोटा करने के लिए, मैंने शुरुआत में कोशिश की isolcpusऔर taskset, लेकिन समस्याओं को मारा । अब मैं cgroups / csets के साथ खेल रहा हूं।

मुझे लगता है कि "सरल" cset shieldउपयोग-मामले को अच्छी तरह से काम करना चाहिए। मेरे पास 4 कोर हैं, इसलिए मैं बेंचमार्किंग के लिए कोर 1-3 का उपयोग करना चाहूंगा (मैंने इन कोर को एडाप्टिव टिक्स मोड में होने के लिए कॉन्फ़िगर किया है), फिर कोर 0 का उपयोग बाकी सब के लिए किया जा सकता है।

यहाँ ट्यूटोरियल के बाद , यह उतना ही सरल होना चाहिए:

$ sudo cset shield -c 1-3
cset: --> shielding modified with:
cset: "system" cpuset of CPUSPEC(0) with 105 tasks running
cset: "user" cpuset of CPUSPEC(1-3) with 0 tasks running

तो अब हमारे पास एक "ढाल" है जो अलग-थलग है (उपयोगकर्ता परेशान) और कोर 0 सब कुछ (सिस्टम परेशान) के लिए है।

ठीक है, अब तक अच्छा लग रहा है। अब देखते हैं htop। प्रक्रियाओं को CPU 0 पर माइग्रेट किया जाना चाहिए:

csets

है ना? कुछ प्रक्रियाओं को परिरक्षित कोर पर चलने के रूप में दिखाया गया है। इस मामले को समाप्त करने के लिए कि htop में बग है, मैंने tasksetढाल में होने वाली प्रक्रिया के आत्मीयता के निरीक्षण का उपयोग करने का भी प्रयास किया ।

शायद वो काम अमोघ थे? चलिए CPU3 पर चलने वाली एक अनियंत्रित प्रक्रिया को दिखाते हैं (जो कि ढाल में होनी चाहिए) htopऔर देखें कि क्या यह सिस्टम cgroup में इसके अनुसार दिखाई देता है cset:

$ cset shield -u -v | grep 864
   root       864     1 Soth [gmain]
   vext01    2412  2274 Soth grep 864 

हां, यह सिस्टम cgroup के अनुसार चल रहा है cset। इसलिए htopऔर csetअसहमत।

तो यहाँ क्या हो रहा है? मुझे किस पर भरोसा करना चाहिए: cpu affinities ( htop/ taskset) या cset?

मुझे संदेह है कि आप csetएक साथ उपयोग और संपन्नता के लिए नहीं हैं। शायद ढाल ठीक काम कर रहा है, और मुझे आत्मीयता मास्क और htopआउटपुट को अनदेखा करना चाहिए । किसी भी तरह से, मैं इस भ्रामक लगता है। क्या कोई प्रकाश को बहा सकता है?


आप किस वितरण का उपयोग कर रहे हैं? मैं पूछता हूं क्योंकि ओएस और संस्करण के आधार पर उपकरण और वर्कफ़्लो अलग-अलग हैं।
19

यह एक डेबियन 8 प्रणाली है।
एड्ड बैरेट

ओह ठीक है। Redhat दुनिया में, हम है numactlऔर cgconfigऔर cgrules/ cgredआप क्या कर रहे कारगर बनाने के लिए। ये कुछ काम के साथ डेबियन के लिए उपलब्ध हो सकते हैं
ewhite

जवाबों:


5

से cpusets प्रलेखन :

शेड्यूल_सेटफिनिटी को कॉल केवल उन सीपीयू को फ़िल्टर किया जाता है जो उस कार्य के सीपीयू में अनुमत हैं।

इसका मतलब यह है कि सीपीयू आत्मीयता मास्क cgroup में cpus कि प्रक्रिया का एक सदस्य है के साथ intersected हैं।

उदाहरण के लिए, यदि किसी प्रक्रिया के आत्मीयता के मुखौटे में कोर {0, 1, 3} शामिल हैं और प्रक्रिया सिस्टम cgroup पर चल रही है, जो कोर {1, 2} तक सीमित है, तो प्रक्रिया को कोर 1 पर चलाने के लिए मजबूर किया जाएगा।

मैं 99% निश्चित हूं कि htopआउटपुट इस तथ्य से "गलत" है कि cgroups बनाए जाने के बाद प्रक्रियाएं जाग नहीं गई हैं, और प्रदर्शन अंतिम कोर दिखा रहा है जो प्रक्रिया चल रही है।

यदि मैं अपनी ढाल बनाने से पहले विम शुरू करता हूं, तो दो बार (किसी कारण के लिए) कांटा लगाता हूं, और सबसे गहरा बच्चा कोर पर चल रहा है 2. अगर मैं फिर ढाल बनाता हूं, तो नींद विम (सीटीआर + जेड) और इसे जगाएं, दोनों प्रक्रियाएं हैं कोर 0 में ले जाया गया। मुझे लगता है कि यह उस परिकल्पना की पुष्टि करता है जो htopबासी जानकारी दिखा रही है।

आप खेतों का निरीक्षण भी कर सकते हैं /proc/<pid>/statusऔर देख भी सकते हैं cpus_allowed_*

जैसे मेरे पास एक console-kit-daemonप्रक्रिया है (pid 857) यहाँ htop में दिखाया जा रहा है जैसे कि कोर 3 पर चल रहा है, लेकिन इसमें /proc/857/status:

Cpus_allowed:   1
Cpus_allowed_list:      0

मुझे लगता है कि यह कह रहा है कि आत्मीयता का मुखौटा 0x1 है, जो cgroups के कारण केवल कोर 1 पर चलने की अनुमति देता है: यानी प्रतिच्छेद ({0,1,2,3}, {0}) = {0}।

यदि मैं कर सकता हूं, तो मैं यह देखने के लिए कुछ समय खुला रखूंगा कि क्या कोई बेहतर जवाब आता है।

इस पर (irc पर) मदद करने के लिए @davmac को धन्यवाद।


1
आप सही हैं, एचटीओपी में दिखाई गई जानकारी यह नहीं है कि वर्तमान में प्रक्रिया किस कोर पर है, लेकिन अंतिम कोर जिस पर निर्धारित किया गया था (वही जानकारी इकट्ठा करने के लिए उसी इंटरफ़ेस का उपयोग करता है)।
ऑस्टिन हेमेलर्गरन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.