Как установить регулятор масштабирования частоты процессора для всех ядер одновременно?

Я бы хотел установить регулятор масштабирования частоты процессора для всех ядер одновременно вместо того, чтобы делать это отдельно для каждого ядра. Есть ли способ сделать это?

(я знаю, что было бы легко вывести губернатора на /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor, но я не ищу нестандартного решения.)

43
задан 6 January 2011 в 11:58

8 ответов

Я много гуглил, и я думаю, что это просто невозможно,поэтому я добавил следующий однострочный файл в свой .bashrc :

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

Теперь я могу запустить что-то вроде setgov ondemand , и все ядра переключатся на ondemand губернатор.

23
ответ дан 6 January 2011 в 11:58

Вы можете сделать это для всех ядер одновременно, запустив

sudo cpupower frequency-set --governor performance
3
ответ дан 6 January 2011 в 11:58

Можно также добавить завершение кода bash, пока мы на нем:

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
3
ответ дан 6 January 2011 в 11:58

Я все еще новичок в Linux, но разве вы не думаете, что cpufrequtils позволяет делать это, используя (он не входит в состав ОС Ubuntu, но есть в репозитории)

sudo apt-get install cpufrequtils
sudo cpufreq-set -r -g performance
  • Флаг -r используется для установки изменений для всех («связанных со всем оборудованием») ядер
26
ответ дан 6 January 2011 в 11:58

самая короткая команда для смены регулятора всех ядер следующая:

sudo bash -c 'for ((i=0;i<$(nproc);i++)); do cpufreq-set -c $i -g performance; done'

Вы можете добавить ее в .bashrc, как упомянул htorque, вам нужно будет запустить это как root sudo setgov performance :

function setgov ()
{
     for i in {0..7}; 
     do 
         cpufreq-set -c $i -g $1; 
     done
}
9
ответ дан 6 January 2011 в 11:58

На основе ответа switch87 я создал простой скрипт 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
0
ответ дан 6 January 2011 в 11:58

Как я установил это, так как регулятор по умолчанию возвращается в режим энергосбережения примерно через 30 секунд, начиная с Ubuntu 16.04 или более поздней версии (я использую Ubuntu Mate);

  1. Поместите это (одна строка) кода (спасибо, любезно предоставлено switch87 в предыдущем ответе)

     sleep 60 && bash -c 'for i in {0..7};  выполнить cpufreq-set -c $ i -g performance;  сделанный'
     
  2. в файл в каталоге

     /etc/rc.local
     

Моя - это строка над «exit 0» и раскомментированная под прокомментированными.

«rc.local» для тех, кто не знает, он запускает команду как sudo. Кажется, что любая команда для смены регулятора должна быть запущена как sudo.

Это позволяет регулятору вернуться в режим энергосбережения и запускает код как sudo через 60 секунд, чтобы вернуть его к производительности.

Измените " 60 "(в коде, который вы копируете) на любое время (в секундах. 60 = 60 секунд = 1 минута) вам нужно отложить команду и" производительность "(в командной части) до того, на какой регулятор вы хотите его изменить.

За часы и часы поиска я не нашел более постоянного решения этой проблемы, чем это. Я полагаю, что через пару минут он находится в режиме энергосбережения, если это лучшее решение, которое я нашел, верно? Правильно.

Не лучшее исправление, но оно делает его несколько постоянным после небольшого перехода на режим энергосбережения. Если вы хотите сразу загрузиться и перейти в игру или что-то еще, вам придется подождать минуту кода, который вы только что ввели, чтобы переключить его обратно из режима энергосбережения или уменьшить время на нем (в зависимости от того, сколько времени потребуется, чтобы все запустилось, чтобы оно вернулось к нормальной производительности).

И, как всегда, чтобы вернуться к значениям по умолчанию (я видел некоторые проблемы с перегревом компьютеров людей, поэтому они могли сначала установили для него режим энергосбережения) просто удалите код из rc.local и перезагрузите или переключите его обратно вручную с помощью переключателя индикатора значка процессора или запустите;

 sudo /etc/init.d/cpufrequtils restart

в терминале и / или перезагрузите.

2
ответ дан 6 January 2011 в 11:58

иногда недостаточно установить регулятор. Мне также пришлось установить переменные MAX и MIN для частоты, потому что в политиках масштабирования они были установлены на минимум, поэтому я делаю следующее: 1. Получите минимальную и максимальную частоты масштабирования от CPU 0. 2. Разделите их на миллион, чтобы получить частоту в ГГц. 3. Передайте результат через bc , чтобы я мог получить результат в формате с плавающей запятой (BASH может обрабатывать только целые числа) - scale = 1 - это количество десятичных знаков. 4. Убедитесь, что в командной строке указан регулятор масштабирования. 5. Если нет, установите ONDEMAND - сэкономьте деньги на холостом ходу. 6. Выполните команду cpufreq-set в цикле на всех CPU-s

#!/bin/bash
echo "Setting all CPUs to " "$@"
CPUINFO_MIN_FREQ=$(cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq)
CPUINFO_MAX_FREQ=$(cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq)
MIN=$(echo "scale=1; $CPUINFO_MIN_FREQ / 1000000" | bc)"G"
MAX=$(echo "scale=1; $CPUINFO_MAX_FREQ / 1000000" | bc)"G"

echo "Minimum frequency: " $MIN ", Maximum frequency: " $MAX

GOVERNOR=@0
if [ $# -eq 0 ]
    then
        echo "No arguments supplied, using ONDEMAND governor"
        GOVERNOR="ondemand"
    else
        echo "Governor " $1 " supplied"
        GOVERNOR=$1
fi

for ((i=0;i<$(nproc);i++));
    do cpufreq-set -c $i -r -g $GOVERNOR  --min $MIN --max $MAX;
done
0
ответ дан 5 January 2021 в 23:56

Другие вопросы по тегам:

Похожие вопросы: