Як встановити регулятор масштабування частоти процесора для всіх ядер відразу?


37

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

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


2
Під "спеціальним рішенням" ви маєте на увазі, що скрипт оболонки неприйнятний, він повинен бути вбудованою кнопкою GUI?
jg-faustus

Мені просто цікаво, чи вже існує рішення в стандартній установці (не потрібно мати графічний інтерфейс).
htorque

Перевірте цю сторінку: idebian.wordpress.com/2008/06/22/cpu-frequency-scaling-in-linux у розділі "реалізація debian": Очевидно, можливо змінити типовий режим завантаження, і є інструмент простору користувачів під назвою powernowd. (Це коментар, а не відповідь, оскільки повідомлення від 2008 року, і я не перевіряв, чи все ще працює ...)
jg-faustus

Відповіді:


25

Я все ще є нобусом Linux, але чи не вважаєте ви, що cpufrequtils дозволяє вам робити це за допомогою (його не в комплекті в ОС Ubuntu, але чи є в сховищі)

sudo apt-get install cpufrequtils
sudo cpufreq-set -r -g performance
  • -rПрапор використовується , щоб встановити зміни для всіх ( «все обладнання , пов'язані») сердечники

6
Зв'язаний варіант -r не робить це для всіх ядер. Треба вказати номер CPU з опцією -c <номер>, однак цей скрипт буде робити це для всіх cpus за один раз: for ((i = 0; i <$ (nproc); i ++)); виконайте продуктивність cpufreq -c $ i -r -g; виконано
Шрі,

6
Точно, @Sri має рацію. cpufreq-setнасправді бракує в кінцевому рахунку простого, але потрібного функціоналу. Багато людей, як це чітко показує лічильник голосів, просто не знають про це, оскільки його опис просто оманливий, щоб доповнити його.
poige

2
Хто дає ці +1 без тестування ???? Це зовсім не працює. Я розмістив найпростіше робоче рішення, яке я міг знайти.
switch87

20

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

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

Тепер я можу запустити щось на кшталт, setgov ondemandі всі ядра перейдуть на губернатор вимоги .


2
Це не працює, оскільки файл scaling_governor належить root і має обмежені права доступу. Змінювати дозволи не завжди рекомендується.
Шрі

Будь ласка, дивіться альтернативний сценарій у моєму коментарі до відповіді користувача49449.
Шрі

6

найкоротша команда змінити губернатор усіх ядер:

sudo bash -c 'for i in {0..7}; 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
}

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

Те, як я встановив це, щоб притримуватися, оскільки губернатор за замовчуванням повертається до powerave приблизно через 30 секунд, як зараз Ubuntu 16.04 або новіших (я перебуваю на Ubuntu Mate);

  1. Поставте цей (один рядок) код (дякую, люб’язно переключившись87 у попередній відповіді)

    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 хвилина), вам потрібно затримати команду та "виконання" (у командній частині) на те, до якого губернатора ви хочете, щоб це перейти.

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

Не найкраще виправлення, але це робить його дещо постійним після того, як він робить мало перемикання на енергозберігаючу річ. Якщо ви хочете завантажитися прямо вгору і ввійти в гру або щось, що вам доведеться зачекати хвилину на код, який ви просто вставили, щоб переключити його назад з PowerSave або зменшити термін на ньому (залежно від часу, який він займає все для запуску, щоб він повернувся до продуктивності правильно).

І, як завжди, для повернення до замовчування (я бачив деякі проблеми із перегріванням ПК у людей, через що вони, можливо, дефолтували його в першу чергу для енергозбереження), просто видаліть код з rc.local і перезавантажте або переключіть його назад вручну за допомогою перемикача індикатора значка процесора або запустіть;

 sudo /etc/init.d/cpufrequtils restart

в терміналі та або перезавантажте.



0

Спираючись на відповідь 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.