मैं एक बार में सभी कोर के लिए सीपीयू आवृत्ति स्केलिंग गवर्नर कैसे सेट करूं?


37

मैं CPU कोर स्केलिंग गवर्नर को प्रत्येक कोर के लिए व्यक्तिगत रूप से करने के बजाय एक बार में सभी कोर के लिए सेट करना चाहूंगा। क्या इसे करने का कोई तरीका है?

(मुझे पता है कि गवर्नर को प्रतिध्वनित करना आसान होगा /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor, लेकिन मैं एक कस्टम समाधान की तलाश में नहीं हूं।)


2
"कस्टम समाधान" के साथ आपका मतलब है कि एक शेल स्क्रिप्ट अस्वीकार्य है, इसे एक अंतर्निहित GUI बटन की आवश्यकता है?
jg-faustus

मुझे आश्चर्य है कि अगर पहले से ही एक मानक स्थापना में एक समाधान मौजूद है (एक जीयूआई की आवश्यकता नहीं है)।
htorque

इस पृष्ठ की जाँच करें: "debian कार्यान्वयन" के अंतर्गत idebian.wordpress.com/2008/06/22/cpu-frequency-scaling-in-linux : यह स्पष्ट रूप से बूट डिफॉल्ट को बदलने के लिए संभव है, और इसमें एक उपयोगकर्तापावर टूल है, जिसे पावरवॉन्ड कहा जाता है। (यह उत्तर के बजाय एक टिप्पणी है क्योंकि पोस्ट 2008 से है, और मैंने परीक्षण नहीं किया है अगर यह अभी भी काम करता है ...)
जेग-फॉस्टस

जवाबों:


25

मैं अभी भी एक linux noob हूँ, लेकिन आपको नहीं लगता कि cpufrequtils यू का उपयोग करके इसे करने देता है (इसकी उबंटू ओएस में बंडल नहीं है लेकिन रिपॉजिटरी में है)

sudo apt-get install cpufrequtils
sudo cpufreq-set -r -g performance
  • -rझंडा सभी के लिए परिवर्तन ( "सभी हार्डवेयर से संबंधित") कोर स्थापित करने के लिए प्रयोग किया जाता है

6
-R संबंधित विकल्प यह सभी कोर के लिए नहीं करता है। हमें cpu संख्या को विकल्प -c <number> के साथ निर्दिष्ट करना होगा, हालाँकि यह स्क्रिप्ट एक ही बार में सभी cpus के लिए करेगी: for ((i = 0; i <$ (nproc); i ++)); cpufreq-set -c $ i -r -g प्रदर्शन; किया
श्री

6
ठीक ही, @ श्री सही है। cpufreq-setवास्तव में अंततः सरल लेकिन आवश्यक कार्यक्षमता का अभाव है। इस वोट काउंटर को स्पष्ट रूप से दिखाने वाले बहुत से लोग इसके बारे में सिर्फ इसलिए नहीं जानते क्योंकि इसका वर्णन केवल इसे बंद करने के लिए भ्रामक है।
प्रातः

2
कौन देता है ये + 1 बिना जांच के ???? यह बिल्कुल काम नहीं करता है। मैंने पाया सबसे सरल काम समाधान मैंने पोस्ट किया।
switch87 12

20

मैंने बहुत कुछ जाना और मुझे लगता है कि यह संभव नहीं है, इसलिए मैंने निम्नलिखित एक-लाइनर को अपने साथ जोड़ा .bashrc:

function setgov ()
{
    echo "$1" | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor 
}

अब मैं कुछ चला सकता हूं setgov ondemandऔर सभी कोर ondemand के गवर्नर में बदल जाएंगे ।


2
यह फ़ाइल के रूप में काम नहीं करता है क्योंकि स्केलिंग_गओवर्नॉर रूट के स्वामित्व में है और इसकी अनुमति प्रतिबंधित है। अनुमतियों को बदलने की हमेशा अनुशंसा नहीं की जाती है।
श्री

कृपया मेरी टिप्पणी में user49449 के उत्तर के लिए वैकल्पिक स्क्रिप्ट देखें।
श्री

6

सभी कोर के गवर्नर बदलने के लिए सबसे छोटी कमांड निम्नलिखित है:

sudo bash -c 'for i in {0..7}; do cpufreq-set -c $i -g performance; done'

आप इसे .bashrc की तरह जोड़ सकते हैं, जैसा कि उल्लेख किया गया है, आपको इसे रूट के रूप में चलाना होगा sudo setgov performance:

function setgov ()
{
     for i in {0..7}; 
     do 
         cpufreq-set -c $i -g $1; 
     done
}

2

जब तक हम उस पर हैं, तब तक बैश कोड पूरा होने को भी जोड़ सकते हैं:

function setgovernor () {
    echo "$1" | sudo tee 
    /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor 
}
complete -W "$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors)" setgovernor

2

जिस तरह से मैंने इसे छड़ी करने के लिए सेट किया है क्योंकि गवर्नर लगभग 30 सेकंड के बाद अब उबंटू में 16.04 या इससे अधिक हाल ही में (मैं उबंटू मेट पर हूँ) शक्तियां वापस कर देता हूं;

  1. इसे (कोड की एक पंक्ति) कोड (धन्यवाद, पिछले उत्तर में switch87 के सौजन्य से)

    sleep 60 && bash -c 'for i in {0..7}; do cpufreq-set -c $i -g performance; done'
    
  2. निर्देशिका में फ़ाइल में

    /etc/rc.local
    

मेरा एक लाइन "एक्जिट 0" से ऊपर है और असंबद्ध, टिप्पणी के तहत।

जो लोग नहीं जानते उनके लिए "rc.local", यह sudo के रूप में कमांड चलाता है। किसी भी आदेश को लगता है, राज्यपाल को बदलने के लिए, सूडो के रूप में चलाने की आवश्यकता है।

यह 60 सेकंड के बाद इसे प्रदर्शन में बदलने के लिए गवर्नर को वापस पॉवरवेव में रीसेट करने देता है और कोड को सुडो के रूप में चलाता है।

जो भी समय (सेकंड में आप कॉपी करते हैं उसमें "60" (कोड में कॉपी करें) बदलें। 60 = 60 सेकंड = 1 मिनट) आपको कमांड और "प्रदर्शन" (कमांड भाग में) को विलंब करने की आवश्यकता है कि आप इसे किस राज्यपाल के लिए चाहते हैं में बदलो।

मेरे घंटों और खोज के घंटों से मुझे इसके लिए इससे अधिक स्थायी समाधान नहीं मिला है। मुझे लगता है कि अगर यह सबसे अच्छा फिक्स है जो मैंने पाया है, तो यह पॉवरवेव पर दो मिनट का है? सही।

सबसे अच्छा फिक्स नहीं है, लेकिन यह पॉवरस्वेव चीज़ पर थोड़ा स्विच करने के बाद इसे कुछ हद तक स्थायी बना देता है। यदि आप सही बूट करना चाहते हैं और किसी गेम या किसी चीज़ में कूदना चाहते हैं, तो आपको कोड के लिए एक मिनट इंतजार करना होगा, जिसे आप इसे पॉवरवेव से वापस स्विच कर सकते हैं या उस पर समय कम कर सकते हैं (यह निर्भर करता है कि इसमें कितना समय लगता है सब कुछ शुरू करने के लिए तो यह सही ढंग से प्रदर्शन पर वापस आ जाएगा)।

और, हमेशा की तरह, डिफ़ॉल्ट पर वापस जाने के लिए (मैंने लोगों के पीसी के साथ कुछ मुद्दों को देखा है, जिसके कारण उन्होंने इसे पहली बार में पॉवरवेव में डिफॉल्ट किया होगा) बस कोड को rc.local और रिबूट से हटा दें या इसे वापस स्विच करें अपने सीपीयू आइकन संकेतक स्विचर या रन के साथ मैन्युअल रूप से;

 sudo /etc/init.d/cpufrequtils restart

टर्मिनल और रिबूट में।



0

स्विच87 के उत्तर पर आधारित, मैंने एक सरल स्क्रिप्ट बनाई cpufreq-set-all, जो cpufreq-setसभी सीपीयू के साथ अन्य काम करने की अनुमति देगा :

   #!/bin/bash
   MAX_CPU=$((`nproc --all` - 1))
   for i in $(seq 0 $MAX_CPU); do
       echo "Changing CPU " $i " with parameter "$@;
       cpufreq-set -c $i $@ ;
   done

अब इसे chmod +xइस तरह ( निश्चित रूप से) के बाद लागू किया जा सकता है :

cpufreq-set-all -g powersave

या

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