Собери в дорогу Тукса. Как выжать максимум из Linux на нетбукеЮрий «Adept» Видинеев (adeptg@gmail.com) Если верить статистике, каждый пятый проданный в 2009 году ноутбук — нетбук. И это неудивительно — при сравнительно невысокой стоимости они обладают практически всеми возможностями «больших братьев», но при этом имеют компактный размер и малый вес. О том, как реализовать все возможности нетбуков с помощью Linux, я и расскажу в этой статье. Чаще всего нетбук используют не в качестве основного рабочего инструмента (хотя я встречал и таких уникумов), а в качестве мобильного дополнения к десктопу или большому ноуту. При таком раскладе во главу угла ставится время автономной работы. К сожалению, достаточно прожорливые (если сравнивать с семейством ARM) процессор и чипсет, а также маленький размер батареи делают свое дело — максимальное время автономной работы не превышает 8 часов при использовании батареи повышенной емкости, а в среднем для стандартной батареи составляет 3-5 часов. Но время автономной работы достаточно сильно зависит от вариантов использования и оптимизации ОС. Правильным тюнингом ОС можно добиться 10-50% прироста этого показателя. Знакомство с подопытнымВ качестве подопытного выступал прошедший огонь, воду и не одну тысячу километров Acer Aspire One AOA110 с характеристиками:
Вместо стандартного дистрибутива Linpus Linux Lite, не устраивающего меня по ряду причин (основная претензия: мало и довольно старое ПО в репозитории), я установил на него тестовую версию Ubuntu 9.10 Netbook Remix (к моменту выхода статьи в печать уже должен выйти релиз). В качестве файловой системы и для корня, и для /home я выбрал ext4. Swap-раздел не создавал из-за опасений за здоровье SSD. Несмотря на то, что Ubuntu Netbook Remix изначально заточен под нетбуки, имеется еще достаточно мест для приложения напильника. Чтобы увидеть все проведенные оптимизации в цифрах, был проведен ряд тестов. Так как нетбук я использую, в основном, для веб-серфинга или просмотра видео, то и тесты были выбраны соответствующие: 1. Для тестирования в режиме веб-серфинга был написан небольшой bash-скрипт, который в бесконечном цикле с интервалом в 30 секунд открывает в Firefox 3.5 несколько сайтов (google.com, xakep.ru, linux.com) и закрывает браузер. Интернет во время теста раздается по Wi-Fi. 2. При тестировании в режиме просмотра видео mplayer постоянно проигрывает знаменитый мультфильм «Big Buck Bunny» (1280x720, ogg). Громкость выставлена на 80%. Также с помощью bootchart я протестировал время загрузки. Перед проведением каких-либо оптимизаций были получены результаты:
Кто виноват и что делать?Основным средством для контроля энергопотребления системы в целом и процессора в частности является замечательная утилита PowerTOP, написанная в недрах компании Intel. С помощью PowerTOP можно получить следующую информацию: 1. Сколько и в каком режиме работает процессор. Чем дольше процессор работает в режиме C3 или C4, тем меньше энергии он потребляет. 2. Количество пробуждений в секунду. Ясно, что чем меньше это число — тем лучше. 3. Текущее энергопотребление и ориентировочное время работы от батареи. 4. Компоненты системы, вызывающие наибольшее количество пробуждений в секунду. 5. Подсказки, описывающие конкретные действия, направленные на уменьшение энергопотребления. PowerTOP есть в репозитории Ubuntu и устанавливается как обычно:
Программу надо запускать с правами root'а, желательно при отключенном адаптере питания (тогда можно будет увидеть текущее энергопотребление и время до полного разряда батареи). Из скриншотов видно, что даже при дефолтных настройках система в состоянии покоя потребляет всего 8,3 Вт, а процессор почти 80% времени проводит в состоянии C3. Все ненужное на слом…Первое, что необходимо сделать - это отключить все, что в данный момент не используется. То есть убрать ненужные службы, отключить сетевые интерфейсы, если в них нет необходимости, отказаться от Compiz (если включен), уменьшить яркость подсветки LCD до минимально комфортного уровня и т.д. Проанализировав запускаемые при старте системы службы, я убрал bluetooth (в нетбуке нет встроенного), cups (ни разу не подключал к нему принтер), avahi-daemon, saned и atd:
За управление яркостью подсветки отвечает gnome-power-manager. По умолчанию при работе от сети яркость выставляется в 100%. При работе от батареи - на 50% уменьшается. Лично мне вполне хватает и 30%, поэтому я настроил уменьшение яркости при работе от батареи на 70%:
Splash screen мне тоже не нужен - только съедает драгоценные такты, да скрывает полезную информацию. Заодно можно убрать поддержку IPv6, если таковая не требуется. Отключение/включение splash screen и IPv6 осуществляется за счет передачи ядру определенных параметров при загрузке. Дефолтные параметры прописаны в файле /etc/default/grub, в строке GRUB_CMDLINE_LINUX_DEFAULT. Я убрал из этой строки параметры quiet и splash, добавил параметр ipv6.disable=1. Чтобы эти параметры применились для всех ядер, установленных в системе, надо дать команду:
Еще один способ уменьшить потребление энергии - выгрузить неиспользуемые модули ядра. Больше всего на энергии можно сэкономить, выгрузив модули, отвечающие за работу web-камеры и USB-подсистемы:
Для автоматизации загрузки/выгрузки модулей можно написать скрипт и запускать его при необходимости либо добавить этот скрипт в ACPI-скрипты. Поехали!При монтировании файловых систем тоже есть возможность отключить «лишние» фичи, что положительно скажется на быстродействии и времени жизни SSD. Например, относительно безопасно можно отключить запись времени последнего доступа к файлу (опция монтирования noatime). При наличии исправной батареи можно увеличить время между сбросами буферов на диск (с помощью опции монтирования commit) и отключить барьер (barrier=0). С помощью опции data=writeback можно включить самый быстрый режим журналирования (будет вестись журнал только для метаданных). Правда, у меня система отказывалась грузиться, если этот режим установлен для корня. Пришлось оставить только для /home. При полностью отключенном журнале система тоже грузиться не захотела. В итоге, мой модифицированный /etc/fstab стал выглядеть следующим образом:
Процессор Intel Atom, как и большинство процессоров Intel, поддерживает технологию Enhanced Intel Speedstep Technology, позволяющую изменять частоту процессора в зависимости от нагрузки, что неплохо экономит энергию. Ядро Linux, в свою очередь, поддерживает несколько схем изменения частоты процессора. Узнать, какие схемы доступны на данном ядре, можно через sysfs:
Ядро 2.6.31 поддерживает схемы: conservative, ondemand, userspace, powersave и performance. Powersave и performance просто держат частоту процессора на минимальном и максимальном уровне соответственно (минимальную и максимальную частоту можно узнать из /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq и /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq, значение в КГц). Userspace позволяет вручную устанавливать нужную частоту процессора. Conservative и ondemand подстраивают частоту под текущую нагрузку (разница между ними – в различных алгоритмах подсчета необходимой частоты). Intel рекомендует использовать ondemand. Посмотреть, какая схема используется в данный момент, можно так:
В Ubuntu ondemand используется по умолчанию. При необходимости измени схему на ondemand:
Если в наличии имеется несколько процессорных ядер (пусть даже виртуальных), то ondemand надо прописать для каждого из них. 1. up_threshold - порог загрузки процессора, при котором он переходит на большую частоту. В Ubuntu по умолчанию - 95%, поэтому в изменении не нуждается. 2. sampling_rate - как часто проверяется текущая загрузка процессора. По умолчанию - 100 раз в секунду. Изменим значение на 1 раз в секунду (указывается в микросекундах):
Поскольку sysfs - виртуальная файловая система, то все внесенные изменения пропадут при перезагрузке. Поэтому добавим в /etc/rc.local следующие команды:
Для увеличения производительности можно сменить планировщик ввода/вывода. Используемый по умолчанию CFQ создавался для работы с HDD; он изменяет последовательность записи данных с целью упорядочить движение головки по диску. Для SSD такие ухищрения не нужны, поэтому, чтобы не тратить впустую процессорное время, лучше сменить CFQ на noop. Для этого надо к параметрам, передаваемым ядру при загрузке, добавить elevator=noop. SSD имеет ограниченное число циклов записи; логи и временные файлы лучше вынести в ОЗУ. Для этого добавим в /etc/fstab строчки:
Ясно, что все содержимое этих папок после перезагрузки пропадет, а не все программы умеют корректно обрабатывать ситуацию, когда их любимый каталог в /var/log отсутствует. Поэтому придется воссоздавать структуру каталогов в /var/log при каждой загрузке. Для этого создадим в /etc/init.d скрипт logdirs:
Сделаем скрипт исполняемым и пропишем в автозапуск:
Опять же, для продления жизни SSD запишем в /etc/sysctl.conf следующие значения:
Включение функции USB autosuspend позволяет сэкономить еще немного энергии. Однако пользоваться этой функцией надо осторожно, так как теоретически она может поломать подключенный принтер или сканер (пруфлинк: www.nabble.com/USB-Problems-with-Ubuntu---workaround-td12123128.html). Правда, ошибку уже исправили (для ядер > 2.6.22), но сама такая возможность настораживает. PowerTOP советует включать USB autosuspend через передачу ядру параметра usbcore.autosuspend=1. Для новых ядер этот метод не сработает, поэтому придется включать через sysfs. Для этого в файл /etc/rc.local добавим записи:
Смена таймера, отсчитывающего тики ядра, со стандартного 8254 на современный и более точный hpet должна ускорить загрузку системы и положительно сказаться на латентности. Для этого надо к параметрам, передаваемым ядру при загрузке, добавить clocksource=hpet. Ядерные войныС ростом популярности нетбуков стали один за другим появляться проекты, которые предоставляют сборки ядра Linux (или даже целые дистрибутивы) под конкретную модель или семейство. Больше всего таких проектов, конечно же, направлено на поддержку Asus Eee PC, но и для Acer Aspire их немало. Мне удалось обнаружить 3 активно развивающихся проекта (и гораздо больше заброшенных):
Установка ядра с kuki.me тривиальна - скачиваем deb-пакет, который потом устанавливаем. Система с этим ядром грузится ощутимо быстрее (по мнению bootchart - за 11 секунд). Энергопотребление несколько выше, чем с дефолтным ядром (8,5 Вт против 8,3 Вт в состоянии «покоя»). При сборке этого ядра не включили опцию CONFIG_TIMER_STATS, поэтому PowerTOP не может отобразить компоненты системы, вызывающие наибольшее количество пробуждений в секунду. Кроме быстрой загрузки, ядро неприятно удивило короткими, нечастыми фризами системы. Установить ядро с array.org тоже несложно - достаточно подключить их репозиторий. По данным bootchart система грузится еще быстрее - всего за 10 секунд. Энергопотребление тоже низкое - всего 7,6 Вт. Но этот приятный факт обусловлен неприятным обстоятельством: из коробки не работает Wi-Fi. Впрочем, его не сложно настроить. У aspireonekernel.com нет своего репозитория, и ядро просто скачивается и устанавливается. Система с этим ядром грузится за 11 секунд и потребляет 8,3 Вт. К сожалению, CONFIG_TIMER_STATS тоже отключен при сборке. Все три альтернативных ядра превосходят стандартное ядро лишь по одному показателю - скорости загрузки. Учитывая вероятные проблемы (в том числе, с апдейтами), я решил остаться на стандартном ядре. ИтогВ результате всех оптимизаций в состоянии «покоя» энергопотребление системы по показаниям PowerTOP снизилось с 8,3 Вт до 7,1 Вт (на 14%). После произведенных настроек были получены результаты: Итак, мы видим, что с помощью небольших доводок можно увеличить время автономной работы на 10-30%. И это для ОС, уже оптимизированной для работы на нетбуке. В случае с обычной, десктопной ОС, цифры были бы несколько выше. Но чудес не бывает, и кардинально решить проблему со временем автономной работы можно только покупкой батареи с большей емкостью. В конце этого года большинство именитых производителей нетбуков обещают выпустить модели с процессором ARM (уже успевшие обрести собственное имя - смартбуки). Благодаря низкому энергопотреблению, смартбуки должны жить на одном заряде недостижимое для обычных нетбуков время - от 10 часов и дольше. Что ж, ждем с нетерпением! DVDНа прилагаемом к журналу диске ты найдешь примеры конфигурационных файлов и скрипты для тестирования. INFOПомни, что Ubuntu 9.10 по умолчанию использует GRUB2, поэтому ручное редактирование /boot/grub/grub.cfg нежелательно. Настройки загрузчика меняются в /etc/grub.d и /etc/default/grub. Чтобы включить автоповторение в mplayer, добавь в файл ~/.mplayer/config строчку loop=0. WWWwww.lesswatts.org - пожалуй, самое полное собрание материалов на тему энергосбережения в Linux. Так как сайт создан компанией Intel, то упор сделан на работу именно с ее оборудованием. Подробнее об опциях монтирования ext4 читай здесь: www.kernel.org/doc/Documentation/filesystems/ext4.txt. |