Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР 130, ОКТЯБРЬ 2009 г.

Собери в дорогу Тукса. Как выжать максимум из Linux на нетбуке

Юрий «Adept» Видинеев (adeptg@gmail.com)

Если верить статистике, каждый пятый проданный в 2009 году ноутбук — нетбук. И это неудивительно — при сравнительно невысокой стоимости они обладают практически всеми возможностями «больших братьев», но при этом имеют компактный размер и малый вес. О том, как реализовать все возможности нетбуков с помощью Linux, я и расскажу в этой статье.

Чаще всего нетбук используют не в качестве основного рабочего инструмента (хотя я встречал и таких уникумов), а в качестве мобильного дополнения к десктопу или большому ноуту. При таком раскладе во главу угла ставится время автономной работы. К сожалению, достаточно прожорливые (если сравнивать с семейством ARM) процессор и чипсет, а также маленький размер батареи делают свое дело — максимальное время автономной работы не превышает 8 часов при использовании батареи повышенной емкости, а в среднем для стандартной батареи составляет 3-5 часов.

Но время автономной работы достаточно сильно зависит от вариантов использования и оптимизации ОС. Правильным тюнингом ОС можно добиться 10-50% прироста этого показателя.

Знакомство с подопытным

В качестве подопытного выступал прошедший огонь, воду и не одну тысячу километров Acer Aspire One AOA110 с характеристиками:

  • Экран 8,9" 1024 x 600
  • CPU Intel Atom N270 1.6 ГГц
  • Чипсет Intel 945GSE
  • ОЗУ 512 Мб
  • Накопитель 8 Гб SSD
  • Сеть 10/100 Мбит/с Ethernet, 802.11b/g
  • Камера 0,3 Мп, 2 кардридера
  • 3-х элементная 2200 мАч батарея

Вместо стандартного дистрибутива 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 я протестировал время загрузки.Перед проведением каких-либо оптимизаций были получены результаты:

Время загрузки: 17 секунд
В режиме веб-серфинга: 163 минуты
В режиме просмотра видео: 118 минут

Кто виноват и что делать?

Основным средством для контроля энергопотребления системы в целом и процессора в частности является замечательная утилита PowerTOP, написанная в недрах компании Intel. С помощью PowerTOP можно получить следующую информацию:

1. Сколько и в каком режиме работает процессор. Чем дольше процессор работает в режиме C3 или C4, тем меньше энергии он потребляет.

2. Количество пробуждений в секунду. Ясно, что чем меньше это число — тем лучше.

3. Текущее энергопотребление и ориентировочное время работы от батареи.

4. Компоненты системы, вызывающие наибольшее количество пробуждений в секунду.

5. Подсказки, описывающие конкретные действия, направленные на уменьшение энергопотребления.

PowerTOP есть в репозитории Ubuntu и устанавливается как обычно:

$ sudo apt-get install powertop

Программу надо запускать с правами root'а, желательно при отключенном адаптере питания (тогда можно будет увидеть текущее энергопотребление и время до полного разряда батареи). Из скриншотов видно, что даже при дефолтных настройках система в состоянии покоя потребляет всего 8,3 Вт, а процессор почти 80% времени проводит в состоянии C3.

Все ненужное на слом…

Первое, что необходимо сделать - это отключить все, что в данный момент не используется. То есть убрать ненужные службы, отключить сетевые интерфейсы, если в них нет необходимости, отказаться от Compiz (если включен), уменьшить яркость подсветки LCD до минимально комфортного уровня и т.д.

Проанализировав запускаемые при старте системы службы, я убрал bluetooth (в нетбуке нет встроенного), cups (ни разу не подключал к нему принтер), avahi-daemon, saned и atd:

$ cd /etc/rc2.d/
$ sudo rm S25bluetooth S50avahi-daemon S50cups S50saned S89atd

За управление яркостью подсветки отвечает gnome-power-manager. По умолчанию при работе от сети яркость выставляется в 100%. При работе от батареи - на 50% уменьшается. Лично мне вполне хватает и 30%, поэтому я настроил уменьшение яркости при работе от батареи на 70%:

$ gconftool-2 --set /apps/gnome-power-manager/backlight/brightness_dim_battery --type string 70

Splash screen мне тоже не нужен - только съедает драгоценные такты, да скрывает полезную информацию. Заодно можно убрать поддержку IPv6, если таковая не требуется. Отключение/включение splash screen и IPv6 осуществляется за счет передачи ядру определенных параметров при загрузке. Дефолтные параметры прописаны в файле /etc/default/grub, в строке GRUB_CMDLINE_LINUX_DEFAULT. Я убрал из этой строки параметры quiet и splash, добавил параметр ipv6.disable=1. Чтобы эти параметры применились для всех ядер, установленных в системе, надо дать команду:

$ sudo update-grub

Еще один способ уменьшить потребление энергии - выгрузить неиспользуемые модули ядра. Больше всего на энергии можно сэкономить, выгрузив модули, отвечающие за работу web-камеры и USB-подсистемы:

$ sudo rmmod usb_storage uvcvideo videodev v4l1_compat

Для автоматизации загрузки/выгрузки модулей можно написать скрипт и запускать его при необходимости либо добавить этот скрипт в ACPI-скрипты.

Поехали!

При монтировании файловых систем тоже есть возможность отключить «лишние» фичи, что положительно скажется на быстродействии и времени жизни SSD. Например, относительно безопасно можно отключить запись времени последнего доступа к файлу (опция монтирования noatime). При наличии исправной батареи можно увеличить время между сбросами буферов на диск (с помощью опции монтирования commit) и отключить барьер (barrier=0). С помощью опции data=writeback можно включить самый быстрый режим журналирования (будет вестись журнал только для метаданных). Правда, у меня система отказывалась грузиться, если этот режим установлен для корня. Пришлось оставить только для /home. При полностью отключенном журнале система тоже грузиться не захотела. В итоге, мой модифицированный /etc/fstab стал выглядеть следующим образом:

$ sudo nano /etc/fstab

UUID=31faf447-f5e3-40bd-9970-16f703ee130b/ext4noatime,commit=100,barrier=001
UUID=baf24048-4209-4c8a-849c-d54de626846f/homeext4noatime,commit=100,barrier=0,data=writeback02

Процессор Intel Atom, как и большинство процессоров Intel, поддерживает технологию Enhanced Intel Speedstep Technology, позволяющую изменять частоту процессора в зависимости от нагрузки, что неплохо экономит энергию. Ядро Linux, в свою очередь, поддерживает несколько схем изменения частоты процессора. Узнать, какие схемы доступны на данном ядре, можно через sysfs:

$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors

Ядро 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. Посмотреть, какая схема используется в данный момент, можно так:

$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

В Ubuntu ondemand используется по умолчанию. При необходимости измени схему на ondemand:

$ echo ondemand | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

Если в наличии имеется несколько процессорных ядер (пусть даже виртуальных), то ondemand надо прописать для каждого из них.
У схемы ondemand есть несколько настраиваемых параметров:

1. up_threshold - порог загрузки процессора, при котором он переходит на большую частоту. В Ubuntu по умолчанию - 95%, поэтому в изменении не нуждается.

2. sampling_rate - как часто проверяется текущая загрузка процессора. По умолчанию - 100 раз в секунду. Изменим значение на 1 раз в секунду (указывается в микросекундах):

$ echo 1000000 | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/sampling_rate

Поскольку sysfs - виртуальная файловая система, то все внесенные изменения пропадут при перезагрузке. Поэтому добавим в /etc/rc.local следующие команды:

$ sudo nano /etc/rc.local

echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo ondemand > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
echo 1000000 > /sys/devices/system/cpu/cpu0/cpufreq/sampling_rate
echo 1000000 > /sys/devices/system/cpu/cpu1/cpufreq/sampling_rate

Для увеличения производительности можно сменить планировщик ввода/вывода. Используемый по умолчанию CFQ создавался для работы с HDD; он изменяет последовательность записи данных с целью упорядочить движение головки по диску. Для SSD такие ухищрения не нужны, поэтому, чтобы не тратить впустую процессорное время, лучше сменить CFQ на noop. Для этого надо к параметрам, передаваемым ядру при загрузке, добавить elevator=noop.

SSD имеет ограниченное число циклов записи; логи и временные файлы лучше вынести в ОЗУ. Для этого добавим в /etc/fstab строчки:

$ sudo nano /etc/fstab

tmpfs/var/logtmpfsdefaults00
tmpfs/tmptmpfsdefaults00
tmpfs/var/tmptmpfsdefaults00

Ясно, что все содержимое этих папок после перезагрузки пропадет, а не все программы умеют корректно обрабатывать ситуацию, когда их любимый каталог в /var/log отсутствует. Поэтому придется воссоздавать структуру каталогов в /var/log при каждой загрузке. Для этого создадим в /etc/init.d скрипт logdirs:

$ sudo nano /etc/init.d/logdirs

for dir in apparmor apt bootchart ConsoleKit cups dist-upgrade fsck gdm news installer samba unattended-upgrades ;
do
if [ ! -e /var/log/$dir ] ; then
mkdir /var/log/$dir
fi
done

Сделаем скрипт исполняемым и пропишем в автозапуск:

$ sudo chmod +x /etc/init.d/logdirs
$ sudo ln -s /etc/init.d/logdirs /etc/rc2.d/S05logdirs

Опять же, для продления жизни SSD запишем в /etc/sysctl.conf следующие значения:

$ sudo nano /etc/sysctl.conf

# Устанавливает период между сбросами измененных данных из ОЗУ на диск в 15 сек. (по умолчанию 5 сек.)
vm.dirty_writeback_centisecs=1500
# Включает laptop-mode
vm.laptop_mode=5

Включение функции 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 добавим записи:

$ sudo nano /etc/rc.local

# Включаем автоматическое управление питанием
for i in `ls /sys/bus/usb/devices/*/power/level` ; do echo "auto" > $i ; done
# Управление питанием включится, как только устройство освободится (немедленно, через 0 сек.)
for i in `ls /sys/bus/usb/devices/*/power/autosuspend` ; do echo "0" > $i ; done
# Заодно выключим функцию Wake-on-Lan на сетевом интерфейсе
ethtool -s eth0 wol d

Смена таймера, отсчитывающего тики ядра, со стандартного 8254 на современный и более точный hpet должна ускорить загрузку системы и положительно сказаться на латентности. Для этого надо к параметрам, передаваемым ядру при загрузке, добавить clocksource=hpet.
Теоретически включение режима параллельной загрузки должно существенно ускорить загрузку системы на многоядерных процессорах. Intel Atom N270 – «псевдо-двухъядерный» (одноядерный, с Hyper-Threading), так что можно ожидать небольшого ускорения. Для включения режима параллельной загрузки надо в файле /etc/init.d/rc изменить строчку CONCURRENCY=none на CONCURRENCY=shell.

Ядерные войны

С ростом популярности нетбуков стали один за другим появляться проекты, которые предоставляют сборки ядра Linux (или даже целые дистрибутивы) под конкретную модель или семейство. Больше всего таких проектов, конечно же, направлено на поддержку Asus Eee PC, но и для Acer Aspire их немало. Мне удалось обнаружить 3 активно развивающихся проекта (и гораздо больше заброшенных):

  1. www.kuki.me - легкий дистрибутив на базе Ubuntu, поддерживающий только линейку нетбуков от Acer. Можно скачать отдельно ядро (последняя версия: 2.6.31-rc3).
  2. array.org/ubuntu/ - сборки ядра для Ubuntu. Сначала проект поддерживал только сборки для Asus Eee, но потом были выпущены версии, поддерживающие широкий спектр нетбуков. Последняя версия ядра: 2.6.28.
  3. www.aspireonekernel.com - сборки ядра для Ubuntu. Поддерживается только Acer Aspire One. Последняя версия ядра: 2.6.29.

Установка ядра с 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%). После произведенных настроек были получены результаты:

Время загрузки - 14 секунд (-17%)
В режиме веб-серфинга нетбук продержался 179 минут (+10%)
В режиме просмотра видео нетбук продержался 151 минуту (+28%)

Итак, мы видим, что с помощью небольших доводок можно увеличить время автономной работы на 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.

WWW

www.lesswatts.org - пожалуй, самое полное собрание материалов на тему энергосбережения в Linux. Так как сайт создан компанией Intel, то упор сделан на работу именно с ее оборудованием.

Подробнее об опциях монтирования ext4 читай здесь: www.kernel.org/doc/Documentation/filesystems/ext4.txt.

Содержание
загрузка...
Журнал Хакер #151Журнал Хакер #150Журнал Хакер #149Журнал Хакер #148Журнал Хакер #147Журнал Хакер #146Журнал Хакер #145Журнал Хакер #144Журнал Хакер #143Журнал Хакер #142Журнал Хакер #141Журнал Хакер #140Журнал Хакер #139Журнал Хакер #138Журнал Хакер #137Журнал Хакер #136Журнал Хакер #135Журнал Хакер #134Журнал Хакер #133Журнал Хакер #132Журнал Хакер #131Журнал Хакер #130Журнал Хакер #129Журнал Хакер #128Журнал Хакер #127Журнал Хакер #126Журнал Хакер #125Журнал Хакер #124Журнал Хакер #123Журнал Хакер #122Журнал Хакер #121Журнал Хакер #120Журнал Хакер #119Журнал Хакер #118Журнал Хакер #117Журнал Хакер #116Журнал Хакер #115Журнал Хакер #114Журнал Хакер #113Журнал Хакер #112Журнал Хакер #111Журнал Хакер #110Журнал Хакер #109Журнал Хакер #108Журнал Хакер #107Журнал Хакер #106Журнал Хакер #105Журнал Хакер #104Журнал Хакер #103Журнал Хакер #102Журнал Хакер #101Журнал Хакер #100Журнал Хакер #099Журнал Хакер #098Журнал Хакер #097Журнал Хакер #096Журнал Хакер #095Журнал Хакер #094Журнал Хакер #093Журнал Хакер #092Журнал Хакер #091Журнал Хакер #090Журнал Хакер #089Журнал Хакер #088Журнал Хакер #087Журнал Хакер #086Журнал Хакер #085Журнал Хакер #084Журнал Хакер #083Журнал Хакер #082Журнал Хакер #081Журнал Хакер #080Журнал Хакер #079Журнал Хакер #078Журнал Хакер #077Журнал Хакер #076Журнал Хакер #075Журнал Хакер #074Журнал Хакер #073Журнал Хакер #072Журнал Хакер #071Журнал Хакер #070Журнал Хакер #069Журнал Хакер #068Журнал Хакер #067Журнал Хакер #066Журнал Хакер #065Журнал Хакер #064Журнал Хакер #063Журнал Хакер #062Журнал Хакер #061Журнал Хакер #060Журнал Хакер #059Журнал Хакер #058Журнал Хакер #057Журнал Хакер #056Журнал Хакер #055Журнал Хакер #054Журнал Хакер #053Журнал Хакер #052Журнал Хакер #051Журнал Хакер #050Журнал Хакер #049Журнал Хакер #048Журнал Хакер #047Журнал Хакер #046Журнал Хакер #045Журнал Хакер #044Журнал Хакер #043Журнал Хакер #042Журнал Хакер #041Журнал Хакер #040Журнал Хакер #039Журнал Хакер #038Журнал Хакер #037Журнал Хакер #036Журнал Хакер #035Журнал Хакер #034Журнал Хакер #033Журнал Хакер #032Журнал Хакер #031Журнал Хакер #030Журнал Хакер #029Журнал Хакер #028Журнал Хакер #027Журнал Хакер #026Журнал Хакер #025Журнал Хакер #024Журнал Хакер #023Журнал Хакер #022Журнал Хакер #021Журнал Хакер #020Журнал Хакер #019Журнал Хакер #018Журнал Хакер #017Журнал Хакер #016Журнал Хакер #015Журнал Хакер #014Журнал Хакер #013Журнал Хакер #012Журнал Хакер #011Журнал Хакер #010Журнал Хакер #009Журнал Хакер #008Журнал Хакер #007Журнал Хакер #006Журнал Хакер #005Журнал Хакер #004Журнал Хакер #003Журнал Хакер #002Журнал Хакер #001