Ссылка на оригинал: http://www.gentoo.org/doc/en/power-management-guide.xml
Автор: Dennis Nienhüser
Перевод: Управление питанием компьютера
Перевод: vah.
С версии: 1.5.
Дата оригинала: 21.01.2008
Дата перевода: 08.02.2008
Перевод статьи Power Management Guide. В статье рассматриваются способы увеличения жизни ноутбука от батареи. Статья ориентирована на Gentoo, но думаю, сделав замену emerge на apt-get install/rpm -Uvh/.. и обладая общими знаниями о runlevels в вашей системе, можно всё написанное перенести и на другие дистрибутивы.
Ёмкость и время жизни батареи ноутбуков были значительно увеличены в последние годы. Тем не менее, современные процессоры потребляют намного больше энергии, чем более старые, и каждое новое поколение ноутбуков комплектуется всё более и более жадными до энергии устройствами. Поэтому Управление Питанием становится даже более важным, чем прежде. Увеличение времени автономной жизни совсем не обязательно влечёт покупку ещё одной батареи - многое можно выжать, применяя грамотные установки Управления Питанием.
Пожалуйста, учтите, что данное руководство описывает настройку Управления Питанием только для ноутбуков. Хотя некоторые разделы и могут быть также применимы к серверам, другие - не только не применимы, но могут даже нанести урон. Не стоит делать что-либо без понимания того, что вы делаете.
Так как это руководство стало достаточно длинным, ниже приведён краткий обзор, который поможет вам не запутаться среди стольких букв.
В главе Подготовка говорится о некоторых общих действиях, которые необходимо выполнить перед настройкой отдельных устройств. Это включает настройку BIOS, конфигурацию ядра и некоторые изменения пользовательских настроек. Следующие три главы сфокусированы на устройствах, обычно потребляющих больше всего энергии - процессоре, дисплее и жёстком диске. Каждое из них может быть настроены независимо. Глава Управление питанием ЦПУ показывает, как изменять частоту процессора для сохранения максимального количества энергии, не теряя слишком много в производительности. Несколько способов отучить ваш жёсткий диск работать напрасно (тем самым заодно уменьшив шум) можно найти в Управление питанием диска. Некоторые заметки о графических картах, беспроводных сетях и USB завершают раздел об устройствах главой Управление питанием других устройств. Отдельная глава отведена (довольно не стабильным) Состояния спячки (sleep states). Последний раздел, Устранение неполадок, содержит список самых распространённых проблем.
Почти каждый элемент может находиться в различных положениях - выключен, спит, ждёт, активен - потребляя различное количество энергии. Наибольшие части отъедаются экраном, процессором, чипсетом и жёсткими дисками. Часто устройство может быть переведено в ОС-независимый режим управления питанием через BIOS, но интеллектуальные средства операционной системы, реагирующие на ситуацию, могут принести намного больше.
Перед детальным обсуждением настройки Управления Питанием для отдельных устройств, стоит убедиться, что следующие требования выполнены. После проверки установок BIOS, стоит включить некоторые опции в ядре (если коротко, то это - ACPI, режимы спячки и регулирование частоты ЦП). Так как сохранение энергии в большинстве случаев влечёт потери производительности, то его стоит применять только при работе от батарей. Для этого разграничения очень полезен отдельный уровень запуска (runlevel) battery.
Для начала стоит взглянуть на настройки управления питанием в BIOS. Наилучшее решение - совмещать возможности BIOS и операционной системы. Но чтобы быть уверенными, что BIOS не будет конфликтовать с операционной системой, лучше пока отключить бОльшую часть его настроек по управлению питанием. Не забудьте перепроверить настройки BIOS после конфигурации чего-либо ещё.
Убедитесь, что acpi USE-флаг установлен в вашем /etc/make.conf. Так же в вашей системе могут быть уместны флаги apm, lm_sensors, nforce2, nvidia, pmu. Подробно об этих флагах смотрите в /usr/portage/profiles/use*.desc. Если вы забыли выставить один из этих флагов, вы можете перекомпилировать необходимые пакеты командой emerge --deep --update --newuse world, подробности в man emerge.
Работа над поддержкой ACPI (Advanced Configuration and Power Interface) в ядре всё ещё не закончена. Используя последнее ядро, вы получаете самую свежую её версию.
В портэжах (portage) содержится несколько версий ядра. Я бы рекомендовал использовать gentoo-sources или suspend2-sources. Последнее содержит патчи для программной остановки 2 (Software Suspend 2), смотрите главу о режимах спячки для более подробной информации. Во время конфигурации ядра включите хотя бы эти опции:
Листинг 2.1: Минимальные настройки ядра для Управления Питанием (приведено для ядра 2.6.23) |
Power Management Options ---> [*] Power Management Support [ ] Software Suspend ACPI( Advanced Configuration and Power Interface ) Support ---> --- ACPI Support (Advanced Configuration and Power Interface) Support [*] Deprecated /proc/acpi files [*] Deprecated /proc/acpi/event support [ ] Sleep States [ ] /proc/acpi/sleep (deprecated) [*] AC Adapter [*] Battery <M> Button <M> Video <M> Fan < > Dock <M> Processor <M> Thermal Zone < > ASUS/Medion Laptop Extras < > IBM ThinkPad Laptop Extras < > Toshiba Laptop Extras (0) Disable ACPI for systems before Jan 1st this year [ ] Debug Statements [*] Power Management Timer Support < > ACPI0004,PNP0A05 and PNP0A06 Container Driver (EXPERIMENTAL) < > Smart Battery System (EXPERIMENTAL) CPU Frequency Scaling ---> [*] CPU Frequency scaling [ ] Enable CPUfreq debugging < > CPU frequency translation statistics [ ] CPU frequency translation statistics details Default CPUFreq governor (userspace) <*> 'performance' governor <*> 'powersave' governor <*> 'ondemand' cpufreq policy governor <*> 'conservative' cpufreq governor <*> CPU frequency table helpers <M> ACPI Processor P-States driver <*> CPUFreq driver for your processor |
Примечание переводчика: поддержка '/proc/acpi' и '/proc/acpi/event' в ядре 2.6.23 была помечена не рекомендуемой (deprecated), в связи с изменением acpi-интерфейса (подробнее см. на kernel.org), но она необходима для acpid, который пока "не приспособился" к /sys интерфейсу.
Решите для себя, хотите ли вы включать программную остановку и состояния спячки (см. ниже). Если у вас ноутбук ASUS, Medion, IBM Thinkpad или Toshiba, но активируйте соответствующий пункт.
Ядро должно знать, как включить изменение частоты процессора. Так как разные типы ЦП имеют разные интерфейсы, стоит выбрать правильный драйвер для процессора. Будьте осторожны - включение, например, Intel Pentium 4 clock modulation на Pentium M приведёт странному поведению системы. Обратитесь к документации по ядру, если вы не знаете, что выбрать.
Скомпилируйте полученное поддерживающее ACPI ядро; убедитесь, что необходимые модули подгружаются при старте системы. Далее запустите emerge sys-power/acpid, чтобы получить acpi-демона. Он сообщает вам о событиях (event) таких, как переключение с питания от сети на батарею или закрытие крышки ноутбука. Убедившись, что модули запущены (если вы не скомпилировали их как часть ядра), запустите acpid командой /etc/init.d/acpid start. Выполните rc-update add acpid default, чтобы демон автоматически запускался при старте системы. Вы скоро узнаете, как использовать его.
Листинг 2.2: Установка acpid |
# emerge sys-power/acpid # /etc/init.d/acpid start # rc-update add acpid default |
Политики (policy) по умолчанию будут включать Управление Питанием, только когда это необходимо, т.е. при работе от батареи. Чтобы сделать переключение между питанием от сети и питанием от батарей более удобным, создайте уровень запуска battery, который будет содержать все скрипты запускающие и останавливающие управление питанием.
Примечание: Вы можете пропустить эту секцию, если вы не хотите создавать ещё один уровень запуска. В последующих секции предполагается, что уровень запуска battery существует.
Листинг 2.3: Создание уровня запуска battery |
# cd /etc/runlevels # cp -a default battery |
Вот и всё! Новоиспечённый уровень запуска battery содержит всё, что есть в defaults, но автоматического переключения между ними нет. Пора изменить это.
Типичные ACPI-события - это закрытие крышки, изменение источника питания и нажатие клавиши засыпания. Для нас важно события изменения источника питания - именно из-за него будут переключаться уровни запуска. Маленький скрипт позаботится об этом.
Для начала, вам нужен скрипт, который меняет уровень запуска на defaults или battery в зависимости от источника энергии. Скрипт использует команду on_ac_power из sys-power/powermgmt-base - убедитесь, что он установлен на вашей системе.
Листинг 2.4: Установка sys-power/powermgmt-base |
# emerge powermgmt-base |
Теперь вы может определить источник питания, запустив on_ac_power && echo AC available || echo Running on batteries в консоли. Скрипт ниже отвечает за переключение уровней. Сохраните его как /etc/acpi/actions/pmg_switch_runlevel.sh.
Листинг 2.5: /etc/acpi/actions/pmg_switch_runlevel.sh |
#!/bin/bash # BEGIN configuration RUNLEVEL_AC="default" RUNLEVEL_BATTERY="battery" # END configuration if [ ! -d "/etc/runlevels/${RUNLEVEL_AC}" ] then logger "${0}: Runlevel ${RUNLEVEL_AC} does not exist. Aborting." exit 1 fi if [ ! -d "/etc/runlevels/${RUNLEVEL_BATTERY}" ] then logger "${0}: Runlevel ${RUNLEVEL_BATTERY} does not exist. Aborting." exit 1 fi if on_ac_power then if [[ "$(</var/lib/init.d/softlevel)" != "${RUNLEVEL_AC}" ]] then logger "Switching to ${RUNLEVEL_AC} runlevel" /sbin/rc ${RUNLEVEL_AC} fi elif [[ "$(</var/lib/init.d/softlevel)" != "${RUNLEVEL_BATTERY}" ]] then logger "Switching to ${RUNLEVEL_BATTERY} runlevel" /sbin/rc ${RUNLEVEL_BATTERY} fi |
Не забудьте сделать скрипт исполняемым, запустив chmod +x /etc/acpi/actions/pmg_switch_runlevel.sh. Последнее, что осталось сделать, - это вызов скрипта всякий раз, когда изменяется источник питания. Это можно сделать, перехватывая ACPI-события посредством acpid. Главное - знать, какое событие генерируется при изменении источника питания. События называются ac_adapter и battery на большинстве ноутбуков, но могут быть другими на вашем.
Листинг 2.6: Определение ACPI-событий для изменение источника питания |
# tail -f /var/log/messages | grep "received event" |
Запустите команду выше и отключите ноутбук от питания. Затем снова подключите его. Вы должны увидеть что-то такое:
Листинг 2.7: Определение ACPI-событий для изменение источника питания |
[Tue Sep 20 17:39:06 2015] received event "ac_adapter AC 00000080 00000000" [Tue Sep 20 17:39:06 2015] received event "battery BAT0 00000080 00000001" |
Интересующая часть - строки, заключенные в кавычки, после received event. Они должны совпадать с теми, что используются в файле ниже. Не беспокойтесь, если ваша система выдает много событий или всегда одни и те же. Пока хоть какое-нибудь событие генерируется, переключение уровней будет работать.
Листинг 2.8: /etc/acpi/events/pmg_ac_adapter |
|
Листинг 2.9: /etc/acpi/events/pmg_battery |
|
Наконец, acpid должен быть перезапущен, чтобы изменения вступили в силу.
Листинг 2.10: Последний штрих |
# /etc/init.d/acpid restart |
Вы можете проверить работоспособность скриптов, отсоединив кабель питания и вставив его вновь, - в syslog должны появляться сообщения "Switching to AC mode" или "Switching to battery mode". Обратитесь к устранению неполадок, если скрипт некорректно распознаёт источник питания.
Из-за природы механизма событий, ваш ноутбук будет загружаться в уровень запуска default не зависимо от источника питания. Это просто замечательно, если мы подключены к сети, но если нет, то нам хотелось бы загружаться в уровень запуска battery. Одно из решений - это добавить ещё один пункт в менеджер загрузки, с параметром softlevel=battery, но не сложно просто забыть его выбрать. Лучший путь - поставить ACPI-событие в конец процесса загрузки и позволить скрипту pmg_switch_runlevel.sh решать, какое изменение уровня необходимо. Откройте /etc/conf.d/local.start в вашем любимом редакторе и добавьте следующие строки:
Листинг 2.11: Изменение уровня запуска во время загрузки |
# Эмулируем acpi событие, чтобы переключить уровень запуска, если работаем от батареи /etc/acpi/actions/pmg_switch_runlevel.sh "battery/battery" |
Подготовив систему таким образом, вы можете активировать политики управления питанием для отдельных устройств.
Мобильные процессоры могут работать на нескольких частотах, а некоторые позволяют даже менять напряжение. Максимальная производительность нужна далеко не всегда, и меняя её можно сохранить немало энергии, причём зачастую без какого-либо понижения производительности
Частота процессора связана с некоторыми техническими терминами, который могут быть вам незнакомы, поэтому ниже будет дано краткое введение.
Для начала, ядро должно "уметь" менять частоту процессора. Драйвер процессора 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 можно использовать для включения или выключения динамического изменения частоты в зависимости от источника питания.
Уменьшение скорости и напряжение на ЦП даёт двойной выигрыш: с одной стороны, потребляется меньше энергии, а с другой - ваша система греется не так сильно, как на полной мощности. Главный недостаток - очевидная потеря производительности. Уменьшение скорости процессора - обмен производительности на сохранение энергии.
Примечание: Не все ноутбуки поддерживают изменение частоты. Если вы не уверены, посмотрите список поддерживаемых процессоров в секции Устранение неполадок.
Самое время проверить, работает ли изменение частоты процессора. Давайте установим ещё один очень полезный при отладке инструмент: sys-power/cpufrequtils
Листинг 3.1: Проверка частоты ЦП |
# emerge cpufrequtils # cpufreq-info |
Вывод будет примерно таким:
Листинг 3.2: Пример вывода 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. Если не работает как надо, вы можете попробовать найти причину в Устранении неполадок в конце этого руководства.
Сказанное, конечно, прекрасно, но не очень применимо в реальной жизни. Лучше поручить вашей системе автоматически подбирать подходящую частоту. Есть много способов сделать это. Следующая таблица даёт общее представление о них и поможет вам выбрать необходимый. Их можно не совсем точно разделить на три типа: ядро - для методов нуждающихся только в поддержке ядра, демон - для запускающихся в фоне программ и графический - для программ, которые предоставляют графический интерфейс для простой настройки.
Имя |
Тип |
Причины для переключения (Switch decision) |
Используемые властелины ядра(Kernel governors) |
Предоставляемые режимы (Further governors) |
Комментарии |
---|---|---|---|---|---|
требовательный властелин ('ondemand' governor) |
Ядро |
Загрузка ЦП |
- |
- |
Выставляет максимальную частоту при загрузке ЦП и медленно шагает вниз во время простоя ЦП. Дальнейшая настройка через /sys/devices/system/cpu/cpu0/cpufreq/ondemand/. По-прежнему требует пользовательских программ (скриптов), если переключение властелинов или подобное необходимо. |
консервативный властелин ('conservative' governor) |
Ядро |
Загрузка ЦП |
- |
- |
В отличие от требовательного властелина, консервативный не прыгает до максимальной частоты во время высокой загрузки ЦП, а увеличивает частоту постепенно. Дальнейшая настройка через /sys/devices/system/cpu/cpu0/cpufreq/conservative/. По-прежнему требует пользовательских программ (скриптов), если переключение властелинов или подобное необходимо. |
Демон |
Загрузка ЦП |
Производительность, сохранение энергии |
Динамические |
Также поддерживает disk standby. Однако стоит заметить, что laptop-mode в большинстве случаев работает лучше. |
|
Демон |
Состояние батареи, загрузка ЦП, температура, запущенные программы и др. |
Все возможные |
Нет |
Тонкая (и местами сложная) установка. Расширяем посредством плагинов, таких как отслеживание показаний сенсоров (sensor monitoring) (lm_sensors). Может управлять памятью и ядром некоторых построенных на NVidia графических карт. Cpufreqd не поддерживает SMP, и при желании им можно управлять вручную во время выполнения. |
|
Демон |
Загрузка процессора |
Нет |
Пассивный, синусоидальный (sine), агрессивный |
Поддерживает SMP. |
|
Демон |
Температура |
Нет |
Производительность, сохранение энергии |
Переключает властителинов производительности и сохранения энергии. Очень полезен на ноутбуках, страдающих перегревом. |
|
Демон |
Загрузка ЦП |
Нет |
Динамический, сохранения энергия, производительность, фиксированной скорости |
Легко настраивается с помощью приятного клиент-серверного интерфейса. Требуется ядро 2.6. Не поддерживается, сломан и поэтому удален из портежей. Пожалуйста, перейдите на cpufreqd, если вы всё ещё используете эту программу. |
|
Графический |
Нет |
Нет |
Нет |
Gnome-приложение, графический инструмент для ручной установки частоты процессора. Не предоставляет никакой автоматизации. |
|
klaptopdaemon |
Графический |
Состояние батареи |
Все возможные |
Нет |
Только для КДЕ, властелин требований для динамического изменения частоты. |
Хотя изменение частоты в зависимости от нагрузки выглядит просто на первый взгляд, это не такая уж и тривиальная задача. Плохой алгоритм может привести к постоянному переключению между двумя частотами или бессмысленному перерасходу энергии из-за неоправданно большой частоты.
Что выбрать? Если вы не можете решить, попробуйте cpufreqd.
Листинг 3.3: Установка cpufreqd |
# emerge cpufreqd |
cpufreqd настраивается редактированием /etc/cpufreqd.conf. Конфиг, предоставляемый по умолчанию, может вас несколько смутить. Рекомендуется заменить его на конфигурационный файл, который создал бывший разработчик Gentoo - Henrik Brix Andersen. Учтите, что вам необходим cpufreqd-2.0.0 или более новая версия. Ранние версии используют другой синтаксис конфигурационного файла.
Листинг 3.4: /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.
Листинг 3.5: Запуск cpufreqd |
# rc-update add cpufreqd default battery # rc |
Иногда желательно установить политику отличную от той, что выбрал демон. Например, если заряд батареи низок, но вы знаете, что скоро появится питание от сети. В этом случае вы можете перевести cpufreqd в ручной режим с помощью команды cpufreqd-set manual и далее выбрать одну из сконфигурированных политик (они перечислены в cpufreqd-get). Выйти из ручного режима вы можете командой cpufreqd-set dynamic
Предупреждение: Не запускайте одновременно более одной программы, перечисленной выше. Это может привести к конфликтах таких, как постоянное переключение между двумя частотами.
Осталось только проверить, что ваши новые политики работают правильно. Простой способ сделать это - следить за скоростью ЦП во время работы:
Листинг 3.6: Отслеживание скорости ЦП |
# watch grep \"cpu MHz\" /proc/cpuinfo |
Если /proc/cpuinfo не обновляется (см. Устранение неполадок), попробуйте sys-apps/x86info:
Листинг 3.7: Альтернативное отслеживание скорочти ЦП |
# watch x86info -mhz |
В зависимости от ваших настроек, частота должна возрастать при нагрузке, падать в спокойном состоянии, или оставаться на том же уровне. Если вы используете cpufreqd и уровень подробности (verbosity) равен 5 или больше в cpufreqd.conf, то вы можете найти дополнительную информацию о происходящем в syslog.
Как вы видели в графике распределения энергии, LCD экран потребляет наибольшую часть энергии (по крайней мере для мобильных ПК). Таким образом, важно не только выключать экран, когда он не нужен, но и уменьшать его яркость, если это возможно. Большинство ноутбуков предоставляют возможность контролировать яркость экрана
В первую очередь необходимо проверить настройки засыпания(standby), остановки(suspend), выключения дисплея. Так как это сильно зависит от вашего оконного менеджера, то вам предстоит делать это самим. Только два замечания: погасить терминал можно командой setterm -blank <количество минут>, setterm -powersave on и setterm -powerdown <количество минут>. Для X.org, необходимо исправить в /etc/X11/xorg.conf следующее (или в /etc/X11/XF86Config для XFree86):
Листинг 4.1: Настройка засыпания дисплея в X.org и XFree86 |
Section "ServerLayout" Identifier [...] [...] Option "BlankTime" "5" # Blank the screen after 5 minutes (Fake) Option "StandbyTime" "10" # Turn off screen after 10 minutes (DPMS) Option "SuspendTime" "20" # Full suspend after 20 minutes Option "OffTime" "30" # Turn off after half an hour [...] EndSection [...] Section "Monitor" Identifier [...] Option "DPMS" "true" [...] EndSection |
Если вы можете управлять яркостью с помощью программы, напишите маленький скрипт, который уменьшает подсветку и поместите его в ваш уровень запуска batery. Следующий скрипт должен работать на большинстве ноутбуков IBM Thinkpad и Toshiba. Для ноутбуков IBM необходимо включить соответствующий пункт в ядре, а владельцы Toshiba могут поставить sys-power/acpitool и пропустить настройку ibm_acpi, описанную ниже.
Предупреждение: Поддержка изменения яркости является экспериментальной для ibm-acpi, так как работает с оборудованием напрямую и может серьёзно поредить его. Обратитесь к сайту ibm-acpi за подробностями.
Для поддержки изменения уровня яркости, модуль ibm_acpi должен быть запущен с параметром experimental.
Листинг 4.2: Настройка засыпания дисплея в X.org и XFree86 |
|
Это должно выполниться без ошибок, а также должен появится файл /proc/acpi/ibm/brightness. Скрипт инициализации будет принимать решение об уровне подсветки в зависимости от источника питания.
Листинг 4.3: /etc/conf.d/lcd-brightness |
|
Листинг 4.4: /etc/init.d/lcd-brightness |
#!/sbin/runscript set_brightness() { if on_ac_power then LEVEL=${BRIGHTNESS_AC:-7} else LEVEL=${BRIGHTNESS_BATTERY:-4} fi if [ -f /proc/acpi/ibm/brightness ] then ebegin "Setting LCD brightness" echo "level ${LEVEL}" > /proc/acpi/ibm/brightness eend $? elif [[ -e /usr/bin/acpitool && -n $(acpitool -T | grep "LCD brightness") ]] then ebegin "Setting LCD brightness" acpitool -l $LEVEL >/dev/null || ewarn "Unable to set lcd brightness" eend $? else ewarn "Setting LCD brightness is not supported." ewarn "For IBM Thinkpads, check that ibm_acpi is loaded into the kernel" ewarn "For Toshiba laptops, you've got to install sys-power/acpitool" fi } start() { set_brightness } stop () { set_brightness } |
Далее, убедитесь, что уровень яркости меняется автоматически, добавив скрипт в уровень запуска battery.
Листинг 4.5: Включаем автоматическое изменение яркости |
# chmod +x /etc/init.d/lcd-brightness # rc-update add lcd-brightness battery # rc |
Жёсткий диск потребляет меньше энергии во время спящего режима (sleep mode). Поэтому разумно активировать возможности сохранения энергии, когда жёсткий диск не используется некоторое время. Есть два различных способа сделать это. Первый, (laptop-mode) будет сберегать больше всего энергии за счёт предотвращения или, по крайней мере, задержки записи на диск. Обратной стороной медали является повышенный риск потери данных при сбое питания или аварии ядра; чтобы уменьшить масштабы возможной аварии, убедитесь, что не запущенно часто пишущих на диск процессов. В качестве альтернативного, второго способа вы можете включить сохранение энергии на диске с помощью hdparm.
Последние 2.6-ядра включают одноимённый laptop-mode. Когда он активирован, "грязные" буферы (dirty buffers) пишутся на диск при вызовах чтения (read calls) или после 10 минут (вместо 30 секунд). Это минимизирует время, которое тратится на раскручивание диска.
Листинг 5.1: Автоматический старт laptop-mode |
# emerge laptop-mode-tools |
Настройки пакета laptop-mode-tools хранятся в файле /etc/laptop-mode/laptop-mode.conf. Отредактируйте его на свой вкус - он отлично документирован. Выполните rc-update add laptop_mode battery, чтобы он запускался автоматически.
Последние версии (1.11 и позже) этого пакета включают полезный инструмент lm-profiler. Он следит за использованием диска и запущенными сетевыми сервисами и предлагает отключить ненужные. Вы можете отключить их как используя встроенную в laptop-mode-tools поддержку уровней запуска (которая будет переопределена /sbin/rc), так и через созданные вами уровни запуска default/battery (рекомендуется).
Листинг 5.2: Пример вывода lm-profiler |
# lm-profiler Profiling session started. Time remaining: 600 seconds [4296896.602000] amarokapp Time remaining: 599 seconds [4296897.714000] sort [4296897.970000] mv Time remaining: 598 seconds Time remaining: 597 seconds [4296900.482000] reiserfs/0 |
После наблюдения за вашей системой в течении 10 минут, lm-profiler выведет список сервисов, которые могли вызвать обращения к диску за этот промежуток времени.
Листинг 5.3: lm-profiler предлагает отключить некоторые сервисы |
Program: "atd" Reason: standard recommendation (program may not be running) Init script: /etc/init.d/atd (GUESSED) Do you want to disable this service in battery mode? [y/N]: n |
Чтобы отключить atd, как предлагается в примере выше, выполните rc-update del atd battery. Будьте осторожны, не отключите жизенноважные сервисы - lm-profiler частенько выдает не совсем правильные данные. Не отключайте что-либо, если вы полностью не уверены в ненужности сервиса.
Если вы не хотите использовать laptop-mode, вы должны отключить часто пишущие на диск сервисы вручную - syslogd кандидат на выбывание, например. Возможно, вы не хотите выключать его полностью, тогда можно подправить конфиг так, чтобы писались только "необходимые вещи". Cups пишет на диск лишь время о времени, поэтому можно выключить его и включать вручную, когда необходимо.
Листинг 5.4: Выключение cups из уровня запуска battery |
# rc-update del cupsd battery |
Вы также может использовать lm-profiler из laptop-mode-tools (см. выше), чтобы найти неугодные сервисы. Если вы истребили их всех, то можно переходить к настройке hdparm.
Вторая возможность - использование hdparm. Пропустите этот шаг, если вы используете laptop-mode. Иначе, откройте /etc/conf.d/hdparm и добавьте следующие строки для ваших жёстких дисков. Этот пример предполагает, что ваш диск именуется hda:
Листинг 5.5: Использование /etc/conf.d/hdparm для засыпания диска |
hda_args="-q -S12" |
Это включит управление питанием для вашего жесткого диска. Если вы когда-нибудь решите отключить управление питанием, то просто измените значение в /etc/conf.d/hdparm на -q -S0 или выполните hdparm -q -S0 /dev/hda.
Обратитесь к man hdparm за другими опциями. Хотя вы всегда можете запускать hdparm вручную командой /etc/init.d/hdparm start, намного проще автоматизировать её запуск и остановку. Чтобы сделать это, добавить hdparm в уровень запуска battery.
Листинг 5.6: Автоматизация засыпания диска |
#rc-update add hdparm battery |
Внимание: Будьте осторожны с настройками засыпания/остановки (sleep/spin down) вашего жёсткого диска. Установление слишком низких значений может быстро "износить" ваш диск, что приведёт к потере гарантии. (Прим. пер.: вспомните историю про Ubuntu)
Ещё один способ достижения светлой цели снижения энергопотребления состоит в отключении свопа (swap) в режиме питания от батареи. Перед тем, как писать переключатель swapon/swapoff, убедитесь, что у вас достаточно оперативной памяти и своп существенно не используется, иначе вы рискуете приобрести большие проблемы.
Если вы не хотите использовать laptop-mode, то можно уменьшить обращение к диску, монтируя некоторые директории как tmpfs - запись на такие разделы хранится не на диске, а в ОЗУ, и поэтому пропадает после отмонтирования. Зачастую удобно примонтировать /tmp таким образом, так как она в любом случае очищается при каждой перезагрузке. Правда, стоит убедиться, что у вас достаточно памяти и что нет программ (таких, как менеджеры закачек и архиваторы), которым требуется экстремально много места в /tmp. Чтобы сделать это, включите поддержку tmpfs в ядре и добавьте подобную следующей строку в /etc/fstab:
Листинг 5.7: Редактирование /etc/fstab, чтобы сделать /tmp более отрешённым от диска (volatile) |
none /tmp tmpfs size=32m 0 0 |
Предупреждение: Обратите внимание на параметр (32 m), и подстройте его под вашу систему. Если вы не уверены, не пробуйте это вообще - это может сильно уменьшить производительность. Если вы хотите подмонтировать /var/log таким же образом, убедитесь, что файлы сохраняются на диск перед размонтированием. Они необходимы. Не пытайтесь примонтировать /var/tmp таким образом - он используется Portage при сборке пакетов.
Если у вас стоит карточка ATI с поддержкой PowerPlay (динамическое изменение частоты графического процессора), вы можете активировать эту возможность в X.org. Откройте /etc/X11/xorg.conf и добавьте (или включите) опцию DynamicClocks в секции Устройство (device). Учтите, что это может привести к падению на некоторых системах.
Листинг 6.1: Включение поддержки ATI PowerPlay в X.org |
Section "Device" [...] Option "DynamicClocks" "on" EndSection |
Карточка беспроводного соединения потребляет немалую часть энергии. Переведите их в режим сохранения энергии так, как вы сделали это с жёсткими дисками.
Примечание: В скрипте предполагается, что ваш беспроводной интерфейс - wlan0. Если в вашей системе это не так, что просто замените его на своё.
Добавьте следующую строку в /etc/conf.d/net для автоматического включения управления питанием беспроводной карты:
Листинг 6.2: Автоматизированное управления питанием WLAN |
iwconfig_wlan0="power on" |
Обратитесь к man iwconfig за деталями и другими опциями такими, как интервалы между пробуждениями или настройки тайм аута. Если ваш драйвер и точка доступа поддерживает изменение частоты сигналов, то из этого можно извлечь ещё больше сохранённой энергии.
Есть две проблемы с потреблением энергии USB-устройствами. Во-первых, устройства такие, как USB мыши, цифровые камеры или флэшки потребляют энергию всё время, пока подключены, вы не можете избежать этого (кроме как отключая их, когда в них нет необходимости). Во-вторых, когда USD устройство подключено, контроллер USB хоста время от времени опрашивает шину, что не даёт CPU уйти в спящий режим. Ядро предоставляет экспериментальную опцию для включение приостановления (suspend) для USB устройств посредством вызова драйвера или одного из файлов power/state в /sys.
Листинг 6.3: Включение поддержки приостановления (suspend) USB в ядре |
Device Drivers USB support [*] Support for Host-side USB [*] USB suspend/resume (EXPERIMENTAL) |
Примечание переводчика: данный раздел существенно устарел. Более свежую информацию можно найти на gentoo-wiki.com (EN). Также в русской есть короткий пересказ: gentoo-wiki.com.
ACPI определяет несколько состояний спячки. Основные три из них:
S1 aka Standby
S3 aka Suspend to RAM aka Sleep
S4 aka Suspend to Disk aka Hibernate
Они могут вызываться в моменты, когда компьютер не используется, но выключение не желательно из-за долгой загрузки
Поддержка ACPI для этих состояний спячки помечена экспериментальной, и для этого есть достаточно оснований. Возможно, состояния спячки в APM (Advanced Power Management) несколько более стабильны, но использовать APM и ACPI одновременно нельзя.
Листинг 7.1: Конфигурация ядра для включений состояний спички |
Power Management Options ---> [*] Power Management support ACPI (Advanced Configuration and Power Interface) Support ---> [*] ACPI Support [*] Sleep States |
Когда ядро настроено, вы можете воспользоваться скриптом hibernate-script, чтобы активировать suspend или sleep. Для начала его надо установить.
Листинг 7.2: Установка hibernate-script |
# emerge hibernate-script |
Необходимо некоторые настройки в /etc/hibernate. По умолчанию пакет предоставляет несколько конфигурационных файлов для каждого состояния спячки. Общие настройки помещены в common.conf; убедитесь, что этот файл правильно сконфигурирован для вашей системы.
Чтобы настроить sleep, отредактируйте sysfs-ram.conf в /etc/hibernate. Опция UseSysfsPowerState mem уже выставлена правильно, но если вы хотите произвести дальнейшие настройки в этом или любом другом состоянии спячки, то не забудьте добавить их в /etc/hibernate/hibernate.conf. Комментарии и названия опций помогут вам разобраться. Если вы используете nfs или сетевые ресурсы самбы (samba shares over the network), то необходимо завершать соответствующие скрипты инициализации, чтобы избежать тайм аутов (timeouts).
Примечание: Дополнительную информацию о состояниях спячки см. в man hibernate.conf
Готовы? У вас остался последний шанс сделать backup данных прежде, чем запустить следующую команду. Обратите внимание, что вам возможно потребуется нажать специальную клавишу такую, как Fn, чтобы вернутся из спячки.
Листинг 7.3: Засыпание |
# hibernate-ram |
Если вы всё ещё читаете, то, видимо, всё работает. Вы можете таким же образом настроить standby (S1), подредактировав sysfs-ram.conf и изменив UseSysfsPowerState mem на UseSysfsPowerState standby. Режимы S3 и S4 более интересны, поскольку сохраняют больше энергии.
Эта секция посвящена hibernation. В этом режиме снимок (snapshot) работающей системы записывается на диск, перед выключением. При включении, снимок загружается и вы можете продолжать работы с момент выключения.
Предупреждение: Не заменяйте устройства не поддерживающие горячую замены во время остановки. Не пытайтесь загрузить снимок на другой машине. Отключите все сетевые ФС и клиенты/серверы самбы перед засыпанием.
Существуют две различных реализации S4. Оригинальная - swsusp, и более новая tuxonice с более приятным интерфейсом (с поддержкой fbsplash). Сравнение их возможностей вы можете найти на домашней странице tuxonice. There used to be Suspend-to-Disk (pmdisk), a fork of swsusp, but it has been merged back.
TuxOnIce пока не включен в основную ветку ядра (mainline kernel), поэтому вам либо надо пропатчить ядро (патчи можно найти на tuxonice.net), либо использовать sys-kernel/tuxonice-sources.
Настройки ядра и для swsusp и для TuxOnIce следующие:
Листинг 7.4: Настройки ядра для hibernate |
Power Management Options ---> (hibernate with swsusp) [*] Software Suspend (replace /dev/SWAP with your swap partition) (/dev/SWAP) Default resume partition (hibernate with TuxOnIce) Enhanced Hibernation (TuxOnIce) --- Image Storage (you need at least one writer) [*] File Writer [*] Swap Writer --- General Options [*] LZF image compression (replace /dev/SWAP with your swap partition) (swap:/dev/SWAP) Default resume device name [ ] Allow Keep Image Mode |
Настройка swsusp много проще. Если вы не вписали имя своп-раздела в настройках ядра, вы должны передать его как параметр в директиве resume=/dev/SWAP. Если загрузка невозможна из-за сломанного образа, воспользуйтесь параметром noresume. Скрипт инициализации hibernate-cleanup чистит (invalidates) образы swsusp во время загрузки.
Листинг 7.5: Чистка образов swsusp во время загрузки |
# rc-update add hibernate-cleanup boot |
Для активации swsusp, используйте hibernate script, установив UseSysfsPowerState disk в /etc/hibernate/sysfs-disk.
Предупреждение: Сделайте резервную копию данных перед остановкой. Запустите sync, чтобы записать на диск всю кэшированную информацию. Вначале, попробуйте сделать это без иксов, потом в иксах, но не логинясь.
Если вы наталкиваетесь на панику ядра (kernel panic) из-за uhci или подобного, попробуйте скомпилировать поддержку usb модулем и выгрузить модули из памяти перед остановкой. Соответствующая опция есть в common.conf.
Листинг 7.6: Засыпание посредством swsusp |
# nano -w /etc/hibernate/common.conf (Час X - вы сделали резерную копию?) # hibernate |
В следующей секции обсуждается установка TunOnIce, включая поддержку fbsplash для симпатичного графического индикатора прогресса во время засыпания и просыпания.
Первая часть конфигурации похожа на настройку swsusp. Если вы не вписали имя своп-раздела в настройках ядра, вы должны передать его как параметр в директиве resume=swap:/dev/SWAP. Если загрузка невозможна из-за сломанного образа, воспользуйтесь параметром noresume. Скрипт инициализации hibernate-cleanup чистит (invalidates) образы TuxOnIce во время загрузки.
Листинг 7.7: Чистка образов TuxOnIce во время загрузки |
# rc-update add hibernate-cleanup boot |
Теперь, отредактируйте /etc/hibernate/suspend2.conf, включите опцию TuxOnIce. Не включайте fbsplash в common.conf пока.
Листинг 7.8: Засыпание посредством TuxOnIce |
# nano -w /etc/hibernate/suspend2.conf (Час X - вы сделали резерную копию?) # hibernate |
Настройте fbsplash, если вы не сделали этого ранее. Чтобы задействовать поддержку fbsplash во время засыпания, необходимо поставить пакет sys-apps/tuxonice-userui. Также, вам необхожимо утсановить USE-флаг fbsplash.
Листинг 7.9: Установка tuxonice-userui |
# echo "sys-apps/tuxonice-userui fbsplash" >> /etc/portage/package.use (It may be marked ~arch, so first it must be keyworded) # echo "sys-apps/tuxonice-userui" >> /etc/portage/package.keywords # emerge tuxonice-userui |
Ебилд попросит вас создать символическую ссылку на тему, которю вы хотите использовать. Например, чтобы использовать тему livecd-2005.1, выполните следующую команду:
Листинг 7.10: Использование темы livecd-2005.1 во время засыпания |
# ln -sfn /etc/splash/livecd-2005.1 /etc/splash/suspend2 |
Если вы не хотите видеть чёрный экран в первой части процесса пробуждения, добавьте tuxoniceui_fbsplash в ваш образ initrd. Если ваш образ initrd называется splash_geninitramfs и он сохранён в /boot/fbsplash-emergence-1024x768, то вам необходимо сделать буквально следующее:
Листинг 7.11: Добавление tuxoniceui_fbsplash в образ initrd. |
# mount /boot # mkdir ~/initrd.d # cp /boot/fbsplash-emergence-1024x768 ~/initrd.d/ # cd ~/initrd.d # gunzip -c fbsplash-emergence-1024x768 | cpio -idm --quiet -H newc # rm fbsplash-emergence-1024x768 # cp /usr/sbin/tuxoniceui_fbsplash sbin/ # find . | cpio --quiet --dereference -o -H newc | gzip -9 > /boot/fbsplash-tuxonice-emergence-1024x768 |
Далее, отрихтуйте ваш grub.conf (или lilo.conf), чтоб при загрузке вашего ядра грузился обрах /boot/fbsplash-tuxonice-emergence-1024x768. Вы теперь можете попробовать холостой прогон, чтоб убедиться, что всё работает правильно.
Листинг 7.12: Тестовый запус fbsplash hibernation |
# tuxoniceui_fbsplash -t |
Наконец, откройте /etc/hibernate/common.conf и включите поддержку fbsplash. Запустите hibernate и наслаждайтесь!
В: Я пытаюсь изменить частоту ЦПУ, но /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor не существует.
О: Убедитесь, что ваш процессор поддерживает изменение частоты и выберите правильный CPUFreq драйвер для вашего процессора. Список процессоров, поддерживающих изменение частоты (ядро 2.6.7): ARM Integrator, ARM-SA1100, ARM-SA1110, AMD Elan - SC400, SC410, AMD mobile K6-2+, AMD mobile K6-3+, AMD mobile Duron, AMD mobile Athlon, AMD Opteron, AMD Athlon 64, Cyrix Media GXm, Intel mobile PIII и Intel mobile PIII-M на определённых чипсетах, Intel Pentium 4, Intel Xeon, Intel Pentium M (Centrino), National Semiconductors Geode GX, Transmeta Crusoe, VIA Cyrix 3 / C3, UltraSPARC-III, SuperH SH-3, SH-4, некоторые "PowerBook" и "iBook2" и различные процессоры на совместимых с ACPI 2.0 системах (только если "ACPI Processor Performance States" доступно через интерфейс ACPI/BIOS).
В: Мой ноутбук поддерживает изменение частоты, но директория /sys/devices/system/cpu/cpu0/cpufreq/ пуста.
О: Поищите связанные с ACPI ошибки в dmesg | grep ACPI. Попробуйте обновить BIOS, особенно, если обнаружены проблемы в DSDT. Вы также можете попробовать исправить это самостоятельно (что выходит за рамки этого руководства).
В: Мой ноутбук поддерживает изменение частоты, но согласно /proc/cpuinfo частота никогда не изменяется.
О: Возможно, вы включили поддержку симметричной мультипроцессорной обработки (symmetric multiprocessing support) (CONFIG_SMP) в вашем ядре. Попробуйте отключить её, всё должно заработать. Также это может быть багом старых ядер. В таком случае выполните emerge x86info, обновите ваше ядро как требуется и проверьте текущую частоту через x86info -mhz.
В: Я могу изменять частоты, но выбор не так широк, как на другой ОС.
О: Вы можете совместить изменение частоты с "торможением" через ACPI (ACPI throttling), чтобы добиться более низких частот. Но стоит понимать, что это не даст большого прироста в сохранении энергии и создана, по большой части, для температурного регулирования (чтобы ноутбук был холодным и тихим). Вы можете просмотреть текущее состояние "торможения" командой cat /proc/acpi/processor/CPU/throttling и изменить его, выполнив echo -n "0:x" > /proc/acpi/processor/CPU/limit, где x - одно из возможных состояний, перечислены в /proc/acpi/processor/CPU/throttling.
В: При конфигурировании ядра пункты powersave governor, performance governor и userspace governor есть, а ondemand governor отсутствует. В чём проблема?
О: Пункт ondemand governor появился только в последних версиях ядра. Попробуйте обновить его.
В: Время жизни от батареи стало меньше, чем было.
О: Проверьте настройки BIOS. Возможно, вы забыли заново включить какие-то опции.
В: Моя батарея заряжена, но КДЕ сообщает, что осталось 0%, и тут же выключается.
О: Убедитесь, что поддержка батареи выключена в вашем ядре. Если она скомпилирована модулем, то не забудьте загрузить его.
В: Моя система журналирования (system logger) пишет что-то, типа "logger: ACPI group battery / action battery is not defined".
О: Это сообщение генерирует скрипт /etc/acpi/default.sh, которые прилагается к acpid. Вы можете просто игнорировать его. Если же вы всё-таки хотите его унять, закомментируйте соответствующую строку в /etc/acpi/default.sh как показано ниже:
Листинг 8.1: Отключение предупреждения о событиях ACPI |
*) # logger "ACPI action $action is not defined" |
В: У меня Dell Inspiron 51XX, и я не получаю никаких ACPI-событий
О: Скорее всего, это баг ядра. Прочтите это.
В: Я включил DynamicClocks в xorg.conf и теперь X.org рушится / экран остаётся чёрным / мой ноутбук не выключается корректно.
О: Такое бывает на некоторых системах. Вам придётся отключить DynamicClocks.
В: Я хочу использовать TuxOnIce, но он говорит, что моя своп - партиция слишком маленькая. Изменение её размеров - не вариант.
О: Если в вашей системе достаточно свободного места, то вы можете использовать запись в файл, вместо запись в своп. Такой вариант поддерживается hibernate-script. Дополнительную информацию вы можете найти в /usr/src/linux/Documentation/power/tuxonice.txt.
В: Я только купил новую фирмешную батарею, но она кончается за несколько минут. Что я делаю не так?
О: Для начала, следуйте инструкция производителя, как зарядить батарею правильно.
В: Выше написанное не помогло, что делать теперь?
О: Некоторые батареи продаются как "новые", но на самом деле уже не новы. Попробуйте следующее:
Листинг 8.2: Запрос состояния батареи |
$ grep capacity /proc/acpi/battery/BAT0/info design capacity: 47520 mWh last full capacity: 41830 mWh |
Если "last full capacity" кардинально отличается от design capacity, ваше батарея, скорее всего, неисправна. Попробуйте потребовать гарантию.
В: Моя проблема не перечислена выше. Что мне делать теперь?
О: Не бойтесь связаться со мной, Dennis Nienhüser, напрямую. Также вам, наверняка, помогут на Форумах Gentoo. Если вы предпочитается IRC, заходите в канал #gentoo-laptop на irc.freenode.net
Замечания к переводу
Не
удалось найти хороший перевод слову
governor. Хороший означает, что оно не слишком
общо (как, например, драйвер), ну и подходит
по смыслу ;) . Поэтому в тексте используется
слово властелин, формально подходящее
под условия, но слишком уж не формальное.