केवल एक सीपीयू कोर का उपयोग करना


9

मुझे अपने समवर्ती कार्यक्रम के लिए प्रदर्शन परीक्षण चलाने की आवश्यकता है और मेरी आवश्यकता यह है कि इसे केवल एक सीपीयू कोर पर चलाया जाए । (मुझे सहकारी सूत्र नहीं चाहिए - मैं हमेशा एक संदर्भ स्विच करना चाहता हूं)।

इसलिए मेरे दो सवाल हैं:

  1. सबसे अच्छा समाधान - केवल अपने प्रोग्राम के लिए केवल एक सीपीयू कोर पर हस्ताक्षर कैसे करें और आरक्षित करें (ओएस को इस सीपीयू कोर का उपयोग न करने के लिए मजबूर करने के लिए)। मुझे लगता है कि यह संभव नहीं है, लेकिन शायद मैं गलत हूं ...

  2. केवल एक सीपीयू कोर का उपयोग करने के लिए लिनक्स (फेडोरा 24) कैसे सेट करें?



1
ध्यान दें कि आधुनिक सीपीयू कुल मिलाकर कितने कोर उपयोग में हैं, इसके आधार पर अपनी गति को बदल सकते हैं। यहां तक ​​कि अगर आप यह सुनिश्चित करते हैं कि आपकी प्रक्रिया केवल एक ही कोर का उपयोग कर रही है और कोई अन्य प्रक्रिया इसका उपयोग नहीं कर रही है, तो उस कोर की गति अलग-अलग होगी कि ऑपरेटिंग सिस्टम दूसरे कोर का उपयोग कैसे करेगा। अपने परीक्षण चलाते समय इसे ध्यान में रखें।
लियोरी

आपको BIOS से सीपीयू कोर को निष्क्रिय करने में सक्षम होना चाहिए, शायद आपके परीक्षणों के लिए अधिक विश्वसनीय है क्योंकि @liori ऊपर कहा गया है कि ओएस कोर गति को बदल सकता है।
मार्क्स

एक वीएम बनाने और इसके लिए केवल एक ही कोर असाइन करने के बारे में क्या? ओह, मैं सिर्फ "इस सीपीयू कोर का उपयोग नहीं करने के लिए" पढ़ता हूं, इसलिए कभी भी बुरा मत मानना ​​...
20

जवाबों:


26

लिनक्स पर, एक प्रक्रिया के लिए सीपीयू आत्मीयता को सेट करने के लिए सिस्टम कॉल है sched_setaffinity। फिर कमांड लाइन पर इसे करने का tasksetटूल है।

उस एकल कार्यक्रम को केवल एक सीपीयू पर चलाने के लिए, मुझे लगता है कि आप कुछ ऐसा चाहते हैं

taskset -c 1 ./myprogram

( -cस्विच के तर्क के रूप में किसी भी सीपीयू नंबर को सेट करें।)

यह एकल-प्रोसेसर सिस्टम के करीब होना चाहिए, जब तक कि आपकी अन्य प्रक्रियाएं उस माप की तुलना में बहुत अधिक नहीं चलती हैं, जिसे आप मापना चाहते हैं, या वे अन्य सीपीयू के लिए निर्धारित हो जाते हैं। यदि आप केवल एक ही प्रक्रिया में एक सीपीयू समर्पित करना चाहते हैं , और अन्य प्रक्रियाओं को उस सीपीयू पर चलने से रोकना चाहते हैं, तो आपको उनकी आत्मीयता भी निर्धारित करनी होगी।

मैं ठीक से कैसे करना है पता नहीं है। आपको initयह सुनिश्चित करने के लिए बूट प्रक्रिया में बहुत जल्दी प्रोसेसर प्रोसेसर सेट करना होगा कि यह सिस्टम की सभी प्रक्रियाओं को विरासत में मिले। वर्कअराउंड के रूप में, आप taskset -c -p 0 $PIDसभी अन्य प्रक्रियाओं के लिए उन्हें केवल CPU # 0 पर चलने के लिए उपयोग कर सकते हैं ।

systemd भीCPUAffinity= इकाई फाइलों में आत्मीयता नियंत्रित करने के लिए और देखते हैं एक जोड़े का सवाल unix.SE पर यहाँ डिफ़ॉल्ट आत्मीयता स्थापित करने पर है, लेकिन मैं एक अच्छा समाधान के साथ किसी भी नहीं मिला।

हालांकि के रूप में @Kamil Maciorowski टिप्पणी की है और superuser.com पर एक और सवाल के जवाब , की स्थापना isolcpus=1 पर गिरी कमांड लाइन है, जो कुछ तुम चाहते हो सकता है कि "सामान्य शेड्यूलिंग एल्गोरिदम से कि सीपीयू को अलग" चाहिए।


यह सवाल का काफी जवाब नहीं देता है। हालांकि कार्यपत्रक (या कार्य संबंध स्थापित करने के अन्य तरीके) यह सुनिश्चित करेगा कि एक प्रक्रिया केवल कोर के निर्दिष्ट सेट पर चलती है, यह गारंटी नहीं देगा कि केवल प्रक्रिया उन कोर पर चलेगी। कहने का तात्पर्य यह है कि, ऑपरेटिंग सिस्टम आपके द्वारा अपनी प्रक्रिया की आत्मीयता निर्धारित करने के लिए अन्य प्रक्रियाओं को निर्धारित कर सकता है। व्यवहार में, यह सबसे उपयोगी उत्तर है, लेकिन सीमाओं से अवगत रहें, और विशेष रूप से इस बात से अवगत रहें कि यह वह नहीं देता जो आप 1 में पूछते हैं) "केवल एक सीपीयू कोर केवल मेरे प्रोग्राम के लिए (ओएस को बाध्य करने के लिए) इस सीपीयू कोर का उपयोग न करें)
जेम्स ग्रीनहाल

@JamesGreenhalgh, लेकिन, सीपीयू आत्मीयता को हर प्रक्रिया के लिए निर्धारित करने का एक तरीका खोजने से सवाल का जवाब मिल जाएगा। क्या एक कर्नेल (cmd लाइन) विकल्प के रूप में, नई प्रक्रियाओं के लिए एक डिफ़ॉल्ट सीपीयू आत्मीयता स्थापित करना संभव है? यह बूट प्रक्रिया में जल्दी असर करेगा, और सभी प्रक्रियाओं को प्रभावित करेगा।
jpaugh

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

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