प्रस्तुत करने के लिए मैं कर्नेल 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 प्रक्रियाओं के लिए आत्मीयता का मुखौटा सही ढंग से सेट किया गया है। ऐसा प्रतीत होता है कि कर्नेल शेड्यूलर किसी भी चीज़ का उपयोग करने से इंकार करता है लेकिन एक आइसोलिपस एफिनिटी मास्क पर निर्दिष्ट न्यूनतम कोर।
अब आम तौर पर यह मेरे उपरोक्त उदाहरणों के साथ एक बड़ा सौदा नहीं होगा, बस प्रत्येक प्रक्रिया के लिए अलग-अलग कोर निर्दिष्ट करें। हालाँकि मैं डेडिकेटेड सीपीयू पर एक अत्यधिक मल्टीथ्रेडेड एप्लिकेशन चलाना चाहता हूं। मैं कोर सेट को निर्दिष्ट करना चाहता हूं और थ्रेड पूल को स्वचालित रूप से उपयोग करना है, व्यक्तिगत रूप से प्रत्येक व्यक्ति थ्रेड के लिए प्रोसेसर की आत्मीयता को रीसेट करने के बिना, जिसे स्पॉन किया जाता है।
क्या किसी के पास कोई विचार है कि मुझे अलग-थलग सेट से एक से अधिक कोर देने के लिए अनुसूचक कैसे प्राप्त करें?