Когда речь заходит о сохранении энергии на мобильных устройствах, компромисса
быть не может. Продление жизни ноутбука на 20 минут зачастую значит гораздо
больше, чем отзывчивость системы или скорость доступа к жесткому диску. В ход
идут даже самые хардкорные методы сбережения драгоценных Ватт.
Диски
Начнем с одного из самых требовательных к энергии компонентов - жесткого
диска. Являясь чуть ли не единственным на борту (за исключением кулеров)
жизненно важным механическим устройством, он может серьезно сократить срок
службы батареи любого ноутбука. И проблема тут даже не в том, что современный
Linux часто «общается» с файловой системой, – просто шпиндель винчестера
вращается слишком долго между уходами в сон и поэтому успевает отхватить
солидный кусок батарейки. Исправить ситуацию можно с помощью небезызвестной
утилиты hdparm:
# hdparm -B 1 -S 12 /dev/sda
Здесь с помощью опции «-B 1» мы включили самый «агрессивный» уровень
сбережения энергии. Существует всего 254 подобных уровней: с 1 по 127
останавливают в случае необходимости шпиндель винчестера, а более высокие уровни
этого не делают. Все современные ноутбучные жесткие диски поддерживают
энергосбережение, но для уверенности лучше запустить команду «hdparm -i /dev/sda»
и в выводе найти поле AdvancedPM. Опция «-S 12» говорит о том, что шпиндель
должен останавливаться через 60 секунд бездействия жесткого диска. Всего
существует 255 значений данной опции: значения с 1 до 240 просто умножаются на 5
секунд, а 0 вовсе отключает остановку шпинделя.
После проведенных манипуляций, по логике вещей, хорошо бы сделать так, чтобы
количество обращений к жесткому диску сократилось до минимума. Тогда большую
часть времени винчестер будет проводить во сне, сохраняя драгоценные Ватты.
Первое, что необходимо сделать: включить так называемый «режим ноутбука» для
подсистемы виртуальной памяти:
# echo 5 > /proc/sys/vm/laptop_mode
# echo 'vm.laptop_mode=5' >> /etc/sysctl.conf
Работая в таком режиме, ядро будет по возможности откладывать запись на диск,
пока в этом не появится неотложная необходимость. Все буферы, требующие сброса
себя на диск, будут терпеливо ожидать своей очереди.
Увеличить перерыв между записями на диск можно также с помощью поднятия
таймаута между сбросом «грязных» буферов (части файлов, измененные программой
или пользователем, но еще не записанные на диск) с 5 секунд до 15 – или даже 30:
# echo 1500 > /proc/sys/vm/dirty_writeback_centisecs
# echo 'vm.dirty_writeback_centisecs=1500'
Помехой произведенным оптимизациям станет syslogd. Он требует обязательной
синхронизации файловой системы после каждой записи в журнал (тот самый сброс
«грязных» буферов на диск и очистка буфера самого жесткого диска). К счастью,
такое поведение журнального демона легко отключить путем добавления знака
«минус» в начало каждого пути к журналу в файле /etc/syslog.conf.
Также попробуем отключить опцию atime для файловой системы. Эта опция по
умолчанию активирована в любой ФС и нужна для записи времени последнего
обращения к файлу (так требует стандарт POSIX). Проблема в том, что подобная
запись нуждается в дополнительном обращении к суперблоку файловой системы. Это
влечет за собой не только энергозатраты, но и лишнюю нагрузку на ФС. Отключается
atime указанием опции noatime во время монтирования ФС:
# mount -o remount,noatime /
# echo '/dev/раздел точка_монтирования ext3 noatime 0 1' >> /etc/fstab
К сожалению, включение опции noatime приведет к тому, что почтовые клиенты и
программы нотификации о новой почте перестанут правильно работать. Поэтому, если
корректное поведение подобных приложений жизненно важно, можно прибегнуть к
компромиссному решению - опции relatime. После ее включения ядро будет обновлять
время последнего обращения к файлу только в том случае, если предыдущее время
доступа было раньше, чем текущее время изменения файла. Как вариант, для почты
можно сделать отдельный раздел, скажем, /var/mail, и монтировать его со
стандартными опциями.
Учти, что приведенные выше приемы не пройдут даром. Снижение времени
бодрствования жесткого диска может вылиться в преждевременный выход его из строя
(все помнят поучительную историю о дохнущих за полгода винчестерах ноутбуков,
работающих под управлением Ubuntu?). Включение «режима ноутбука» и увеличение
времени отложенной записи буферов приведет к большей вероятности потери данных в
момент аварийного отключения питания (правда, страшно это только для настольных
компов без UPS). Включение опции noatime повлечет за собой некорректную работу
почтовых программ и некоторого процента других приложений. Отмена обязательной
синхронизации в syslogd обернется потерей последних журнальных записей в момент
отключения питания.
Графика
Не секрет, что самой жадной до энергии частью ноутбука является лампа,
подсвечивающая LCD-экран с обратной стороны. Беда в том, что ей-то как раз
жертвовать и не хочется. Даже наоборот, – пытаясь прочесть что-то с экрана в
солнечный летний день, чувствуешь искреннее и непреодолимое желание обматерить
человека, посоветовавшего тебе ноутбук с такой убогой подсветкой экрана.
Впрочем, к вечеру подобные чувства обычно угасают, а ночью так и вообще сходят
на нет.
На подсветке можно экономить, но делать это надо с умом. Начиная с версии
X.Org 7.3, в стандартный комплект утилит сервера входит программка xbacklight,
которая позволяет рулить лампой легко и без лишних телодвижений. Сидя за
ноутбуком в недостаточно освещенном помещении, можно ввести следующую команду
(70% яркости) и вполне комфортно работать:
# xbacklight -set 70
Вечером или ночью хватит и 50% от общей мощности. При этом в планировщик cron
можно добавить особые задания, которые будут включать 100% подсветки утром и
днем, 75% - вечером, и 50% - ночью.
Второй важный момент тюнинга графической составляющей – отключение лишних
интерфейсов видеокарты (таких, как ТВ-выходы и выходы на внешний монитор). В
неактивном состоянии на них также подается энергия и направляется поток
видеоданных. По всем законам, встроенная видеокарта должна автоматически
определять, подключен ли к дополнительным выходам потребитель, но механизм не
всегда срабатывает. Порой интерфейс остается активным. Наша задача с помощью
команды xrandr узнать об активных в данный момент выходах и отключить все, кроме
LCD панели (LVDS):
# xrandr --output ВЫХОД --off
Ну и напоследок, рекомендую отключить все графические эффекты рабочего стола
и хранители экрана, чтобы они не съедали ресурсы проца и 3D-ускорителя.
Процессор
Современные многоядерные процессоры также очень требовательны к энергии.
Поэтому в ядре Linux предусмотрено несколько механизмов, позволяющих
минимизировать связанные с ними энергозатраты. Наиболее эффективный из них -
перевод процессора в энергосберегающий режим (P-state), который уже давно
поддерживается ядром и отлично работает. Чтобы проверить, включен ли этот
механизм в нашем ядре и поддерживается ли он процессором, выполним следующую
команду:
# ls /sys/devices/system/cpu/cpu0/cpufreq
Если каталог существует, значит, все в порядке. Теперь можно проверить
доступные регуляторы и переключить процессор в режим автоматического снижения
частоты и вольтажа при низких нагрузках:
# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
# echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
Кроме того, рекомендую включить так называемый «режим сохранения энергии для
многоядерных процессоров»:
# echo 1 > /sys/devices/system/cpu/sched_mc_power_savings
Работая в нем, ядро сначала попытается по полной загрузить одно из ядер
процессора и только после этого начнет перекладывать задачи на другие. В
ситуациях, когда нагрузка на процессор невысока, такой режим поможет сохранить
заметную часть энергоресурсов.
Коммуникации
Следующий шаг - тюнинг сетевых компонентов ноутбука. Честно скажу, в этом
деле особой экономии мы не добьемся, но все-таки сможем сохранить лишние 2-3
Ватта энергии и потешить свое самолюбие.
Первое, что следует сделать - отключить опцию Wake On Lan сетевой карты.
Механизм нужен для автоматического включения компа после получения определенного
пакета на интерфейс сетевой карты. Штука эта бывает быть очень полезной для
стационарного домашнего сервера, который можно засунуть в чулан и
включать/выключать без использования стремянки, но на лаптопе толку от нее мало.
Кроме того, будучи включенным, этот механизм заставит сетевую карту бодрствовать
всегда, и драгоценные Ватты энергии помаленьку вытекут из ноутбука.
Wake on Lan легко отключается через настройки BIOS или же с помощью утилиты
ethtool:
# ethtool -s eth0 wol d
Набрав команду «ethtool eth0», в поле Wake-on узнаем о текущем состоянии
данной опции (g - включена, d - отключена).
Если ты часто подключаешь ноутбук к высокоскоростным локальным сетям,
работающим на скорости 1 Гбит/с (немного странно звучит, но встречается), то
скорость передачи сетевой карты лучше снизить до 100 Мбит/с (или даже до 10
Мбит/с). Дело в том, что чем выше эта скорость, тем больше аналоговый
преобразователь сетевой карты будет тратить энергии на передачу данных. Поэтому
снова запускаем ethtool:
# ethtool -s eth0 autoneg off speed 100
Опция «autoneg off» отключает автоматическое определение скорости передачи, а
«speed 100» - ограничивает ее до 100 Мбит/с. Вернуть все в прежнее состояние
можно с помощью следующей команды (если, конечно, твоя сетевуха по дефолту
работает в гигабитном режиме):
# ethtool -s eth0 autoneg on speed 1000
Мало кто из владельцев ноутбуков знает, что современные WiFi-адаптеры и точки
доступа поддерживают специальный протокол PS-Poll (Power Save Poll protocol),
способный сократить, как минимум, вдвое энергозатраты на передачу данных, – и
что по умолчанию поддержка этого протокола отключена. Протокол PS-Poll основан
на очень простой схеме временного отключения питания адаптера между передачами
данных. Некоторое время адаптер работает в полную силу, затем посылает
специальное сообщение точке доступа и обесточивается. Получив сообщение, точка
доступа приостанавливает все передачи этому узлу до момента, пока не получит
сообщение о возобновлении работы. Перерывы между включениями и отключениями
питания очень коротки, поэтому если ты не любитель онлайн-игр «по воздуху»,
можешь смело включать протокол, заплатив цену в виде небольших задержек:
# iwpriv eth1 set_power 5
Число здесь говорит о том, какой из уровней энергосбережения следует
активировать. Всего существует шесть уровней: 1 - самый низкий уровень
энергосбережения, дающий наиболее низкие задержки, 5 - самый высокий, 6 -
отключение энергосбережения. Пятый уровень не всегда будет оптимальным, поэтому
советую поэкспериментировать, если задержки станут слишком большими.
Если ты совсем не пользуешься услугами WiFi-адаптера, то самое время
отключить его и сэкономить чуточку энергии для других нужд. Многие ноутбуки
оснащены специальным выключателем на передней панели, но если ты «счастливый»
обладатель модели без такового, то отключить все WiFi-адаптеры можно так:
# for i in `find /sys -name "rf_kill"`; do echo 1 > $i; done
Первоначальное состояние возвращается с помощью обратной команды:
# for i in `find /sys -name "rf_kill"`; do echo 0 > $i; done
Кроме WiFi, современные ноутбуки также снабжены другим радио-интерфейсом -
bluetooth, который, находясь в неактивном состоянии, тоже помаленьку высасывает
из аккумулятора соки. Поэтому, если ты не любитель постоянно блуждать в
интернете через сотовый телефон, то рекомендую отключить и его:
# hciconfig hci0 down
# rmmod hci_usb
Да, – лаптопные bluetooth-адаптеры обычно соединены с остальным хозяйством
через внутренний USB-интерфейс.
Привод
Может и покажется странным, но стандартная функция автоопределения наличия
диска в DVD-приводе тоже может откушать добрую часть энергии. Дело в том, что
все графические окружения пользователя, будь то Gnome, KDE, XFCE или еще что-то,
полагаются в этом деле на специальный демон hald, который занимается оповещением
других программ о произошедших изменениях в железе компа. Загвоздка в том, что
наличие диска hald проверяет абсолютно нерациональным способом - с помощью
опроса привода каждые 2 секунды. Поэтому если тебя не напрягает вводить команду
монтирования CD вручную, то лучше отключить эту фичу:
# hal-disable-polling --device /dev/cdrom
Звук
Аудио. Все хотят слушать музыку и смотреть фильмы на ноуте, но и за это
приходится платить энергией. Конечно, в то время, когда устройство активно, то
есть проигрывает что-либо, затраты энергии можно снизить разве что уменьшением
уровня громкости, а вот для неактивного состояния есть небольшой рецепт.
Подавляющее большинство уже устаревших ноутбуков и материнских плат оснащено
аудиочипом AC97, который поддерживает энергосберегающий режим в неактивном
состоянии. Linux-драйвер чипа умеет включать такой режим, но не делает этого по
умолчанию из-за проблем с треском во время переходов из одного состояния в
другое. Благо, перевести чип в энергосберегающий режим нетрудно, достаточно
вбить команду:
# echo 1 > /sys/module/snd_ac97_codec/parameters/power_save
В современные ноутбуки обычно встраивают чип с технологией Intel HD Audio,
поддерживающей воспроизведение большего количества каналов с высоким качеством.
Он также не прочь сохранить пару Ватт энергии и делает это по умолчанию,
благодаря качественному ALSA-драйверу. Можешь в этом убедиться, набрав:
# cat /sys/module/snd_hda_intel/parameters/power_save
И последнее. Обзаведись утилитой
powertop!
С ее помощью ты не только узнаешь, как и в каких ситуациях твой процессор
переключается между энергосберегающими режимами, но и сможешь выявить самые
прожорливые в плане энергии программы.