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

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

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

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

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

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

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

sudo apt-get install cpufrequtilssudo cpufreq-set -r -g performance
  • То -r флаг используется для установки изменения для всех ("всех связанных с оборудованием") ядер

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

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}

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

sudo cpupower frequency-set --governor performance

С таким же успехом можно было бы добавить завершение кода 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

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

  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. Кажется, что любая команда для смены губернатора должна выполняться как sudo.

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

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

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

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

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

 sudo /etc/init.d/cpufrequtils restart

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

Основываясь на ответе 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

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

#!/bin/bashecho "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: " $MAXGOVERNOR=@0if [ $# -eq 0 ]    then        echo "No arguments supplied, using ONDEMAND governor"        GOVERNOR="ondemand"    else        echo "Governor " $1 " supplied"        GOVERNOR=$1fifor ((i=0;i<$(nproc);i++));    do cpufreq-set -c $i -r -g $GOVERNOR  --min $MIN --max $MAX;done

Под “пользовательским решением” вы подразумеваете, что сценарий оболочки неприемлем, он должен быть встроенной кнопкой GUI?

Мне просто интересно, существует ли уже решение в стандартной установке (не обязательно иметь графический интерфейс).

Проверьте эту страницу: CPU frequency scaling in Linux | iDebian's Weblog / в разделе “реализация debian”: По-видимому, можно изменить значение загрузки по умолчанию, и есть инструмент пользовательского пространства под названием powernowd. (Это скорее комментарий, чем ответ, потому что сообщение датировано 2008 годом, и я не проверял, работает ли оно по-прежнему …)