Настраиваем Linux для максимального продления жизни ноутбука от батареи
Признайтесь, сколько раз вы хотели плюнуть в лицо тому маркетологу, который придумывает эти нереальные цифры в десять-двенадцать часов автономной работы ноутбука? Шесть-семь — это уже ближе к истине, да и то только если ОС правильно настроена. А вот как ее правильно настроить — это уже действительно интересный вопрос. Ведь все далеко не так однозначно, как считают разработчики дистрибутивов. Итак, имеем работающий от аккумулятора ноутбук с Линуксом на борту. Мы используем его наиболее тривиальным образом: слушаем музыку, смотрим киношку, время от времени пописываем статьи в свой блог и серфим в инете. За бортом оставляем редактирование видео и высокопроизводительные игры. Для подобных затей без сети 220 В вряд ли удастся обойтись. Хотим, чтобы время автономной работы было максимальным.
Яркость экрана
Начнем с подсветки. В большинстве ноутбуков горячие клавиши управления яркостью посылают сигнал напрямую контроллеру ACPI, поэтому работают одинаково хорошо в любых операционках и даже в настройках BIOS. Также яркость экрана можно контролировать с помощью xbacklight. После установки достаточно выполнить команду
$ xbacklight -set 50
и уровень яркости составит 50%.
Чтобы не мучиться с ручной регулировкой, можно настроить автоматическую регулировку яркости при подключении зарядника к ноутбуку и при его отключении. Для этого нам понадобится простенький скрипт:
#!/bin/sh echo $1 > /sys/class/backlight/intel_backlight/brightness
Сохрани его в файл /etc/backlight.sh и дай права на исполнение:
$ chmod +x /etc/backlight.sh
Также необходимо написать правило для системы управления оборудованием udev, которое будет запускать наш скрипт. Создай файл /etc/udev/rules.d/backlight.rules:
SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="1", RUN+="/etc/backlight.sh 3253" SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="0", RUN+="/etc/backlight.sh 2324"
Далее перезагрузи правила udev:
$ sudo udevadm control -R
Теперь при подключении к заряднику яркость будет выставляться в значение 3253 (это 70% от максимальной 4648), а при отключении снижаться до 50% (2324). Обрати внимание, что скрипт работает только с драйвером Intel, для других адаптеров путь в каталоге /sys и значения будут другими.
Скрипт хорош также и тем, что решает знакомую многим линуксоидам проблему сброса яркости до максимальной при подключении/отключении кабеля питания.
Видеокарта
Считается, что не менее 80% информации человек получает через зрение. Неудивительно, что немалая доля энергии батареи ноутбука тратится на генерирование изображения на экране.
Использование легких рабочих окружений, потребляющих минимум ресурсов ноутбука, положительно сказывается на экономии заряда батареи. В принципе, можно работать и из командной строки, но в XXI веке таких любителей найдется немного.
Поэтому иногда достаточно будет отключить графические эффекты рабочего стола, а высвободившиеся ресурсы использовать в приложениях, поддерживающих аппаратное ускорение декодирования видео, чтобы разгрузить процессор. Заодно не лишним будет избавиться от различных фоновых процессов типа индексации файлов.
Аппаратное ускорение позволяет перенести выполнение задачи по декодированию видео с процессора на видеокарту. VLC, MPV, MPlayer и основанные на них видеопроигрыватели, а также браузеры Chromium, Firefox, Opera умеют это делать, тем самым снижая энергопотребление.
Настройка аппаратного ускорения в проигрывателе VLC Проверить, включено ли аппаратное ускорение в Chrome, можно, введя в адресную строку chrome://gpu. В моем случае результат выглядел так:
Статус поддержки аппаратного ускорения после инсталляции Chrome Как видим, задействованы не все компоненты аппаратного ускорения. Ниже на этой же странице приведен список обнаруженных проблем. Для их решения необходимо перейти по адресу chrome://flags и изменить следующие настройки:
Включить переопределение списка программного рендеринга. Включить аппаратную растеризацию. Установить число потоков растрового изображения в значение 4. Эти настройки относятся к категории экспериментальных и по умолчанию выключены разработчиками, поскольку те не могут оценить качество целевых GPU-драйверов при большом разнообразии дистрибутивов Linux.
Затем следует запустить Chrome с флагом —enable-native-gpu-memory-buffers. Пользователи KDE могут дописать этот флаг в команду запуска Chrome, отредактировав ярлык приложения с помощью kmenuedit.
Статус поддержки аппаратного ускорения после настройки Chrome
Гибридная графика
Счастливые обладатели гибридной графики сталкиваются еще с одной проблемой экономии энергии. Гибридная графика подразумевает наличие в ноутбуке двух видеокарт — интегрированной и дискретной. Последняя — полноценный видеоадаптер, поэтому весьма прожорлива. Решение проблемы очевидно. Работая от батареи, целесообразно выключить дискретную карту и полностью положиться на интегрированное решение.
Прежде чем отключать дискретную графику, необходимо установить пакет acpi_call и загрузить соответствующий модуль ядра:
# modprobe acpi_call
После загрузки модуля следует запустить от имени администратора сценарий следующего содержания (в Arch Linux он уже присутствует в /usr/share/acpi_call/examples/turn_off_gpu.sh):
#!/bin/bash if lsmod | grep -q acpi_call; then methods=" _SB.PCI0.P0P1.VGA._OFF _SB.PCI0.P0P2.VGA._OFF _SB_.PCI0.OVGA.ATPX _SB_.PCI0.OVGA.XTPX _SB.PCI0.P0P3.PEGP._OFF _SB.PCI0.P0P2.PEGP._OFF _SB.PCI0.P0P1.PEGP._OFF _SB.PCI0.MXR0.MXM0._OFF _SB.PCI0.PEG1.GFX0._OFF _SB.PCI0.PEG0.GFX0.DOFF _SB.PCI0.PEG1.GFX0.DOFF _SB.PCI0.PEG0.PEGP._OFF _SB.PCI0.XVR0.Z01I.DGOF _SB.PCI0.PEGR.GFX0._OFF _SB.PCI0.PEG.VID._OFF _SB.PCI0.PEG0.VID._OFF _SB.PCI0.P0P2.DGPU._OFF _SB.PCI0.P0P4.DGPU.DOFF _SB.PCI0.IXVE.IGPU.DGOF _SB.PCI0.RP00.VGA._PS3 _SB.PCI0.RP00.VGA.P3MO _SB.PCI0.GFX0.DSM._T_0 _SB.PCI0.LPC.EC.PUBS._OFF _SB.PCI0.P0P2.NVID._OFF _SB.PCI0.P0P2.VGA.PX02 _SB_.PCI0.PEGP.DGFX._OFF _SB_.PCI0.VGA.PX02 _SB.PCI0.PEG0.PEGP.SGOF _SB.PCI0.AGP.VGA.PX02 " for m in $methods; do echo -n "Trying $m: " echo $m > /proc/acpi/call result=$(cat /proc/acpi/call) case "$result" in Error*) echo "failed" ;; *) echo "works!" # break # try out outher methods too ;; esac done else echo "The acpi_call module is not loaded, try running 'modprobe acpi_call' or 'insmod acpi_call.ko' as root" exit 1 fi
В результате должно появиться нечто подобное:
... Trying _SB.PCI0.PEG1.GFX0._OFF: failed Trying _SB.PCI0.PEG0.GFX0.DOFF: failed Trying _SB.PCI0.PEG1.GFX0.DOFF: failed Trying _SB.PCI0.PEG0.PEGP._OFF: works! ...
Строка, помеченная «works!», знаменует собой успешное обнаружение дискретной видеокарты и ее отключение до следующей перезагрузки.
Процессор
Разгрузка процессора с помощью некоторых шагов, предпринятых в предыдущем разделе, открывает возможность снизить энергопотребление CPU. Здесь нам на помощь придет консольная утилита cpupower. Вернее, целый набор консольных утилит под одним именем.
Возможности инструмента позволяют оперировать частотой процессора, настраивать режимы его работы, руководствуясь требованиями ситуации, а также проводить диагностику текущего состояния.
Когда речь заходит об энергосбережении, на первый план выдвигается способность cpupower изменять тактовую частоту процессора на лету с помощью frequency-set.
## Задает максимальный предел тактовой частоты $ sudo cpupower -c all frequency-set -u ТЧ ## Задает минимальный предел тактовой частоты $ sudo cpupower -c all frequency-set -d ТЧ ## Задает конкретное значение тактовой частоты $ sudo cpupower -c all frequency-set -f ТЧ
где ТЧ — значение тактовой частоты, выраженной в гигагерцах или мегагерцах. Cpupower также дает возможность выбрать одну из схем управления тактовой частотой процессора — governor:
- performance — устанавливает максимальную частоту процессора;
- userspace — устанавливает частоту процессора, заданную пользователем;
- ondemand — регулирует частоту процессора в зависимости от текущих задач, может увеличить ее до максимума и в случае простоя снизит до минимума;
- powersave — устанавливает минимальную частоту процессора (но на процессорах Intel начиная с Sandy Bridge работает как более эффективный вариант ondemand);
- conservative — регулирует частоту процессора в зависимости от текущих задач более плавно, чем ondemand;
- schedutil — регулирует частоту процессора на основании данных планировщика процессов ядра.
Объединив возможности cpupower, udev и systemd, можно изменять тактовую частоту в зависимости от наступления определенных событий. Например, при отключении ноутбука от сети. Обработку событий доверим udev, создав правило /etc/udev/rules.d/powersave.rules:
SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="1", RUN+="ondemand.service" SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="0", RUN+="powersave.service"
Также создадим две службы systemd, которые будут запущены как результат работы правила. Создадим файл /etc/systemd/system/ondemand.service и запишем в него:
[Unit] Description=CPU ondemand [Service] Type=oneshot ExecStart=/usr/bin/cpupower -c all frequency-set -g ondemand [Install] WantedBy=multi-user.target
Второй файл назовем /etc/systemd/system/powersave.service:
[Unit] Description=CPU powersave [Service] Type=oneshot ExecStart=/usr/bin/cpupower -c all frequency-set -g powersave [Install] WantedBy=multi-user.target
Заставим udev перечитать правила:
$ sudo udevadm control -R
Здесь мы просто меняем планировщик, но, учитывая особенности Intel, для пущего энергосбережения лучше залочить процессор на минимально возможной частоте, заменив команду /usr/bin/cpupower -c all frequency-set -g powersave
на /usr/bin/cpupower -c all frequency-set -u ТЧ
.
Минимальную частоту процессора можно узнать, выполнив следующую команду во время простоя машины:
$ cat /proc/cpuinfo
Жесткий диск
Наиболее распространенный и одновременно спорный ответ на вопрос об энергосбережении в части жестких дисков — использовать для этих целей одну из опций консольной программы hdparm. С ее помощью можно настроить значение показателя APM, отвечающего за период простоя работы компьютера, по истечении которого жесткий диск отключается.
Несмотря на то что подобное решение приводит к некоторой экономии заряда аккумулятора, экстремально низкие значения APM могут сильно сократить ресурс самого жесткого диска из-за частых остановок его работы и последующего форсированного запуска.
Проверить текущее значение APM диска sda можно так:
$ sudo hdparm -B /dev/sda
Во время питания ноутбука от сети значение APM равно 254. При работе от батареи можно установить его на уровне 128, а при одном-двух запущенных приложениях — 96. Запуска веб-браузера в этом случае стоит избегать.
$ sudo hdparm -B 96 -S 0 /dev/sda
При частой работе за ноутбуком от аккумулятора, вероятно, лучшим решением будет использование твердотельного накопителя — SSD: он очевидно превосходит HDD в экономии энергии. Возможно также комбинировать два варианта, когда на SDD установлена сама операционная система, а HDD используется для хранения данных.
Если оперативной памяти достаточно (по нынешним временам — от 8 Гбайт), можно отключить swap-раздел, чтобы лишний раз не тревожить жесткий диск и не тратить на это энергию:
$ sudo swapoff -a $ sudo systemctl disable swap.target
Аудио
Прослушивание музыки на максимальной громкости через встроенные динамики расходует больше электроэнергии, чем через наушники. Если ты не планируешь слушать музыку, звуковую карту можно переключить в режим ожидания. Для одноразового переключения широко распространенной Intel HDA нужно от имени администратора ввести команду
$ sudo -s # echo 1 > /sys/module/snd_hda_intel/parameters/power_save
Чтобы задать режим энергосбережения на постоянной основе, необходимо в конфигурационном файле /etc/modprobe.d/audio_powersave.conf установить следующее значение:
options snd_hda_intel power_save=1
В этом случае карта будет уходить в режим ожидания через секунду с момента простоя.
USB
В моем ноутбуке звуковая карта сломалась, поэтому я подключаю внешнюю через USB, так что к сбережению энергии за счет звука я подхожу проще — вынимаю карту из разъема.
Этот трюк справедлив и для других USB-устройств: внешних дисков, 3G-модемов, Bluetooth- и Wi-Fi-адаптеров и беспроводных мышей. Все, что не требуется в данный момент, извлекаем и кладем в карман.
Можно воспользоваться встроенной способностью ядра Линукс отправлять в сон простаивающие USB-устройства с помощью правила udev. Правда, некоторые из таких устройств несовместимы с этой функцией, их в правиле можно обойти стороной, указав idVendor и idProduct.
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", ATTR{idProduct}=="9205", GOTO="power_usb_rules_end" ACTION=="add", SUBSYSTEM=="usb", TEST=="power/control", ATTR{power/control}="auto" LABEL="power_usb_rules_end"
Сохраняем правило в /etc/udev/rules.d/usb_power_save.rules.
Значения idVendor и idProduct можно узнать с помощью команды lsusb (строки вида ID 09da:054f).
Встроенное сетевое оборудование
Не помню уже, когда в последний раз пользовался «синим зубом», поэтому он у меня выключен раз и навсегда. Если в твой ноутбук встроен Bluetooth, наверняка присутствует и горячая клавиша, управляющая его включением. Если ее нет, воспользуйся командой rfkill:
$ sudo rfkill block bluetooth
Можно отключить Bluetooth, используя черный список модулей ядра. Просто создай текстовый файл /etc/modprobe.d/no-bluetooth.conf и внеси в него две строки:
blacklist btusb blacklist bluetooth
Такой же черный список можно создать и для Wi-Fi- и 3G-модуля и даже для встроенной веб-камеры (uvcvideo), если они не используются.
Параметры ядра
Ядро Линукс отлично подается дрессировке. Грех не воспользоваться этой способностью ради снижения потребления энергии. Следующие манипуляции выполняются в /etc/sysctl.d/99-sysctl.conf и требуют права администратора.
Первым делом отключаем систему отслеживания немаскируемых прерываний (NMI watchdog). Она призвана помочь ядру определить, какие из неисправностей оборудования вызывают панику ядра. Иногда это приводит к неоправданно высокому потреблению энергии. К тому же обычному пользователю эта функция не сильно-то и нужна.
Чтобы отключить NMI watchdog, нужно в конфигурационный файл добавить строку
kernel.nmi_watchdog = 0
Следующим шагом будет увеличение времени отложенной записи в виртуальную память. Это поможет объединить несколько операций ввода-вывода в одну, тем самым снижая количество сохраненных записей на диске и увеличивая энергосбережение. Чтобы установить значение в 60 с, добавим строку
vm.dirty_writeback_centisecs = 6000
Увеличить интервал записи файлов на диск можно, также включив лаптоп-режим:
vm.laptop_mode = 5
Таким образом, запись на диск будет откладываться на максимально возможное время. Эта настройка в основном относится к традиционным жестким дискам.
Не забывай про пылесос
Даже не обладая специфическими знаниями, можно значительно увеличить время работы компьютера, если поддерживать радиаторы охлаждения лаптопа в надлежащем состоянии. Регулярно очищая их от пыли, можно существенно сберечь заряд батареи. Хлопья грязи на радиаторе, препятствуя естественному отводу тепла, вынуждают систему держать вентилятор охлаждения во включенном состоянии продолжительное время, расходуя ресурсы батареи.
Для чистки можно воспользоваться пылесосом. Главное — не переусердствовать. Бывали случаи, когда слишком сильное всасывание срывало крыльчатку вентилятора с вала двигателя.
TLP
Компьютерной индустрии свойственно одно хорошее качество. Как только определенный порядок действий приобретает рутинный характер, тут же появляется средство, с помощью которого тех же результатов можно добиться проще и быстрее.
Утилита командной строки TLP — одно из таких средств. В чистке радиатора она, конечно, не помощник, но описанные выше настройки процессора, жесткого диска, аудио-, сетевых адаптеров и ядра умеет применять без каких-либо танцев с бубном. Пакеты для установки доступны в Arch, Debian, Fedora, Gentoo и Ubuntu.
По сути, TLP — это надстройка, собирающая под своим крылом разрозненные инструменты, призванные снизить энергопотребление компьютера. При этом пользователю не требуется разбираться во всех технических хитросплетениях управления питанием компьютера, достаточно установить TLP, и она будет самостоятельно применять настройки энергосбережения при выдергивании кабеля питания.
Тем не менее при желании эти настройки можно менять по своему вкусу и в зависимости от текущих потребностей, внося правки в конфигурационный файл /etc/default/tlp.
Вот пример отключения NMI watchdog:
NMI_WATCHDOG=0
А это значение APM для hdparm:
DISK_APM_LEVEL_ON_BAT="128 128"
Включение режима энергосбережения звуковой карты:
SOUND_POWER_SAVE_ON_BAT=1
Так Bluetooth останется не активирован после загрузки системы:
DEVICES_TO_DISABLE_ON_STARTUP="bluetooth"
Все предельно просто и понятно.
Возможность управления яркостью подсветки экрана умышленно исключена разработчиками из TLP из-за возможных конфликтов с другими программами управления яркостью (например, GNOME Power Manager).
Помимо управления энергопотреблением оборудования ноутбука, TLP может похвастать еще и наличием мощного средства диагностики оборудования и настроек tlp-stat. Вводом одноименной команды с определенным ключом можно получить информацию о батарее, состоянии дисков, процессора, видеокарты, портов USB, устройств PCI, сетевого оборудования, общую информацию о системе и настройках в развернутом и сокращенном виде, а также информацию о неполадках.
Фрагмент вывода команды tlp-stat Некоторые возможности программы доступны не на всех ноутбуках. Среди таких настройка триггера зарядки для батарей ThinkPad. В стандартном режиме работы зарядка аккумулятора начинается при снижении уровня его заряда до 96% и завершается при достижении 100%. Подобные настройки целесообразно применять, чтобы обеспечить максимально продолжительное время функционирования батареи. Однако в результате такого режима зарядки батарея изнашивается намного быстрее.
Чтобы избежать преждевременного износа аккумулятора, можно настроить бережный режим. Например, сделать так, чтобы аккумулятор начинал заряжаться только при падении уровня заряда до 60%, а в качестве предельного уровня заряда указать 80%.
START_CHARGE_THRESH_BAT0=60 STOP_CHARGE_THRESH_BAT0=80
При необходимости полностью зарядить аккумулятор можно однократно, не меняя общих настроек:
$ sudo tlp fullcharge
PowerTop
PowerTop — еще один инструмент, призванный умерить аппетиты ноутбука. Разработкой программы занимается Intel, а это что-нибудь да значит.
В первую очередь это мощная утилита диагностики состояния системы. PowerTop умеет работать в нескольких режимах, основной — псевдографический интерфейс с несколькими вкладками. Вкладка для тех, кому результат нужен здесь и сейчас, называется Tunables. В ней содержится список компонентов системы с показателем оптимальности их настроек. Состояний два: GOOD и BAD. BAD можно изменить на GOOD нажатием клавиши Enter.
Вкладка Tunables PowerTop в момент изменения настроек компонента системы Надо заметить, что после перезагрузки все изменения будут сброшены. Их можно зафиксировать, создав службу systemd /etc/systemd/system/powertop.service:
[Unit] Description=Powertop [Service] ExecStart=/usr/bin/powertop --auto-tune RemainAfterExit=true [Install] WantedBy=multi-user.target
Далее службу необходимо включить:
$ sudo systemctl enable powertop
Режимы HTML и CSV позволяют сохранять данные анализа системы. С их помощью удобно анализировать результаты самостоятельно и делиться результатами диагностики с другими, чтобы спросить совета по поводу настроек.
Отчет PowerTop о состоянии системы в HTML-формате В режиме калибровки утилита производит замеры потребляемой мощности в зависимости от вариантов режимов совместной работы USB и беспроводных устройств, подсветки, жестких дисков и процессора в разной комбинации. Предполагается, что с ее помощью можно установить наиболее щадящий для батареи режим подсветки экрана в условиях текущих настроек остального оборудования. Кроме того, изучив фактические возможности системы, утилита точнее сможет вести измерения.
Замеры мощности производятся при каждой загрузке программы, но вывод данных анализа возможен только после проведения минимального их количества — 261 раз. Разумеется, делать их нужно, когда ноутбук работает от батареи.
Выводы
Данная статья не претендует на истину в последней инстанции. Вариантов настроек энергосбережения множество. Все зависит от задач, которые планируется выполнить, состояния аппаратного обеспечения компьютера и личных предпочтений.
Выбор окончательного варианта всегда остается за пользователем. Тем не менее, следуя указанным рекомендациям, можно значительно увеличить время автономной работы своего ноутбука c Linux.