В началоУправление питанием компьютера → Управление питанием ЦПУ
Gentoo-doc HOME Пред.: ПодготовкаВ началоУровень выше: Управление питанием компьютераСлед.: LCD Power Management

3. Управление питанием ЦПУ

Мобильные процессоры могут работать на нескольких частотах, а некоторые позволяют даже менять напряжение. Максимальная производительность нужна далеко не всегда, и меняя её можно сохранить немало энергии, причём зачастую без какого-либо понижения производительности

3.1. Техническая часть

Частота процессора связана с некоторыми техническими терминами, который могут быть вам незнакомы, поэтому ниже будет дано краткое введение.

Для начала, ядро должно "уметь" менять частоту процессора. Драйвер процессора CPUfreq (CPUfreq processor driver) знает как сделать это на вашем ЦП, поэтому важно указать его правильно в вашем ядре. Скорее всего, вы это уже сделали выше. Также ядро должно знать, какую частоту устанавливать. Это достигается посредством политик (policy), которые состоят из политики CPUfreq (CPUfreq policy) и властелина (governor). Первое – это пара из двух чисел, обозначающих максимальную и минимальную допустимую частоту ЦП, а второе отвечает за то, какую конкретно частоту выбрать. Так, властелин сохранения энергии (powersave governor) всегда выбирает минимальную допустимую частоту, а властелин максимальной производительностью (performance governor), наоборот, максимальную; властелин пользователя (userspace governor) использует необходимую пользователю (или его приложениям) частоту, читая её из /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed.

Всё это не очень похоже на динамическое изменение частоты (и действительно не является таковым). Однако динамика может быть получена несколькими способами. Например, "требовательный" властелин (ondemand governor) принимает решение, основываясь на текущей загрузке ЦП. Это же может быть реализовано посредством различных пользовательских инструментов таких, как cpudn, cpufreqd, powernowd и многих других. События ACPI можно использовать для включения или выключения динамического изменения частоты в зависимости от источника питания.

3.2. Установка частоты вручную

Уменьшение скорости и напряжение на ЦП даёт двойной выигрыш: с одной стороны, потребляется меньше энергии, а с другой – ваша система греется не так сильно, как на полной мощности. Главный недостаток – очевидная потеря производительности. Уменьшение скорости процессора – обмен производительности на сохранение энергии.

Примечание: Не все ноутбуки поддерживают изменение частоты. Если вы не уверены, посмотрите список поддерживаемых процессоров в секции Устранение неполадок.

Самое время проверить, работает ли изменение частоты процессора. Давайте установим ещё один очень полезный при отладке инструмент: sys-power/cpufrequtils

Листинг 12. Проверка частоты ЦП

# emerge cpufrequtils
# cpufreq-info


Вывод будет примерно таким:

Листинг 13. Пример вывода cpufreq-info

cpufrequtils 0.3: cpufreq-info (C) Dominik Brodowski 2004
Report errors and bugs to linux@brodo.de, please.
analyzing CPU 0:
  driver: centrino
  CPUs which need to switch frequency at the same time: 0
  hardware limits: 600 MHz – 1.40 GHz
  available frequency steps: 600 MHz, 800 MHz, 1000 MHz, 1.20 GHz, 1.40 GHz
  available cpufreq governors: conservative, ondemand, powersave, userspace, performance
  current policy: frequency should be within 924 MHz and 1.40 GHz.
    The governor "performance" may decide which speed to use
    within this range.
  current CPU frequency is 1.40 GHz. governor "conservative" may decide which
    speed to use within this range. 
 current CPU frequency is 1.60 GHz.


Теперь, поиграйтесь с cpufreq-set, чтобы убедиться в работоспособности переключение частоты. Например, выполните cpufreq-set -g ondemand, чтобы активировать "требовательного" властелина, и проверьте изменение с помощью cpufreq-info. Если не работает как надо, вы можете попробовать найти причину в Устранении неполадок в конце этого руководства.

3.3. Автоматическая настройка частоты

Сказанное, конечно, прекрасно, но не очень применимо в реальной жизни. Лучше поручить вашей системе автоматически подбирать подходящую частоту. Есть много способов сделать это. Следующая таблица даёт общее представление о них и поможет вам выбрать необходимый. Их можно не совсем точно разделить на три типа: ядро – для методов нуждающихся только в поддержке ядра, демон – для запускающихся в фоне программ и графический – для программ, которые предоставляют графический интерфейс для простой настройки.

Имя

Тип

Причины для переключения (Switch decision)

Используемые властелины ядра (Kernel governors)

Предоставляемые режимы (Further governors)

Комментарии

требовательный властелин ('ondemand' governor)

Ядро

Загрузка ЦП

-

-

Выставляет максимальную частоту при загрузке ЦП и медленно шагает вниз во время простоя ЦП. Дальнейшая настройка через /sys/devices/system/cpu/cpu0/cpufreq/ondemand/. По-прежнему требует пользовательских программ (скриптов), если переключение властелинов или подобное необходимо.

консервативный властелин ('conservative' governor)

Ядро

Загрузка ЦП

-

-

В отличие от требовательного властелина, консервативный не прыгает до максимальной частоты во время высокой загрузки ЦП, а увеличивает частоту постепенно. Дальнейшая настройка через /sys/devices/system/cpu/cpu0/cpufreq/conservative/. По-прежнему требует пользовательских программ (скриптов), если переключение властелинов или подобное необходимо.

cpudyn

Демон

Загрузка ЦП

Производительность, сохранение энергии

Динамические

Также поддерживает disk standby. Однако стоит заметить, что laptop-mode в большинстве случаев работает лучше.

cpufreqd

Демон

Состояние батареи, загрузка ЦП, температура, запущенные программы и др.

Все возможные

Нет

Тонкая (и местами сложная) установка. Расширяем посредством плагинов, таких как отслеживание показаний сенсоров (sensor monitoring) (lm_sensors). Может управлять памятью и ядром некоторых построенных на NVidia графических карт. Cpufreqd не поддерживает SMP, и при желании им можно управлять вручную во время выполнения.

powernowd

Демон

Загрузка процессора

Нет

Пассивный, синусоидальный (sine), агрессивный

Поддерживает SMP.

ncpufreqd

Демон

Температура

Нет

Производительность, сохранение энергии

Переключает властителинов производительности и сохранения энергии. Очень полезен на ноутбуках, страдающих перегревом.

speedfreq

Демон

Загрузка ЦП

Нет

Динамический, сохранения энергия, производительность, фиксированной скорости

Легко настраивается с помощью приятного клиент-серверного интерфейса. Требуется ядро 2.6. Не поддерживается, сломан и поэтому удален из портежей. Пожалуйста, перейдите на cpufreqd, если вы всё ещё используете эту программу.

gtk-cpuspeedy

Графический

Нет

Нет

Нет

Gnome-приложение, графический инструмент для ручной установки частоты процессора. Не предоставляет никакой автоматизации.

klaptopdaemon

Графический

Состояние батареи

Все возможные

Нет

Только для КДЕ, властелин требований для динамического изменения частоты.

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

Что выбрать? Если вы не можете решить, попробуйте cpufreqd.

Листинг 14. Установка cpufreqd

# emerge cpufreqd


cpufreqd настраивается редактированием /etc/cpufreqd.conf. Конфиг, предоставляемый по умолчанию, может вас несколько смутить. Рекомендуется заменить его на конфигурационный файл, который создал бывший разработчик Gentoo – Henrik Brix Andersen. Учтите, что вам необходим cpufreqd-2.0.0 или более новая версия. Ранние версии используют другой синтаксис конфигурационного файла.

Листинг 15. /etc/cpufreqd.conf (cpufreqd-2.0.0 или более новый)

[General]
pidfile=/var/run/cpufreqd.pid
poll_interval=3
enable_plugins=acpi_ac, acpi_battery
enable_remote=1
remote_group=wheel
verbosity=5
[/General]

[Profile]
name=ondemand
minfreq=0%
maxfreq=100%
policy=ondemand
[/Profile]

[Profile]
name=conservative
minfreq=0%
maxfreq=100%
policy=conservative
[/Profile]

[Profile]
name=powersave
minfreq=0%
maxfreq=100%
policy=powersave
[/Profile]

[Profile]
name=performance
minfreq=0%
maxfreq=100%
policy=performance
[/Profile]

[Rule]
name=battery
ac=off
profile=conservative
[/Rule]

[Rule]
name=battery_low
ac=off
battery_interval=0-10
profile=powersave
[/Rule]

[Rule]
name=ac
ac=on
profile=ondemand
[/Rule]


Теперь вы можете запустить демон cpufreqd. Добавьте его в уровни запуска default и battery.

Листинг 16. Запуск cpufreqd

# rc-update add cpufreqd default battery
# rc


Иногда желательно установить политику отличную от той, что выбрал демон. Например, если заряд батареи низок, но вы знаете, что скоро появится питание от сети. В этом случае вы можете перевести cpufreqd в ручной режим с помощью команды cpufreqd-set manual и далее выбрать одну из сконфигурированных политик (они перечислены в cpufreqd-get). Выйти из ручного режима вы можете командой cpufreqd-set dynamic.

Внимание

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

3.4. Проверка результата

Осталось только проверить, что ваши новые политики работают правильно. Простой способ сделать это – следить за скоростью ЦП во время работы:

Листинг 17. Отслеживание скорости ЦП

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


Если /proc/cpuinfo не обновляется (см. Устранение неполадок), попробуйте sys-apps/x86info:

Листинг 18. Альтернативное отслеживание скорочти ЦП

# watch x86info -mhz


В зависимости от ваших настроек, частота должна возрастать при нагрузке, падать в спокойном состоянии, или оставаться на том же уровне. Если вы используете cpufreqd и уровень подробности (verbosity) равен 5 или больше в cpufreqd.conf, то вы можете найти дополнительную информацию о происходящем в syslog.

Пред.: ПодготовкаВ началоУровень выше: Управление питанием компьютераСлед.: LCD Power Management
В началоУправление питанием компьютера → Управление питанием ЦПУ