आइसोप्लेकस में कोर की एक सीमा से अधिक कार्य नहीं कर रहा है


13

प्रस्तुत करने के लिए मैं कर्नेल 3.2 के साथ डेबियन माउज़ी का उपयोग कर रहा हूँ एक AMD64 चिपसेट पर। मेरी मशीन में दो Xeon E5-2690 कोर हैं। मैंने बूट पैरामीटर सेट किया ताकि एक सीपीयू पर सभी कोर एक ही प्रक्रिया के लिए समर्पित हों। यह करने के लिए मैंने आइसक्यूबपस = 8,9,10,11,12,13,14,15 grub में सेट किया है।

अब तक सब ठीक है। अब हम कहते हैं कि मैं दिए गए कमांड के लिए पृथक सीपीयू का उपयोग करना चाहता हूं, सरल होने के लिए मैं बस एक साधारण अनंत लूप का उपयोग करूंगा:

$ कार्यशील -c 8-15 bash -c 'जबकि सच; इको हेलो> / देव / अशक्त; किया हुआ' &

अब तक अच्छा, शीर्ष दिखाता है कि कोर 8 लगभग 100% उपयोग के लिए घूमती है। अब कहते हैं कि मैं उस कमांड को फिर से लॉन्च करता हूं:

$ कार्यशील -c 8-15 bash -c 'जबकि सच; इको हेलो> / देव / अशक्त; किया हुआ' &

अब शीर्ष से पता चलता है कि कोर 9-15 बेकार हैं और दो प्रक्रियाएं कोर 8 साझा कर रही हैं। यदि इसके बजाय मैं ऐसा करता हूं:

$ कार्यशील -c 8 बैश -c 'जबकि सच; इको हेलो> / देव / अशक्त; किया हुआ' &

$ कार्यशील -c 9 bash -c 'जबकि सच; इको हेलो> / देव / अशक्त; किया हुआ' &

करोड़ों 8 और 9 में से प्रत्येक को 100% उपयोग मिलता है जैसा कि उन्हें चाहिए। यह केवल आइसोप्लेकस पर लागू होता है क्योंकि कोर के साथ समान कार्यपत्र 1-7 ठीक से प्रासंगिक कोर पर प्रक्रियाओं को फैलाता है। इसके अलावा "कार्यपत्र -p" से पता चलता है कि 8-15 प्रक्रियाओं के लिए आत्मीयता का मुखौटा सही ढंग से सेट किया गया है। ऐसा प्रतीत होता है कि कर्नेल शेड्यूलर किसी भी चीज़ का उपयोग करने से इंकार करता है लेकिन एक आइसोलिपस एफिनिटी मास्क पर निर्दिष्ट न्यूनतम कोर।

अब आम तौर पर यह मेरे उपरोक्त उदाहरणों के साथ एक बड़ा सौदा नहीं होगा, बस प्रत्येक प्रक्रिया के लिए अलग-अलग कोर निर्दिष्ट करें। हालाँकि मैं डेडिकेटेड सीपीयू पर एक अत्यधिक मल्टीथ्रेडेड एप्लिकेशन चलाना चाहता हूं। मैं कोर सेट को निर्दिष्ट करना चाहता हूं और थ्रेड पूल को स्वचालित रूप से उपयोग करना है, व्यक्तिगत रूप से प्रत्येक व्यक्ति थ्रेड के लिए प्रोसेसर की आत्मीयता को रीसेट करने के बिना, जिसे स्पॉन किया जाता है।

क्या किसी के पास कोई विचार है कि मुझे अलग-थलग सेट से एक से अधिक कोर देने के लिए अनुसूचक कैसे प्राप्त करें?


क्या आप एक मल्टीथ्रेड प्रोग्राम का उपयोग करके देख सकते हैं? bash मल्टीथ्रेड नहीं है
c4f4t0r

1
हां, यह मूल रूप से मुझे नोटिस करने का कारण था (मेरा मल्टीथ्रेडेड प्रोग्राम एक से अधिक कोर का उपयोग नहीं कर रहा था)। एक साधारण अजगर लिपि जो बहुत सारे थ्रेड बनाती है, आइसोलेकस सेट पर चलने पर एक से अधिक कोर का उपयोग करने में विफल रहती है। (गैर-पृथक कोर पर चलने पर यह सभी उपलब्ध 8 कोर का उपयोग करता है)।
user79126

इस linuxtopia.org/online_books/linux_kernel/kernel_configuration/… को पढ़ें , यह कर्नेल शेड्यूलर से cpus को बाहर करता है, लेकिन cpus को बाहर करने के बाद आप बहिष्कृत cpus पर प्रक्रिया चलाना चाहते हैं?
c4f4t0r

1
कर्नेल आइसोलेक्यूप्यू पर एक थ्रेड या प्रक्रिया को शेड्यूल नहीं करेगा जब तक कि प्रोसेसर एफिनिटी मास्क इंगित नहीं करता है कि इसका उपयोग किया जाना चाहिए। अन्यथा आइसोर्कपस कोर को बंद करने के समान होगा, जब उद्देश्य उपयोगकर्ता द्वारा निर्दिष्ट कारण के लिए एक कोर आरक्षित करना है और सुनिश्चित करें कि कोई अवांछित प्रक्रिया इसका उपयोग नहीं करती है। टास्कसेट 8-15 रेंज में सभी कोर का उपयोग करने के लिए आत्मीयता मुखौटा सेट करता है (जो कि जब / खरीद में जाँच की जाती है) सही ढंग से सेट किया जाता है, इसलिए कर्नेल को निष्क्रिय कोर पर प्रक्रिया का निर्धारण करना चाहिए।
user79126

जवाबों:


10

निराशा के एक दिन के बाद मैंने एक समाधान निर्धारित किया है। यह व्यवहार डिफ़ॉल्ट कर्नेल शेड्यूलर एल्गोरिथम (इस डिस्ट्रो / कर्नेल के लिए SCHED_OTHER) की एक कलाकृति प्रतीत होती है। एक अलग एल्गोरिथ्म में प्रक्रिया को बदलने से समस्या समाप्त हो जाती है, आइसोप्रिकस को प्रक्रियाओं / थ्रेड्स में पर्याप्त रूप से उपयोग किया जाता है।

मैंने SCHED_RR का उपयोग करना समाप्त कर दिया, लेकिन मैंने SCHED_FIFO और SCHED_IDLE का भी परीक्षण किया, जो दोनों काम करने लगते हैं। प्रक्रिया वैकल्पिक एल्गोरिथ्म के साथ चर्ट उपयोगिता के उपयोग से शुरू की जा सकती है:

$ sudo chrt -r 1 [कमांड]

(यदि आप गैर-रूट के रूप में चलाना चाहते हैं तो आप कमांड से संबंधित बाइनरी फ़ाइल पर CAP_SYS_NICE को सक्षम करने के लिए सेट की गई उपयोगिता का उपयोग कर सकते हैं)


1
हालांकि कोर को 0,1 मेरे जावा एप्लिकेशन को जोड़ने के कार्य को पहले कोर का उपयोग किया। 'sudo chrt -r 1 [कमांड]' ने मेरी समस्या को भी हल कर दिया।
बैरी एनएल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.