Энергосбережение Ubuntu на ноутбуке

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

О том, как заставит ноутбук работать под линуксами как можно дольше, написано немало, в том числе и на хабре. В какой-то степени я еще раз соберу все советы воедино, от очевидных до обскурных, заодно опишу несколько проблем и решений, которые у меня оказались достаточно «индивидуальными».

Устанавливал я Ubuntu 10.10 на ноутбук Acer Aspire Timeline 5810TG. Эта машина обладает экраном в почти 16 дюймов и относительно производительным железом, зато батарея достаточно емкая, чтобы ставить с ней личные рекорды.

Содержание поста

  1. Отключаем дискретную видеокарту
  2. Полезные команды для энергосбережения
  3. Проблемы ноутбука (связанные с энергосбережением) и их решения
  4. Автоматизация
  5. Дополнительные советы

Отключаем дискретную видеокарту

В моем ноутбуке имеется возможность переключаться между встроенным графическим чипом от Intel, маломощным и малотребовательным к электроэнергии, и сравнительно сильной и энергоемкой карте ATI Radeon HD4330. Многие обладатели ноутбуков с переключаемой графикой испытывают проблемы в работе с Linux-системами. Поиск по «ubuntu switchable graphics» на убунтуформус выдает больше 50 страниц тем.
Мне производительная графическая карта нужна редко, поэтому я задался целью отключить ее по умолчанию с возможностью быстрого и безболезненного включения.
Очень много читал те самые 50 страниц форумных тем. А надо было всего лишь заглянуть в убунту-вики или даже попробовать воспользоваться хабрапоиском.

В версиях ядра, начиная с 2.6.34, присутствует механизм vga_switcheroo, позволяющий переключаться между видеокартами. То есть в Ubuntu 10.10 он есть по умолчанию. О том, как им пользоваться, хорошо было написано здесь (см. второй способ) почти год назад, я по-быстрому напомню, что к чему.

Вначале выполним:

Зная, какой GPU как обозначается, посмотрим, какой из них в каком состоянии:

Плюсик стоит на против видеочипа, который используется в данный момент, Pwr означает, что видеокарта включена и потребляет энергию.
Важно: у всех моих немногих знакомых, обладающих ноутбуками с двумя видеокартами, картина одинаковая: что бы вы не делали, при загрузке системы обе карты работают, при этом для вывода используется встроенная «слабая» графика. Это нам на руку, ибо обесточивание неактивной видеокарт происходит бескровно.

Команда

отключает неиспользуемую GPU сразу же. Поэтому мы обратимся к файлу /etc/rc.local, добавив в него вышеуказанную команду (перед строчкой exit 0). Так, при загрузке систему дискретная видеокарта уже будет отключена и мне не нужно будет беспокоиться ни о чем.

Важно: насколько я могу судить, vga_switcheroo не работает, если установлены проприетарные драйверы на дискретную видеокарту.

Кстати, если вы хотите переключаться между видеокартами через графический интерфейс, установите Ubuntu Control Center. Программа представляет собой панель управления параметрами Ubuntu, но нас она интересует исключительно из-за опции переключения между GPU (естественно, здесь это тоже происходит средствами vga_switcheroo).

Будьте аккуратны с UCC: во-первых, работает кривовато, например, мне необходимо было вначале переключиться на дискретную видеокарту, а лишь затем на встроенную, чтобы обесточить дискретную (либо вначале выполнить echo OFF > /sys/kernel/debug/vgaswitcheroo/switch, а затем переключаться на встроенную GPU). Но работает. Во-вторых, переключение происходит сразу, то есть без спросу выполняется завершение сеанса и приходится вновь залогиниваться.

Полезные советы по энергосбережению

Собирались эти советы с lesswatts, ubuntuforums, учитывались хинты от powertop, кое-что было найдено случайно.

1) Если у вас стоит убунту на ноутбуке, стопроцентно у вас установлен пакет laptop_mode, оптимизирующий работу компьютера в зависимости от источника питания. Значение 0, посылаемое в /proc/sys/vm/laptop_mode, отключает режим энергосбережения, 5 устанавливает самый агрессивный. Подробнее о том, как именно laptop_mode сберегает энергию, можно прочесть где угодно.

2) Режим энергосбережение для SATA-устройств.

Не знаю, почему у меня в /sys/class/scsi_host/ целых шесть устройств. 🙂 Для включения максимального быстродействия выполнить команды с max_performance вместо min_power.

3) По умолчанию в Ubuntu есть четыре профиля работы процессора:

conservative: медленно повышает частоту процессора в зависимости от нагрузки на систему и резко сбрасывает частоту к минимальной при простое.
ondemand: быстро повышает частоту процессора при возрастании нагрузки и медленно сбрасывает частоту к минимуму при простое.
powersave и performance, очевидно, соответствуют минимальной и максимальной частотам CPU.

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

4) Параметр sched_mc_power_savings из /sys/devices/system/cpu/ позволяет использовать энергосберегающий режим работы процессора в случае, если у того более одного ядра, благодаря особому распределению нагрузки между ядрами.

5) Встроенные аудио-чипы от Intel (которые принадлежат к т. н. High Definition Audio — HDA) также имеют возможность экономии ватт, если звуковой чип не используется

6) Для того, что выиграть еще чуть-чуть времени работы батареи, можно запретить системе время от времени «опрашивать» cd/dvd-привод на предмет наличия там диска.

7) Можно выключить к черту веб-камеру вместе с драйвером. Не проверял отдельно, но сообщают, что дело очень хорошее при работе от батареи.

Естественно, пропустите этот шаг, если вам придется использовать скайп или еще для чего-то понадобится камера.

8 ) Dirty ratio — максимальный размер памяти (в процентах), для хранения грязных данных прежде чем процесс, их сгенерировавший, будет принужден записать их. Чем выше значение, очевидно, тем реже производится запись и тем меньше активность жесткого диска и системы.

9) Dirty background ratio — минимальное число памяти (в процентах), где позволено хранить гразные данные вместо записи на диск. Этот параметр должен быть намного меньше чем dirty_ratio что бы позволить записывать куски грязных данных за один проход.

10) Dirty Writeback sentisecs — как часто ядро должно проверять есть ли «грязные» (измененные) данные для записи на диск (в сантисекундах). Чем выше значение, очевидно, тем реже используется диск для записи грязных данных.

11) Включение режима энергосбережения PCI Express, как говорят люди, позволяет экономить достаточно много энергии батареи.

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

Проблема 1. Не работает изменение яркости экрана. Яркость всегда стоит на максимуме. Это критичный момент для энергосбережения, так как яркая подсветка дисплея съедает уйму электроэнергии. Эта проблема наблюдается на многих ноутбуках, на Acer`ах особенно часто.
Симптом: изменение яркости с помощью gnome-апплета не дает эффекта, сколько ползунок не таскай, переключение клавишами FN+Right, FN+Left, или аналогичными Fn-комбинациями вешает систему, помогает лишь хард-ресет.
Решение оказалось не самым практичным, но достаточно простым:

Здесь ХХ принимает значения от 00 до FF в шестнадцатеричной системе. Для работы от батареи я выбрал значение 40, для работы от сети — FF.

Проблема 2. Bluetooth-радио включалось каждый раз при загрузки системы, несмотря на то, что bluetooth-модуль был выключен вручную и убран из автозагрузки. Еще одно решение, которое кому-то покажется очень некрасивым: добавить в /etc/rc.local следующую строку:

Автоматизация

Конечно, каждый раз вбивать команды в терминал — дело унылое. Даже каждый раз запускать вручную bash-скрипт тоже быстро надоест. Однако переход в режим энергосбережения в рамках описанных методов можно автоматизировать очень легко: всего лишь добавляем код ниже в /etc/acpi/power.sh:

Код будет иметь следующий вид:

Добавлять его можно прямо после строки #!/bin/sh.

Путем экспериментов я, в восторге, выяснил, что этот скрипт запускается каждый раз при старте системы. Кроме того, посмотрев содержимое файлов ac и battery в /etc/acpi/events/, я увидел, что скрипт по идее должен вызываться при подключении ноутбука к электросети и отключении от оной. Это логично, но почему-то не работало. Решение пришло быстро, надо было лишь дать необходимые права скрипту power.sh:

Теперь все стало автоматизировано настолько, насколько это возможно.

Вот как выглядит мой скрипт для энергосбережения:

Итак, чего удалось достичь? Ниже несколько скриншотов.

Ubuntu на ноутбуке

Работает Wi-Fi, Google Chrome с пачкой вкладок, включен обычный режим веб-серфинга

Ubuntu на ноутбуке

То же самое, плюс qutIM, Transmission, играет музыку Exaile, открыт лист OpenOffice.org Calc

Видео в полноэкранном режиме по неизвестной причине ест очень мало ресурсов. Оставив работать лишь qutIM (и Wi-Fi соединение, конечно), смотреть кино (обычный SD, Xvid) можно чуть ли не девять часов!
Результаты не подтасованые и не сиюминутные. Все взаправду. Перед снятием скриншотов я работал с ноутбуком в своем обычном режиме около 10 минут. Если оставить заряженный полностью ноут и ничего с ним не делать в течение пары минут, то можно увидеть цифры типа 13 часов. Но нам интересен лишь результат в повседневных условиях, не так ли?

Дополнительные советы

Как еще можно улучшить ситуацию? Да много как, наверное. Из того, что я знаю, но не применял:

1) Многие на форумах советуют команду

Единичка здесь означает самый «агрессивный» режим сбережения энергии жесткого диска. Лично я не смог вытерпеть, что диск замедляется уже через пару секунд после ничего-не-деланья, а разогнаться вновь ему приходится потратить мгновение, что создает эффект лага. Часто паркуется головка хдд. Не очень приятно, к тому же смею предположить, что это еще и изнашивает винт быстрее обычного. 255 вместо 1 отключает энергосбережение жесткого диска вообще. Можете поэкспериментировать с этим у себя, я не против. 🙂 Кстати, ковыряние /lib/hdparm/hdparm-functions позволяет найти вот такой кусок кода:

Он как бы намекает, что при переключении питания на батарею параметр выставляется 128. Я оставил так, как есть, но данные параметры можно безболезненно редактировать. Думаю, установкой единицы мог бы выиграть еще несколько десятков минут работы. Но комфорт работы важнее. Да, кстати, тут между прочим хочу заметить, что описанные до этого вещи никакого хоть слегка ощутимого дискомфорта в работу с ноутбуком не вносят.

2) Powertop, за неимением других подсказок, все время предлагает для уменьшения энергопотребления отключить USB-порты для устройств, не являющихся носителями информации. Можете использовать это для еще большей экономии энергии, но лично я без юсб-мыши пользоваться ноутбуком ну вообще не могу. Терпеть не могу тачпады.

3) Можно применить опцию noatime к файловой системе. Означает, что не будет вестись лог последнего времени доступа к файлу. Это уменьшит активность системы и жесткого диска. По умолчанию в Ubuntu 10.10, насколько я понял из мануалов, стоит режим relatime, который, если не ошибаюсь, обновляет время доступа лишь в случае внесения изменений в файл. Подробнее об этом, например, тут.

Заключение

Можно ли достичь того же потрясающего времени работы в Windows? Можно, если и не такого же, то близкого. В Win7 это делается установкой двух пакетов драйверов и двух-трех программ (которые даже без GUI, просто работают в фоне) от Acer, естественно, аналогов для линукса нет.
Так что в этом вопросе можно дополнительно порадоваться за убунту: все делается средствами системы (ядра), и при наличии, например, этого поста, все оуществляется за пару минут и пяток копипаст.

P.S. Прошу прощение за дилетантство, если таковое замечено. Мы совсем недавно встречаемся с Ubuntu.

Источник: habrahabr.ru.

Купили себе новый телефон? Вам сюда: программы для телефона бесплатно. Прокачайте свой телефон на максимум с помощью различных интересных программ.