CPU frequency scaling (Русский)

From ArchWiki
Jump to: navigation, search

Tango-preferences-desktop-locale.pngЭта страница нуждается в сопроводителеTango-preferences-desktop-locale.png

Статья не гарантирует актуальность информации. Помогите русскоязычному сообществу поддержкой подобных страниц. См. Команда переводчиков ArchWiki

Tango-dialog-warning.pngИнформация в этой статье или разделе устарелаTango-dialog-warning.png

Причина: В связи с выходом ядер версии 3.5 и выше, cpufrequtils устарели и больше не используются. (Обсудить)

Cpufrequtils — это набор утилит разработанных для поддержки функции масштабирования частоты процессора, технологии, преимущественно применяемой в ноутбуках, которая позволяет операционной системе увеличивать или уменьшать тактовую частоту процессора в зависимости от нагрузки на систему и/или схемы энергопотребления. Например, масштабирование частоты процессора может сократить частоту 2 ГГц процессора до 1 ГГц когда ноутбук работает от батарей, увеличивая таким образом время работы, снижая нагрев и уменьшая шум вентилятора.

При использовании совместно с Pm-utils и Laptop Mode Tools, владельцы обеспечены полным набором утилит для управления энергопотреблением.

Установка cpufrequtils

cpufrequtils[ссылка недействительна: replaced by cpupower] - это набор утилит для масштабирования частоты процессора. Установка этого пакета необязательна, но крайне рекомендуется, так как предоставляет полезные наборы команд для консоли и демона для запуска масштабирования при старте системы.

powertop предоставляет ту же информацию, что и команда cpufreq-info, однако уступает ей в детальности.

Пакет cpufrequtils[ссылка недействительна: replaced by cpupower] доступен в репозитории [extra]:

# pacman -S cpufrequtils

Настройка

Настройка масштабирования частоты производится в три этапа:

  1. загрузка соответствующего драйвера управления частотой процессора.
  2. загрузка желаемого регулятора масштабирования.
  3. настройка метода управления регуляторами: ручной (через /sys или cpufreq-set), через cpufrequtils daemon, laptop-mode-tools, acpid или пи помощи апплета окружения рабочего стола.
  4. (опционально) настройка масштабирования частоты.

Драйвер управления частотой процессора

Для корректного управления масштабированием частотой, ОС прежде всего должна знать параметры вашего процессора(ов). Для этого нужно загрузить модуль ядра, который может считывать и управлять параметрами вашего процессора(ов).

Для большинства современных ноутбуков и настольных компьютеров можно использовать драйвер acpi-cpufreq, однако есть ещё такие варианты как p4-clockmod, powernow-k6, powernow-k7, powernow-k8, и speedstep-centrino. Чтобы увидеть полный список, запустите:

$ ls /lib/modules/$(uname -r)/kernel/arch/x86/kernel/cpu/cpufreq/
Tip: Для AMD "K10" используйте драйвер powernow-k8.

Для загрузки драйвера вручную:

Intel

# modprobe acpi-cpufreq

Для более старых процессоров Intel, система может выдать:

FATAL: Error inserting acpi_cpufreq ([...]/acpi-cpufreq.ko): No such device

В этой ситуации, замените модуль ядра acpi_cpufreq на speedstep-centrino, p4-clockmod или speedstep-ich.

Tip: Учтите, что модуль speedstep-centrino устарел, а модуль p4-clockmod поддерживает только performance и powersave регуляторов.)

AMD

# modprobe powernow-k8

Загрузка при старте системы

Для автоматической загрузки драйвера во время старта системы, добавьте соответствующий драйвер в массив MODULES в файле /etc/rc.conf. Например:

MODULES=( acpi-cpufreq vboxdrv fuse fglrx iwl3945 ... )

Как только загружен правильный драйвер cpufreq, вы можете посмотреть детальную информацию о вашем процессоре(ах), выполнив:

$ cpufreq-info

Вот пример вывода cpufreq-info:

$ cpufreq-info
 analyzing CPU 0:
  driver: acpi-cpufreq
  CPUs which need to switch frequency at the same time: 0 1
  hardware limits: 1000 MHz - 2.00 GHz
  available frequency steps: 2.00 GHz, 1.67 GHz, 1.33 GHz, 1000 MHz
  available cpufreq governors: ondemand, performance
  current policy: frequency should be within 1000 MHz and 2.00 GHz.
                  The governor "performance" may decide which speed to use
                  within this range.
  current CPU frequency is 2.00 GHz.
 analyzing CPU 1:
  driver: acpi-cpufreq
  CPUs which need to switch frequency at the same time: 0 1
  hardware limits: 1000 MHz - 2.00 GHz
  available frequency steps: 2.00 GHz, 1.67 GHz, 1.33 GHz, 1000 MHz
  available cpufreq governors: ondemand, performance
  current policy: frequency should be within 1000 MHz and 2.00 GHz.
                  The governor "performance" may decide which speed to use
                  within this range.
  current CPU frequency is 2.00 GHz.

Для просмотра списка доступных регуляторов:

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors

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

watch grep \"cpu MHz\" /proc/cpuinfo

Преимущества использования в GNOME

У среды рабочего стола GNOME есть апплет для управления регуляторами "на лету". Чтобы каждый раз не вводить пароль при переключении, просто создайте /var/lib/polkit-1/localauthority/50-local.d/org.gnome.cpufreqselector.pkla и отредактируйте файл:

[org.gnome.cpufreqselector]
Identity=unix-user:USER
Action=org.gnome.cpufreqselector
ResultAny=no
ResultInactive=no
ResultActive=yes

Слово USER замените на ваше имя пользователя.

Пакет desktop-privilegesAUR в AUR содержит файл .pkla для авторизованного использования апплета всей группой пользователей power.

Laptop Mode Tools

Если Вы используете или планируете использовать Laptop Mode Tools для других возможностей энергосбережения, Вы можете также дать этой программе возможность управлять частотой Вашего процессора. Просто добавьте модуль acpi-cpufreq в массив MODULES в файле /etc/rc.conf:

MODULES=(acpi-cpufreq)

Затем просмотрите файл /etc/laptop-mode/conf.d/cpufreq.conf для определения регуляторов, частот и политик использования.

Регуляторы масштабирования (схемы энергопотребления)

Регуляторы можно рассматривать как заранее сконфигурированые схемы энергопотребления процессора. Регуляторы должны быть загружены как модули ядра, чтобы их могли видеть такие программы как kpowersave и gnome-power-manager. Вы можете загрузить столько гувернёров, сколько вам угодно, однако в любой момент времени активным будет только один.

Доступные регуляторы:

cpufreq_performance (по-умолчанию)
регулятор performance(производительность) встроен в ядро и поддерживает процессор(ы) на максимальной тактовой частоте
cpufreq_ondemand (рекомендуется)
динамически увеличивает/уменьшает тактовую частоту процессора в зависимости от загруженности системы
cpufreq_conservative
похож на ondemand, но более экономный (предпочтение отдаётся меньшим тактовым частотам)
cpufreq_powersave
процессор работает на минимально возможной тактовой частоте
cpufreq_userspace
тактовая частота задаётся пользователем вручную

Добавьте необходимый регулятор в массив MODULES в /etc/rc.conf (обязательно после модуля acpi-cpufreq) :

MODULES=(acpi-cpufreq cpufreq_ondemand cpufreq_powersave vboxdrv fuse fglrx iwl3945 ... )

Вы можете вручную установить регулятора при помощи команды cpufreq-set (как root), однако, эта настройка не сохранится после перезагрузки/выключения. Например:

# cpufreq-set -g ondemand

Заметьте, что предыдущие команды задавали регулятора только для первого процессора. Если у Вас многоядерный процессор или многопроцессорная система, используйте флаг -c, чтобы задать регулятор для определенного процессора. Например, чтобы задать регулятор для четвертого процессора (нумерация начинается с нуля):

# cpufreq-set -c 3 -g ondemand

Чтобы задать регулятор для всех ядер многоядерного процессора, введите (пример для 6-ядерного процессора):

# for i in 0 1 2 3 4 5; do cpufreq-set -c $i -g ondemand; done

Чтобы задать максимальный и минимальный пределы частоты для регулятора используйте опции -u и -d. Например, зададим максимальный предел 2.20GHz и минимальный предел 1.50GHz для регулятора ondemand и всех ядер 6-ядерного процессора:

# for i in 0 1 2 3 4 5; do cpufreq-set -c $i -g ondemand -u 2.20Ghz -d 1.50Ghz; done

Для дополнительной информации запустите cpufreq-set --help или man cpufreq-set.

Если Вам нужен графический интерфейс для настройки регуляторов или частоты, есть пакет trayfreq, который при запуске появляется в трее.

Изменение параметров работы регулятора ondemand

Чтобы изменить значение загрузки процессора, при котором регулятор повышает частоту, нужно изменять значение в файле /sys/devices/system/cpu/cpufreq/ondemand/up_threshold. Текущее значение можно посмотреть, выполнив:

# cat /sys/devices/system/cpu/cpufreq/ondemand/up_threshold

Значение по-умолчанию равно 95, в версии ядра 2.6.37. Это значит, что частота повысится, как только загрузка процессора достигнет 95%. Можете изменить это значение, запустив:

echo "15" > /sys/devices/system/cpu/cpufreq/ondemand/up_threshold
Note: Минимальное допустимое значение, которое Вы вводите, должно быть не ниже значение в файле down_threshold; если Вы попробуете внести меньшее значение, bash вернет ошибку: "bash: echo: write error: Invalid argument"
Note: Добавление строки с помощью команды echo в файл /etc/rc.local позволит настройке "пережить" перезагрузку. Однако, должен быть выставлен гувернер ondemand.

Если Вы не хотите дожидаться загрузки демона cpufreq при старте системы (например, чтобы уменьшить время загрузки), добавьте это в файл /etc/rc.local:

(sleep 30 && sh -c "echo -n 75 > /sys/devices/system/cpu/cpu0/cpufreq/ondemand/up_threshold")& 

Взаимодействие с событиями ACPI

Пользователи могут сконфигурировать автоматическое масштабирование при различных событиях ACPI, таких как подключение устройства питания или закрытия крышки ноутбука. Эти события определяются в /etc/acpi/handler.sh. Если пакет acpid установлен, этот файл уже должен существовать по указанному пути. Например, чтобы изменить регулятор с performance на conservative при отключении устройства питания и вернуть его на место при подключении:

/etc/acpi/handler.sh
[...]

 ac_adapter)
     case "$2" in
         AC*)
             case "$4" in
                 00000000)
                     echo "conservative" >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor    
                     echo -n $minspeed >$setspeed
                     #/etc/laptop-mode/laptop-mode start
                 ;;
                 00000001)
                     echo "performance" >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
                     echo -n $maxspeed >$setspeed
                     #/etc/laptop-mode/laptop-mode stop
                 ;;
             esac
         ;;
         *) logger "ACPI action undefined: $2" ;;
     esac
 ;;

[...]

Демон

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

Перед тем, как запустить демона, отредактируйте /etc/conf.d/cpufreq. Выберите нужный Вам регулятор, выставите минимальную/максимальную частоту процессора, к примеру:

/etc/conf.d/cpufreq
#configuration for cpufreq control

# valid governors:
#  ondemand, performance, powersave,
#  conservative, userspace
governor="ondemand"

# valid suffixes: Hz, kHz (default), MHz, GHz, THz
min_freq="1GHz"
max_freq="2GHz"
Note: Точные значения минимальной и максимальной частоты процессора можно узнать, запустив cpufreq-info после загрузки драйвера ЦП (modprobe acpi-cpufreq). Эти значения задавать необязательно. Вы можете закомментировать строки min/max_freq. Масштабирование будет работать автоматически.

После настройки можете запустить демона:

# /etc/rc.d/cpufreq start

Для автоматического запуска демона при старте системы, добавьте cpufreq в массив DAEMONS в файле /etc/rc.conf. К примеру:

DAEMONS=(syslog-ng networkmanager @alsa @crond @cupsd @cpufreq)

Устранение неисправностей

  • Некоторые приложения, например, ntop, могут некорректно работать при масштабировании частоты. В случае с ntop может произойти сегментация или Вы можете потерять информацию, так как регулятор ondemand не может достаточно быстро среагировать на повышение нагрузки на процессор и повысить частоту, а текущей частоты не хватит для обработки всех пакетов, пришедших на сетевой интерфейс.
  • Некоторые модели процессоров могут не очень хорошо работать на стандартных настройках регулятора ondemand (например, видео воспроизводится с рывками или тормозит анимация окон). Это можно решить, не только отключив полностью масштабирование частоты. Также можно увеличить "агрессивность" переключения частоты. Просто снизьте значение переменной up_threshold для каждого процессора. См. изменение параметров работы регулятора ondemand.
  • Иногда демон задает не максимальную частоту процессора, а частоту немного меньше (2.99МГц вместо 3МГц). В этой ситуации задайте значение максимальной частоты немного больше максимальной. Например, если максимальная частота процесстора 3МГц, задайте переменной max_freq значение 3.01МГц.
  • Некоторые модели BIOS испытывают трудности с масштабированием частот, да и с переключением на повышенные частоты. Правда, это можно обойти. Добавьте строку "processor.ignore_ppc=1" в загрузку ядра или установите значение /sys/module/processor/parameters/ignore_ppc равное 1.
  • Некоторые комбинации драйверов ALSA и звуковых карт могут вызвать заикание звука во время переключения частот регулятором. Пока это можно решить только отключением регулятора масшабирования.