सीपीयू तापमान को विनियमित करने के लिए सिर्फ एक प्रक्रिया को धीमा करें


9
  1. मेरा एक कार्यक्रम है। जब यह चल रहा होता है, तो सीपीयू का तापमान 50 से 80 सेल्सीयस तक बढ़ जाता है, जो कि मेरी प्रमुख चिंता है।

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

    क्या सीपीयू को ठंडा रखने के लिए अन्य प्रक्रियाओं को प्रभावित किए बिना किसी विशेष प्रक्रिया को धीमा करना संभव है?

    मेरा OS उबंटू 10.10 है।

  2. मैंने इस प्रक्रिया की प्राथमिकता निर्धारित करने की कोशिश की nice -n 15 myprogram, और यह निश्चित नहीं है कि यह काम करेगा। CPU 77 Celcius उच्च है।

    क्या niceकिसी प्रक्रिया के सापेक्ष प्राथमिकता अन्य प्रक्रियाओं को सेट करती है? यानी, यदि अन्य प्रक्रियाएं नहीं चल रही हैं, तो क्या यह शून्य प्रक्रिया तेजी से चलेगी? मैं सभी के माध्यम से धीमी गति से चलने की प्रक्रिया निर्धारित करना चाहूंगा।


1
यह प्रक्रिया क्या करती है: भारी इनपुट / आउटपुट? मुख्य सीपीयू पर भारी गणना? GPU (वीडियो कार्ड) पर भारी गणना (आमतौर पर छवियों की गणना करने वाले कार्यक्रमों तक सीमित नहीं है)?
गाइल्स का SO- बुराई पर रोक '22

कार्यक्रम pdf2djvu है, जो एक पीडीएफ फाइल को djvu में परिवर्तित करता है। क्या यह भारी IO या भारी CPU या भारी GPU है? क्या आपके पास अलग-अलग मामलों के लिए अलग-अलग तरीके हैं?
टिम

4
80 बहुत अधिक है। मैं स्पेन के एक गर्म स्थान में रहता हूं और मेरे प्रोसेसर का अधिकतम तापमान ~ 60 place है। कंप्यूटर खोलें, सभी टुकड़ों को साफ करें और कूलर बदलें। मुझे लगता है कि आपका CPU उपयोग नहीं है।
रुफो एल मगूफो

दोनों करने की कोशिश करो।
striika

80 ° वास्तव में उच्च है लेकिन सीपीयू मॉडल के आधार पर चरम नहीं माना जाता है। अधिकांश CPU बिना किसी समस्या के 90 ° C तक का समर्थन करते हैं
किवी

जवाबों:


16

CPULimit ठीक वही है जो आपको चाहिए। आप प्रोग्राम शुरू करते हैं, फिर प्रोग्राम नाम या पीआईडी ​​के खिलाफ cpulimit चलाएं, यह निर्दिष्ट करते हुए कि आप इसे कितना प्रतिशत सीमित करना चाहते हैं।

निम्न आदेश PID 7777 से 5% CPU उपयोग की प्रक्रिया को सीमित करता है।

cpulimit -p 7777 -l 5

वैकल्पिक रूप से, आप निष्पादन योग्य नाम का उपयोग कर सकते हैं:

cpulimit -e myprogram -l 5

या निष्पादन योग्य का पूर्ण पथ:

cpulimit -P /path/to/myprogram -l 5

ध्यान दें प्रतिशत सभी कोर का है; इसलिए यदि आपके पास 4 कोर हैं, तो आप 400% का उपयोग कर सकते हैं।


1
धन्यवाद! (१) क्या CPULimit का उपयोग केवल पहले से चल रही प्रक्रिया के लिए किया जाता है? चलाने के लिए प्रोग्राम सबमिट करते समय उपयोग नहीं किया जाता है? (2) क्या यह किसी प्रक्रिया द्वारा CPU के उपयोग के प्रतिशत को ठीक करता है, या प्रक्रिया के लिए ऊपरी सीमा निर्धारित करता है और इसके उपयोग को अन्य प्रक्रियाओं के अनुसार 0 और उस सीमा के बीच उतार-चढ़ाव की अनुमति देता है? (३) मैंने यह भी पाया कि एक प्रक्रिया पर CPULimit का उपयोग करने के बाद, Ctrl + C के पास रनिंग को रद्द करने का कोई रास्ता नहीं है, क्योंकि यह जल्द ही स्वचालित रूप से चलने के लिए वापस आ जाएगा। सोचता हूँ क्यों?
टिम

2
CPULimit के बारे में एक छोटा सा विवरण: यह एक प्रक्रिया द्वारा उपयोग किए जाने वाले CPU समय की मात्रा को सीमित करने के लिए SIGSTOP / SIGCONT का उपयोग करता है (लक्ष्य CPU उपयोग से अधिक प्रक्रियाएं रोक दी जाती हैं; जब पर्याप्त समय बीत चुका होता है, तो प्रक्रिया एक SIGTONT भेजी जाती है और निष्पादन फिर से शुरू हो जाती है)। हालांकि, ऐसे दुर्लभ मामले हैं जिनमें सिग्नल सिस्टम कॉल में हस्तक्षेप कर सकते हैं, विवरण के लिए जीएनयू सी लाइब्रेरी मैनुअल देखें। चूँकि CPULimit इन संकेतों को एक सेकंड में कई बार भेजता है, इसलिए इसमें काफी व्यवधान आता है। डेस्कटॉप पर थ्रेडफॉक चलाने के लिए एक बड़ी समस्या नहीं है, थियो।
रिकार्डो मुरी

8

आप इसे अधिक या कम प्राथमिकता (तथाकथित "अच्छा मूल्य") देने के लिए एक रनिंग प्रक्रिया का त्याग कर सकते हैं । ध्यान दें कि UNIX प्राथमिकता स्केल कुछ प्रति-सहज है: नकारात्मक मानों का अर्थ है कि एक प्रक्रिया समवर्ती प्रक्रियाओं की पक्षधर है, अर्थात, इसमें "अधिक" प्राथमिकता है।

आप इस प्रकार अपनी PID के माध्यम से दी गई प्रक्रिया को "धीमा" करने का प्रयास कर सकते हैं:

# lower priority of a process
renice +1 "PID"

हर बार जब आप इसे चलाते हैं, तो प्रक्रिया "अच्छा मूल्य" 1 से बढ़ जाती है; आप +1निश्चित रूप से पूर्णांक मानों का उपयोग कर सकते हैं ।

आदेश अच्छा आपको एक +10 अच्छा मूल्य समायोजन (विकल्प के साथ इसे बदलें -n) के साथ एक प्रक्रिया शुरू करने की अनुमति देता है । उदाहरण के लिए:

# start a CPU-intensive task with low priority
nice ./cpu-hog

हालांकि, "अच्छा मूल्य" केवल इस बात को प्रभावित करता है कि सिस्टम में दूसरों पर किसी विशेष प्रक्रिया को चलाने के लिए अनुसूचक कितना एहसान करता है: यदि आपका कंप्यूटर मूल रूप से निष्क्रिय है, तो एक एकल प्रक्रिया का "अच्छा मूल्य" बढ़ाने से उस प्रक्रिया को 100% लेने से नहीं रोका जाएगा। सी पी यू। मैं गेटपायरिटी (2) मैनपेज से उद्धृत करता हूं : (मेरे द्वारा जोर दिया गया।)

जिस हद तक उनके सापेक्ष अच्छा मूल्य प्रक्रियाओं के निर्धारण को प्रभावित करता है वह यूनिक्स प्रणालियों में और, लिनक्स पर, कर्नेल संस्करणों में भिन्न होता है। कर्नेल 2.6.23 के साथ शुरू, लिनक्स ने एक एल्गोरिथ्म को अपनाया जो अच्छे मूल्यों में सापेक्ष अंतर का कारण होता है और अधिक मजबूत प्रभाव डालता है। यह बहुत कम अच्छे मान (+19) का कारण बनता है जब भी सिस्टम पर कोई अन्य _higher प्राथमिकता लोड होता है, तो वास्तव में एक प्रक्रिया के लिए थोड़ा CPU प्रदान करना होगा ।_

इस तरह से इसका कारण UNIX की तरह कर्नेल पर चलने वाली प्रक्रियाओं में रहता है: जब भी कर्नेल किसी प्रक्रिया को चलाने का निर्णय लेता है, उस प्रक्रिया में एक निश्चित (निश्चित और कम) अवधि के लिए CPU कोर का पूर्ण नियंत्रण होता है। "अच्छा मूल्य" को प्रभावित कर सकता है कि कर्नेल अनुसूचक कितनी बार एक प्रक्रिया को एक समय स्लॉट देने के लिए तैयार है, लेकिन आप इस तथ्य को बदल नहीं सकते हैं, एक बार अनुसूचित होने पर, एक प्रक्रिया एक निश्चित समय के लिए undisturbed चलती है।

इसलिए, आपके सीपीयू को धीमा करने की प्रक्रिया में प्रक्रिया को धीमा करने का कोई तरीका नहीं है यदि सिस्टम में कोई अन्य प्रक्रिया नहीं है जो सीपीयू पहुंच के लिए संघर्ष कर सकती है।


धन्यवाद! क्या किसी प्रक्रिया को शुरू से अंत तक धीमा करना संभव है, अन्य प्रक्रियाओं की परवाह किए बिना?
टिम

@ मुझे नहीं लगता कि आप जो पूछते हैं वह संभव है; मैंने अधिक विवरण के साथ उत्तर को अपडेट किया है। आशा है कि यह और अधिक स्पष्ट करता है।
रिकार्डो मुरी

1
दूसरे उत्तर ने CPULimit का सुझाव दिया, जो कि असंभव काम करता है।
टिम

आह, मैं CPULimit के बारे में नहीं जानता था - यह निश्चित रूप से मेरे UNIX टूल सेट में एक अंतर भर देता है।
रिकार्डो मुरी

niceअपने प्रोसेसर को ठंडा रखने के लिए कोई काम नहीं करेंगे। यह उस तरह काम करने के लिए नहीं बनाया गया है।
केन शार्प

4

ठीक इसी कारण से cgroups बनाए गए थे।

http://www.kernel.org/doc/Documentation/cgroups/ http://www.serverwatch.com/tutorials/article.php/3921001/Setting-Up-Linux-Cgroups.htm

उनके साथ खुद को परिचित करने में थोड़ा समय लगता है, और मेरा मानना ​​है कि आपको उन्हें स्थापित करने के लिए रूट एक्सेस की आवश्यकता है, लेकिन यह सब स्क्रिप्टेड हो सकता है। नए Ubuntus में एक .conf फ़ाइल होती है ताकि आपको अपनी स्क्रिप्ट लिखने की ज़रूरत न पड़े। मुझे 10.10 पर यकीन नहीं है।

शुरू करने के लिए एक अच्छी जगह इस उत्तर में है: https://askubuntu.com/a/94743/170177

ध्यान दें कि cgroups अभी भी सक्रिय विकास के अधीन हैं, इसलिए कुछ विशेषताएं आपके वर्तमान कर्नेल में अनुपलब्ध हो सकती हैं।

Cgroups ' cpu.shares का उपयोग करने से ऐसा कुछ भी नहीं होता जो एक अच्छा मूल्य नहीं होगा। ऐसा लगता है कि आप वास्तव में प्रक्रियाओं को कुचलना चाहते हैं, जो निश्चित रूप से किया जा सकता है।

आपको अपने इच्छित मापदंडों को परिभाषित करने के लिए एक स्क्रिप्ट या दो, और / या /etc/cgconfig.conf का उपयोग करना होगा।

विशेष रूप से, आप cpu.cfs_period_us और cpu.cfs_quota_us मानों को संपादित करना चाहते हैं । फिर प्रक्रिया को cpu.cfs_quota_us microseconds प्रति cpu.cfs_period_us microseconds के लिए चलाने की अनुमति दी जाएगी ।

उदाहरण के लिए:

यदि cpu.cfs_period_us = 50000 और cpu.cfs_quota_us = 10000 हो तो प्रक्रिया को CPU समय का 20% अधिकतम प्राप्त होगा, इससे कोई फर्क नहीं पड़ता कि क्या चल रहा है।

इस स्क्रीनशॉट में मैंने CPU समय की प्रक्रिया 2% दी है:

2% CPU समय

जहां तक ​​प्रक्रिया का सवाल है यह 100% पर चल रहा है।

दूसरी ओर सेटिंग्स cpu.shares और अभी भी निष्क्रिय CPU समय का 100% उपयोग कर सकते हैं।

इस तरह के उदाहरण में मैंने प्रक्रिया cpu.shares = 100 (1024 में से) दी है:

cpu.shares

जैसा कि आप देख सकते हैं कि प्रक्रिया अभी भी सभी निष्क्रिय सीपीयू समय का उपभोग कर रही है।

संदर्भ:

http://manpages.ubuntu.com/manpages/precise/man5/cgconfig.conf.5.html http://kennystechtalk.blogspot.co.uk/2015/04/throttling-cpu-usage-with-linux-cgroups .html


नोट: systemdचीजें कुछ अलग करती हैं। उदाहरण के लिए, उबंटू ट्रस्टी, cgroups को प्रबंधित करने के लिए दो सेवाओं के साथ आता है। अधिक जानकारी होने पर मैं अपडेट करूंगा।
केन शार्प

लेकिन आप अधिकतम सीपीयू% बदल सकते हैं जब प्रक्रिया पहले से ही शुरू हो जाती है, जैसा renice?
मार्को सुल

reniceउपयोग की गई सीपीयू की मात्रा को नहीं बदलता है, यह शेड्यूलर में प्रक्रिया की प्राथमिकता को बदल देता है। cgroups किसी भी समय सीपीयू सीमा को बदल सकते हैं। चूँकि यह उत्तर पोस्ट किया गया था इसलिए cgroups में सभी प्रकार के ट्विक्स जोड़े गए हैं और यह बहुत शक्तिशाली है।
केन शार्प

renice does not change the amount of CPU usesमैं इसे जानता हूं;) मैंने अभी एक प्रोग्राम के उदाहरण के रूप में पोस्ट किया है जो रनटाइम में चीजों को बदलता है। आपके उत्तर के लिए धन्यवाद, मैं cgroups कोशिश करूँगा।
मार्को सुल्ला
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.