लिनक्स पर क्वाड कोर प्रोसेसर पर सीपीयू कोर को निष्क्रिय करना


14

मैं 3 सीपीयू कोर को निष्क्रिय करना चाहता हूं और अपने प्रोसेसर को एक ही कोर पर चलाना चाहता हूं। मैंने कमांड का उपयोग किया है maxcpus=1:। लेकिन इसके बाद मैंने इस कमांड को अंजाम दिया ls /sys/devices/system/cpu। यह अभी भी दिखाता है cpu0,cpu1,cpu2,cpu3

मैं भी करने की कोशिश की: echo 0 > /sys/devices/system/cpu3/onlineलेकिन मैं निम्नलिखित त्रुटि मिलती है: no such file or directory


यह स्पष्ट नहीं है कि आपने maxcpus=1 कमैंड कहाँ रखा है ? क्या आपने उस स्ट्रिंग को grub.cfgबूट विकल्प के रूप में रखा था ? (कृपया टिप्पणियों में जवाब देने के बजाय अपने प्रश्न को अपडेट करें)।
एंथन

मैं linux OS पर freescale IMx6 sabreauto बोर्ड का उपयोग कर रहा हूं। मैंने एक टर्मिनल एमुलेटर "gtkterm" पर कमांड निष्पादित किया
user3818847

इस कमांड की गूंज के साथ 0> / sys / devices / system / cpu3 / ऑनलाइन मैं cpu3 शटडाउन देखने में सक्षम हूं। अब मुझे पता है कि मुझे क्या करना चाहिए, क्या मुझे बदलाव के लिए सिस्टम को रिबूट करना चाहिए या मैं रिबूट किए बिना जारी रख सकता हूं
user3818847

AFAIK आपको अधिकतम पैरामीटर = 1 को कर्नेल के पैरामीटर के रूप में निर्दिष्ट करना चाहिए (जब आप ग्रब में होते हैं)। इसे कर्नेल मापदंडों में जोड़ने के लिए '/ etc / defaults / grub' संपादित करें, 'update-grub' चलाएं और रिबूट करें। कि लिनक्स स्टार्टअप पर केवल एक सीपीयू के साथ चीजें स्थिर रहेंगी।
एंथन

2
@ user3818847 आप किस डिस्ट्रो का उपयोग कर रहे हैं? बूट पैरामीटर को संशोधित करना (पास करना maxcpus=1) डिस्ट्रो द्वारा भिन्न होता है। इसके अलावा /sysआपके पास जो रास्ता है वह गलत है, सही रास्ता है /sys/devices/system/cpu/cpu3/online
पैट्रिक

जवाबों:


28

जैसा कि पैट्रिक ने एक टिप्पणी में संकेत दिया है , आपको /sysगलत तरीके से रास्ता मिला है।

echo 0 > /sys/devices/system/cpu/cpu3/online

यदि आप सिवाय सभी सीपीयू को बंद करना चाहते हैं cpu0:

for x in /sys/devices/system/cpu/cpu[1-9]*/online; do
  echo 0 >"$x"
done

maxcpus=1शेल प्रॉम्प्ट पर टाइप करने का कोई प्रभाव नहीं पड़ता है। अधिक सटीक रूप से, यह चर maxcpusको 1उस शेल में मान पर सेट करता है, जिसका कोई अन्य प्रभाव नहीं है। आप कर्नेल पैरामीटर केmaxcpus रूप में पास करके बूट समय पर सीपीयू की संख्या निर्धारित कर सकते हैं । उसके लिए, आपको अपना बूटलोडर कॉन्फ़िगरेशन (जैसे यू-बूट में कर्नेल कमांड लाइन बदलने के लिए) बदलना होगा।


सुझाव के लिए धन्यवाद। यह आपके द्वारा सुझाए गए आदेश के साथ काम करता है
user3818847

यह कम से कम कुछ हद तक कर्नेल-विशिष्ट है। मैं कर्नेल 3.6.6 चला रहा हूं, और ऐसी कोई फाइल नहीं है; इसके बजाय आप सभी कोर को नियंत्रित करने के लिए एकल /sys/devices/system/cpu/onlineऔर ./offlineफ़ाइलों का उपयोग करते हैं ।
डैनियल ग्रिस्कॉम

@ गिल्स - क्या यह जानने का एक तरीका है कि चालू coreऔर बंद होने में कितना समय लगता है?
चेतन अरविंद पाटिल

@ChetanArvindPatil समय। मुझे लगता है कि समय का उपयोग रैम तक प्रभुत्व होगा यदि इसमें शामिल कोड पहले से ही एल 2 कैश में नहीं है और कोर को अन्यथा बंद करने के लिए समय से है, लेकिन यह सीपीयू और ओएस पर बहुत निर्भर करता है।
गिल्स एसओ- बुराई को रोकना '

1
@ Xofo जब कर्नेल किसी कोर से स्विच करता है, तो वह कोर कर्नेल कोड चला रहा होता है, इसलिए उस पल में उस विशेष कोर पर कोई थ्रेड निर्धारित नहीं होता है। कोर बंद होने के बाद, धागे अब उस कोर पर अनुसूचित नहीं होते हैं। मुझे नहीं पता कि क्या होता है यदि एक धागे की आत्मीयता इसे कोर के एक सेट पर रोक देती है जो सभी बंद हैं।
गिल्स एसओ- बुराई को रोकना '

1

आप जरूरी नहीं कि कोर को बंद या निष्क्रिय करें

आप cpusets और कार्यस्थल का उपयोग करेंगे

http://man7.org/linux/man-pages/man7/cpuset.7.html

एक सीपीयू सीपीयू और मेमोरी नोड की एक सूची को परिभाषित करता है ...

Cpuset filesystem कर्नेल cpuset तंत्र के लिए एक छद्म-फाइलसिस्टम इंटरफ़ेस है, जिसका उपयोग प्रोसेसर प्लेसमेंट और प्रक्रियाओं के मेमोरी प्लेसमेंट को नियंत्रित करने के लिए किया जाता है। यह आमतौर पर / dev / cpuset पर लगाया जाता है।

Cpusets के समर्थन में निर्मित गुठली के साथ संकलित सिस्टम पर, सभी प्रक्रियाएं cpuset से जुड़ी होती हैं, और cpusets हमेशा मौजूद होती हैं। यदि कोई सिस्टम cpusets का समर्थन करता है, तो उसके पास फ़ाइल / proc / filesystems में प्रविष्टि nvv cpuset होगा। Cpuset filesystem (नीचे दिए गए उदाहरण अनुभाग देखें) को माउंट करके, व्यवस्थापक उस सिस्टम पर प्रक्रियाओं के प्रोसेसर और मेमोरी प्लेसमेंट को नियंत्रित करने के लिए एक सिस्टम पर cpusets को कॉन्फ़िगर कर सकता है। डिफ़ॉल्ट रूप से, यदि सिस्टम पर cpuset कॉन्फ़िगरेशन को संशोधित नहीं किया गया है या यदि cpuset filesystem भी माउंट नहीं है, तो cpuset तंत्र, हालांकि मौजूद है, सिस्टम के व्यवहार पर कोई प्रभाव नहीं पड़ता है।

एक प्रणाली के CPU में सभी तार्किक प्रसंस्करण इकाइयाँ शामिल होती हैं, जिस पर एक प्रक्रिया निष्पादित हो सकती है, जिसमें यदि मौजूद हो, तो एक प्रोसेसर के भीतर कई प्रोसेसर कोर और प्रोसेसर कोर के भीतर हाइपर-थ्रेड्स। मेमोरी नोड्स में मुख्य मेमोरी के सभी अलग-अलग बैंक शामिल हैं; छोटे और एसएमपी सिस्टम में आम तौर पर सिर्फ एक मेमोरी नोड होता है जिसमें सभी सिस्टम की मुख्य मेमोरी होती है, जबकि NUMA (गैर-समान मेमोरी एक्सेस) सिस्टम में कई मेमोरी नोड होते हैं।

संक्षेप में, यदि आपके पास 1 सीपीयू है जिसमें 6 कोर हैं, तो आप cpusets को कॉन्फ़िगर करेंगे और एक cpuset में अपनी प्रक्रिया लॉन्च करेंगे, जो कि केवल एक कोर पर कॉन्फ़िगर किया गया है, उदाहरण के लिए core # 3 कहें। यदि यह एक समानांतर प्रक्रिया थी, तो यह सब उस एक कोर तक ही सीमित रहेगा, अगर आपने किसी दिए गए cpuset में 4 प्रक्रियाएँ शुरू की हैं, जिसमें केवल एक कोर परिभाषित है, तो प्रत्येक 4 प्रक्रियाओं में कोर # 3 पर 25% cpu का उपयोग होगा।

उसका निर्माण, जो आम तौर पर होता है एक cpuset ऐसा कॉन्फ़िगर किया गया है

  • उदाहरण के लिए, 200+ कोर सिस्टम में, cpusetA cores 0..60 है, जहाँ भी वे स्थित हो सकते हैं, cpusetB को cores 61..70; cpusetC को cores 71..80; और इसलिए हालांकि एक व्यवस्थापक / वास्तुकार को कॉन्फ़िगर करने का विकल्प चुनता है।
  • cpusetA कुछ उपयोगकर्ताओं और / या विशिष्ट सॉफ़्टवेयर प्रोग्रामों को आवंटित किया जाता है; cpusetB को विभिन्न उपयोगकर्ताओं / कार्यक्रमों को आवंटित किया जाता है; और इसी तरह।
  • एक उपयोगकर्ता एक नौकरी (प्रक्रिया) शुरू करता है जो एन कोर का अनुरोध करेगा ... एक दिए गए cpuset के भीतर, और अब उन एकाधिक (समानांतर) प्रक्रियाओं को दिए गए cpuset तक ही सीमित है। और उन एन समानांतर के लिए एक दिए गए cpuset तक ही सीमित है, उन प्रक्रियाओं में से प्रत्येक प्रोसेसर / आत्मीयता या cpu आत्मीयता का उपयोग करना चाहिए ताकि उन समानांतर प्रक्रियाओं cpuset के भीतर विभिन्न कोर पर नहीं फेंकते हैं।

यह भी: https://linux.die.net/man/1/taskset

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.