Как изменить регулятор по умолчанию?


12

Я хочу изменить регулятор по умолчанию на моем пи с ondemand на производительность. Есть ли способ сделать это?

Ответы:


21

Я не думаю, что вы можете изменить настройки по умолчанию без перекомпиляции ядра. Я имею в виду тот, который выбирает ядро ​​при загрузке.

Тем не менее, вы можете указать ему использовать другой регулятор во время работы, поэтому, если вы хотите эффективно установить значение по умолчанию без перекомпиляции, вы можете добавить что-нибудь в /etc/rc.localили какой-либо другой сценарий запуска.

/sysКаталога нет на диске; это поддельная файловая система в оперативной памяти, которая на самом деле является интерфейсом для получения информации и отправки команд ядру. Это все относительно /sys/devices/system/cpu, так что:

> cd /sys/devices/system/cpu

Вы также должны быть пользователем root, чтобы делать write ( echo blahblah >). Во всяком случае, относительно вышеупомянутого каталога, чтобы увидеть доступные регуляторы:

> cat cpu0/cpufreq/scaling_available_governors
conservative ondemand userspace powersave performance

По-видимому, ваш ondemand(но читайте "Gotcha" ниже об этом); Проверять:

> cat cpu0/cpufreq/scaling_governor
ondemand

Чтобы изменить это:

echo performance > cpu0/cpufreq/scaling_governor

Обратите внимание, что это должно быть сделано как root, или как это

sudo sh -c "echo performance > cpu0/cpufreq/scaling_governor"

Просто sudoне получится, потому что есть редирект >.

Теперь вы заметите, что /sys/devices/system/cpu/cpufreqкаталог (НЕ такой же, как /sys/devices/system/cpu/cpu0/cpufreq!), Который ранее содержал файловые дескрипторы для настройки регулятора по требованию, пуст.


Попался...

В Raspbian есть сценарий инициализации с неправильным именем raspi-config(нет, он не имеет ничего общего с другим, который запускается при первой загрузке также с ошибочным именем apply_noobs_os_config.sh), который использует эту технику для установки регулятора на значение, ondemandесли только клавиша Shift удерживается (стандартное ядро ​​Raspbian powersaveскомпилировано в). Он больше ничего не делает, поэтому можно отключить this ( systemctl disable raspi-config), или вы можете отредактировать его в соответствии с ответом Горкаморки , но тогда вы рискуете его отредактировать с помощью обновления системы и т. Д. - кто знает, что кто-то планирует делать с этим.

Вы можете попробовать добавить не-sudo версию выше /etc/rc.local. Это может произойти после выхода из raspi-configсценария.


Комментарии не для расширенного обсуждения; этот разговор был перенесен в чат .
Златовласка

2
Вместо того требуют переключения на корень, просто использовать tee: echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor.
вымышленное имя

2
Другой способ: sudo sh -c "производительность эха> cpu0 / cpufreq / scaling_governor"
Moonchild

Поскольку Raspbian основан на Debian, вы сможете найти пакеты cpufrequtilsи sysfsutils. После их установки вы можете установить регулятор и другие параметры из /etc/default/cpufrequtilsи /etc/sysfs.conf- см. Здесь: wiki.debian.org/HowTo/CpuFrequencyScaling
mbirth


3

аналогичный вопрос по обмену стека RPi здесь.

перефразируя, скорость по требованию возрастает до максимума, когда процессор занят на 95%. Вы можете понизить количество занятого времени до более низкого процента (то есть оно будет увеличено, если не так занят):

«запись целочисленного значения в файл (например, вы можете поместить следующее в файл запуска /etc/rc.local): echo 60> / sys / devices / system / cpu / cpufreq / ondemand / up_threshold»

Итак, теоретически ... вы могли бы поставить этот процент на что-то невероятно низкое, например 10 или 5, что означало бы, что он всегда будет работать на максимуме.

Надеюсь это поможет. Не забудьте оценить человека, который разместил это в связанной статье!


3
На самом деле это не ответ на вопрос: «Как я могу изменить губернатора с ondemand на производительность (это два разных губернатора)?
Златовласка

1
@goldilocks Я думаю, что этот ответ все еще добавляет что-то полезное в вопрос, так как объясняет, как заставить одного вести себя так же, как другого.
Дмитрий Григорьев

2

Альтернативное решение (если вы используете Raspbian) может состоять в том, чтобы изменить скрипт init.d в /etc/init.d/raspi-config, чтобы всегда отключать регулятор масштабирования. Поведение по умолчанию - включать его только при запуске, если нажата одна из клавиш Shift:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          raspi-config
# Required-Start: udev mountkernfs $remote_fs
# Required-Stop:
# Default-Start: S
# Default-Stop:
# Short-Description: Switch to ondemand cpu governor (unless shift key is pressed)
# Description:
### END INIT INFO

. /lib/lsb/init-functions

case "$1" in
  start)
    log_daemon_msg "Checking if shift key is held down"
    timeout 1 thd --dump /dev/input/event* | grep -q "LEFTSHIFT\|RIGHTSHIFT"
    if [ $? -eq 0 ]; then
      printf " Yes. Not enabling ondemand scaling governor"
      log_end_msg 0
    else
      printf " No. Switching to ondemand scaling governor"
      SYS_CPUFREQ_GOVERNOR=/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor      if [ -e $SYS_CPUFREQ_GOVERNOR ]; t
hen
        echo "ondemand" > $SYS_CPUFREQ_GOVERNOR
        echo 50 > /sys/devices/system/cpu/cpufreq/ondemand/up_threshold
        echo 100000 > /sys/devices/system/cpu/cpufreq/ondemand/sampling_rate
        echo 50 > /sys/devices/system/cpu/cpufreq/ondemand/sampling_down_factor
        echo 1 | sudo tee /sys/devices/system/cpu/cpufreq/ondemand/io_is_busy
      fi
      log_end_msg 0
    fi
    ;;
  *)
    echo "Usage: $0 start" >&2
    exit 3
    ;;
esac

-3

echo "performance" | sudo tee / sys / devices / system / cpu / cpu0 / cpufreq / scaling_governor


Хотя это может ответить на вопрос, хорошие ответы требуют больше информации, чем вы предоставили здесь. Также в вашем ответе нет ничего такого, что приведенные выше ответы еще не предоставили.
Стив Робиллард
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.