केवल एक सीपीयू कोर के साथ एक प्रोग्राम कैसे चलाएं?


28

मैं टर्मिनेटर में एक गेमिंग सर्वर से संबंधित स्क्रिप्ट का एक गुच्छा चलाने की कोशिश कर रहा हूं। एकमात्र समस्या यह है जब मैं ऐसा करता हूं, टर्मिनेटर मेरे सभी सीपीयू कोर और पीसी लैग्स का पता लगाता है। वहाँ इसे शुरू करने के लिए कोई रास्ता नहीं है, लेकिन यह सोच में चाल मैं केवल 1 CPU कोर है?


2
नमस्ते, ऐसा लगता है कि आप यहाँ xy समस्या से पीड़ित हो सकते हैं, यह कभी-कभी वापस देखने लायक होता है कि आप क्या हासिल करना चाहते हैं और आपके द्वारा आजमाए गए समाधान के रूप में नहीं, जैसा कि आपको लगता है कि आप को धीमा किए बिना प्रोग्राम चलाने की आवश्यकता है पीसी, सिर्फ एक कोर पर कुछ चलाने के लिए नहीं। कोई भी कम नहीं, यह एक बहुत अच्छा सवाल है। +1
वाल्ट

जवाबों:


44

ऐसा नहीं है terminatorकि किसी दिए गए प्रक्रिया के सभी सीपीयू पर "प्रसार" कर रहा है। लिनक्स खुद (कर्नेल) ऐसा कर रहा है। एक कार्य (प्रक्रिया) डिफ़ॉल्ट रूप से सभी सीपीयू पर चलने के लिए उपलब्ध है; यदि यह थ्रेड्स का उपयोग करता है तो यह एक समय में एक से अधिक सीपीयू का उपयोग कर सकता है।

किसी विशिष्ट CPU के लिए एक प्रक्रिया को प्रतिबंधित करने के लिए, आप कमांड का उपयोग करते हैं taskset

taskset --cpu-list 1,2 my_command 

यह कमांड my_command को सिर्फ CPU # 1 या # 2 पर चलने के लिए मजबूर करता है।

अधिक जानने के man tasksetलिए, "लिनक्स सीपीयू आत्मीयता" टाइप करें या खोजें (पहले यहाँ हिट करें )।


2
वैसे, आप भी "खराब" प्रक्रियाओं को त्यागने की कोशिश कर सकते हैं, उनकी समयबद्धता प्राथमिकता को कम कर सकते हैं।
मत्तेओ इटालिया

@MatteoItalia मैंने पाया कि Ubuntu 13.10 और 14.04 डिफ़ॉल्ट रूप से अच्छे स्तर की उपेक्षा करते हैं। आपको इसे काम kernel.sched_autogroup_enabled = 0करने के लिए जोड़ना /etc/sysctl.confहोगा। हालाँकि मैंने यह भी पाया कि 13.10 अक्सर बूट के दौरान कर्नेल घबराहट होती है, अगर ऑटोग्रुप अक्षम है।
कैस्परल्ड

माता-पिता की प्रक्रिया के बच्चे के बारे में क्या? क्या वे अपनी मूल प्रक्रिया के मूल / सीपीयू आत्मीयता को प्राप्त करते हैं?
यिलदिज़बदुल्लाह

5

हालांकि एक अन्य उत्तर ने पहले ही शाब्दिक उत्तर दे दिया है कि मैं इस संभावना का पता लगाऊंगा कि यह सही तरीके से नहीं किया जा रहा है। इसके बजाय आपको एक स्क्रिप्ट चलाना चाहिए जिसे आप niceकमांड का उपयोग करके कंप्यूटर (जैसे गैर संवादात्मक स्क्रिप्ट) को धीमा नहीं करना चाहते हैं ।

उदाहरण के लिए, आप जिस कमांड को चलाना चाहते हैं, उसे उपसर्ग करने के लिए, उदाहरण के लिए: nice command_to_run यह प्रोग्राम को अन्य कार्यों से नीचे डी-प्राथमिकता दिया जाएगा और आपकी मशीन को धीमा नहीं करेगा। मैं अक्सर एक लंबी संकलन करते समय इस तकनीक का उपयोग करता हूं जो अन्यथा मेरे पीसी को एक क्रॉल तक धीमा कर देता है, इससे प्रोग्राम को सभी कोर का उपयोग करने की अनुमति देने का फायदा होता है जब मशीन व्यस्त नहीं होती है लेकिन जब आप कुछ चलाते हैं तो उनका उपयोग करना बंद कर देंगे। अन्य।


अगर मैं "अच्छा ओपन टर्मिनेटर" जैसी कमांड का उपयोग करता हूं, तो क्या सभी सीपीयू कोर के साथ टर्मिनेटर रन करेगा?
user245115

ओह, और वैसे, अगर मैं अपने माउस को हिलाता हूं और कुछ भी नहीं खुल रहा है तो क्या यह सभी सीपीयू का उपयोग करेगा? और जब तक मैं अपने माउस को ले जाना बंद कर देता हूं, तब तक सभी सीपीयू का उपयोग करने में कितना समय लगता है? और क्या मैं इसे कार्यस्थल के साथ उपयोग कर सकता हूं? (हाँ, मैं लिनक्स के साथ एक वास्तविक
नॉब

@ user245115 यदि आप अच्छी उपयोगिता का उपयोग करते हैं तो यह संभव है कि टर्मिनेटर कई सीपीयू कोर का उपयोग करेगा, हालांकि यह तुरंत उन कोर का उपयोग करना बंद कर देगा यदि कोई अन्य प्रोग्राम (अच्छा नहीं चल रहा है) उनका उपयोग करना चाहता है तो आप मंदी का अनुभव नहीं करेंगे, हालांकि यह यदि वे अन्यथा पूरी तरह से स्वतंत्र और अप्रयुक्त हैं, तो उनका उपयोग करें। यह माउस के उपयोग या कार्यक्रम के साथ किसी अन्य बातचीत से प्रभावित नहीं होना चाहिए।
वैधता

@ user245115 यह भी कार्यपत्रक के साथ taskset nice open terminatorदोनों का उपयोग करने के लिए लिखित रूप से उपयोग करना संभव होना चाहिए । हालाँकि, यह ओवरकिल होगा क्योंकि आप प्रोग्राम के संसाधन उपयोग को कम करने के प्रभाव को प्राप्त करने के लिए दो अलग-अलग कार्यक्रमों का उपयोग कर रहे होंगे।
वैधता

@ user245115 जिस क्षण आप कोई अन्य क्रिया करते हैं (जैसे माउस को हिलाना) टर्मिनेटर को कम सीपीयू समय दिया जाएगा, यह प्रभावी रूप से तत्काल है और जैसे ही आप अन्य गतिविधि को
रोकेंगे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.