?

Log in

No account? Create an account

Turning the One into the Chosen One - Sergey Nikolenko

мар. 6, 2009

03:10 pm - Turning the One into the Chosen One

Previous Entry Поделиться Next Entry

Давным-давно, когда по земле ходили динозавры, у меня был компьютер с процессором AMD K5-90 (90 Mhz то есть), 32Mb RAM и 600-мегабайтным винчестером. Я попробовал поставить на него линукс (уж не помню какой); процесс установки был долгим (vasyabr, возможно, помнит эти замечательные сутки :) ), но в итоге всё получилось, и у меня без особых тормозов запустился X-сервер (опять же, не помню какой), и система была вполне работоспособна.

Прошли годы. Мой смартфон теперь значительно мощнее того десктопа, а Acer Aspire One, о котором пойдёт речь, и вовсе обладает монструозной конфигурацией — одни только 512Mb ram и 8 gb винчестера чего стоят! Поэтому, конечно, нельзя мириться с тем, что нетбук — «тормозная машина». Да, для висты или последнего kde со всеми eye candy-примочками AAO слабоват, но разве он для этого покупается? Работать с текстами, ходить по сети, готовить документы, программировать — всё это люди делали на компьютерах уже много лет, и конфигурация современных нетбуков более чем достаточна для всех этих задач.

В этом посте я расскажу о том, как у меня получилось превратить AAO из жутко тормозящей детской игрушки (linpus lite — это почти нормальная федора, но по умолчанию там даже терминал не показывают) в нормальный рабочий компьютер, который грузится не менее быстро, совершенно не тормозит при работе и при этом может делать всё, что мне нужно, and more. Всё, что я пишу ниже, я не сам придумал, а прочёл в разных how-to, форумах и faq'ах, но мне показалось, что будет удобно собрать всё в одном месте.

Я попытался излагать достаточно просто (чтобы linux-новички смогли повторить все операции) и аргументированно (чтобы они при этом понимали, что вообще происходит с их компьютером). Прошу прощения за некоторое насилие над русским языком — в конце многих строчек с командами должны были бы быть знаки препинания, но я решил оставлять строчки в том виде, в котором их надо набирать.


Главное

Главное, с чем мы будем сражаться всё это время — это solid state disk, флеш-память, установленная в AAO. Вообще говоря, ssd — это хорошо; например, он обеспечивает практическую нечувствительность AAO к механическим воздействиям, не ведущим к физическому уничтожению (проверять, впрочем, всё равно не советую). Но при этом запись на ssd, по крайней мере, на тот, которым оборудован AAO, гораздо медленнее записи на любой механический винчестер. Поэтому главной целью многих tweak'ов, которыми мы будем заниматься, является оптимизация disk writes, записей на ssd.

Eeebuntu

Лично мне кажется, что на данный момент оптимальным решением для Acer Aspire One является eeebuntu; хотя эта система «заточена» под EEE PC, она отлично держит «из коробки» всё оборудование AAO, включая wi-fi. Есть ещё проект Kuki Linux, специально разрабатывающийся для AAO; на вид кажется, что он пока из альфы не вышел.

В общем, если вы со мной, то заходите на
http://www.eeebuntu.org/
и скачивайте eeebuntu base. Никаких standard! Установка standard добавит много лишнего, в том числе EEEPC-specific лишнего, и вам потом придётся долго разбираться, как что удалять; всегда лучше поставить максимально «пустую» систему, благо наполнить её — дело очень простое.

Чтобы поставить eeebuntu на AAO, нам понадобится загрузочная флешка. Загрузите на свой основной компьютер образ eeebuntu base и специальную программу unetbootin с сайта
http://unetbootin.sourceforge.net/
Она доступна как для windows, так и для linux. Запустив unetbootin, выберите там iso-образ, который вы загрузили (eeebuntu-2.0-base.iso) и букву диска флешки. Некоторые флешки большого объёма не работают как загрузочные; у меня не получилось загрузиться с восьмигигабайтной A-data, и я использовал usb-кардридер с двухгиговой microsd.

Сама инсталляция сложностей не представляет. Есть только один важный tweak, первый из направленных на главную цель всего процесса — минимизацию работы с медленным ssd-диском. Файловая система ext3, которую инсталлятор выбирает по умолчанию, — это journaling file system; ext3 ведёт специальный журнал при каждом действии, и ведёт его, разумеется, на диске. Существуют способы поставить ext3, а затем отказаться от создания журнала, или перенести журнал в оперативную память (об этом ниже), но мне кажется гораздо проще и разумнее с самого начала завести нежурналируемую файловую систему. Поэтому я рекомендую выбирать в инсталляции manual partitioning и делать основной partition с файловой системой ext2.

Для новичков: linux-терминал можно запустить, например, нажав Alt+F2 и набрав xterm.

Ядро

Конечно, самый правильный (от слова true) путь — пересобрать ядро самостоятельно. Однако подбор конфигов — дело непростое, а все AAO всё-таки похожи друг на друга. Поэтому я рекомендую пользоваться готовым оптимизированным для AAO ядром, доступным с этого сайта. Качаем linux-image-2.6.28sickboy-kuki_0.4_i386.deb, после чего отдаём команду
sudo dpkg -i --force-architecture linux-image-2.6.28sickboy-kuki_0.4_i386.deb
Затем заходим в файл /etc/modprobe.d/options и добавляем в конец строчку
options snd-hda-intel model=acer-aspire
Эта строка вызовет правильные драйверы звука.

Файловые системы

Один tweak, связанный с файловыми системами, мы уже применили: поставили eeebuntu на ext2, а не на ext3. Но этого мало. Любая система, и linux, и windows, постоянно пишет временно нужные данные во временных файлах, а также ведёт подробные логи своей деятельности. Если мы позволим ей писать всё это на ssd, быстрого компьютера у нас не получится. Решение простое: логи и временные файлы будем размещать в оперативной памяти; при таком подходе они будут теряться при перезагрузке, но логов нам (мне :) ) не очень жалко, а временные файлы и так терялись бы. В windows для этого потребовалось бы ставить какую-нибудь внешнюю утилиту вроде ramdisk и следить за ней отдельно; в linux, к счастью, всё это давно оптимизировано — есть просто специальная файловая система tmpfs, которая предназначена именно для размещения в оперативной памяти. Поэтому заходим в файл
/etc/fstab
(заходить надо с правами администратора, т.е. sudo nano /etc/fstab) и добавляем внизу следующие строки:
tmpfs   /var/log        tmpfs   defaults,noatime,mode=0755      0       0
tmpfs   /tmp    tmpfs   defaults,noatime,mode=1777      0       0
tmpfs   /var/tmp        tmpfs   defaults,noatime,mode=1777      0       0
Эти строки как раз и означают, что мы хотим разместить каталоги /tmp, /var/tmp и /var/log на файловой системе tmpfs (т.е. в оперативной памяти). Это на самом деле самый важный tweak — именно от него достигается самый серьёзный прирост производительности. Опция noatime, кстати, должна стоять и на основном диске (проверьте) — это тоже очень важно для производительности: noatime говорит файловой системе о том, что не надо при каждом чтении записывать на диск дату последнего доступа к файлу. Если её не поставить, при каждом disk read'е и, более того, при каждом чтении файла из кэша будет происходить disk write!

X-сервер и оконные менеджеры

Оконный менеджер — это программа, которая собственно показывает вам рабочий стол, двигает туда-сюда окошечки (и рисует их), читает мышку, увязывает разные программы, которые хотят вашей видеопамяти и т.п. Привыкшие к windows люди могут удивиться, но это вовсе не операционная система — это необязательная графическая надстройка (строго говоря, это два уровня — X-сервер, который у всех примерно одинаковый, и оконные менеджеры, которые стоят сверху X-сервера). Соответственно, ничего удивительного в том, что оконных менеджеров в линуксе великое множество. Eeebuntu по умолчанию поставит вам gnome; это система удобная и хорошая, но не самая быстрая, а мы, напомню, стараемся оптимизировать скорость. Поэтому рекомендую поставить LXDE — это специально разработанный для относительно маломощных компьютеров менеджер, который всё равно выглядит неплохо, но при этом гораздо более умеренно кушает ресурсы. Можно, конечно, поставить и xfce или icewm — они тоже считаются «менее тяжёлыми» X-серверами (менее — по сравнению с гигантами KDE и Gnome). Почти всё, что написано дальше, от оконного менеджера не зависит.

Пакеты и программы

Во-первых, о том, как ставить новые программы. В ubuntu это делается при помощи команд apt-get и aptitude (запускать, конечно, через sudo). Например, чтобы поставить LXDE, можно просто набрать
sudo aptitude install lxde
Есть, конечно, и графические оболочки (synaptic package manager у вас к этому моменту уже наверняка установлен), но лично мне как-то всегда было проще отдать одну команду, чем полчаса лазить по спискам пакетов.

Замечание: если вы, как я дома, сидите за прокси, то менеджерам пакетов нужно отдельно сказать об этом, установив переменную http_proxy:
export http_proxy=http://XXX.XXX.XXX.XXX:XXXX
Эту команду можно было бы прописать в автозагрузку, но вы ведь не всё время будете за одним и тем же прокси, правильно?

Из того, какие программы ставить, я рекомендую gedit для редактирования текстовых файлов; здесь, например, можно найти весьма удобный плагин к gedit для LaTeX. Чтобы поставить сам LaTeX, кстати, достаточно отдать команду
sudo aptitude install tetex-base tetex-bin tetex-extra
Для работы с документами, конечно, будет не обойтись без openoffice; рекомендую сразу поставить openoffice 3.0, воспользовавшись указаниями на этой странице (не буду уж переписывать сюда). Можно ещё поставить pidgin (мессенджер), skype и всё остальное, что вашей душе заблагорассудится. Для просмотра pdf-файлов рекомендую не тяжеловатый acroread, а крайне быстрый и лёгкий (но и простенький, конечно) xpdf.

Раскладки клавиатуры

Добиться русской раскладки клавиатуры в lxde графическими средствами у меня не получилось, поэтому запускаем
setxkbmap -option grp:switch,grp:alt_shift_toggle us,ru
После этого клавиатура переключается по Alt+Shift (это поведение можно менять, меняя alt_shift_toggle на то, что вам нравится) между русской и английской (естественно, вместо us,ru можно написать те варианты, которые вам нужны). Чтобы запускать эту команду каждый раз при запуске lxde, нужно добавить в конец файла
/etc/xdg/lxsession/LXDE/autostart
строчку
@setxkbmap -option grp:switch,grp:alt_shift_toggle,grp_led:scroll us,ru


Автоматическая загрузка приложений в lxde

Вообще говоря, если вы хотите что-то запускать при запуске lxde, у вас два пути: Например, я столкнулся с тем, что lxde не запускал автоматически network manager applet — очень удобную штуку, которая соединяет с разными проводными и беспроводными подключениями, всё помнит и всё подхватывает. Чтобы это дело исправить, я нашёл .desktop-файл командой
locate nm-applet
(здесь nm-applet — название этого апплета, а locate показывает, где существуют программы и файлы с таким названием — в данном случае он среди прочего нашёл файл /etc/xdg/autostart/nm-applet.desktop), скопировал его в .config/autostart/ и удалил из него строчку
OnlyShowIn=GNOME;XFCE;
(она не позволила бы nm-applet запуститься в lxde, а только в xfce и gnome). После этого всё заработало.

Профилирование загрузки

В этот момент у вас уже есть рабочая машина, которая делает всё шустро и аккуратно. Продолжаем, тем не менее, ускоряться. При загрузке запускается огромная куча процессов со сложными зависимостями. Чтобы ускорить этот процесс, ubuntu пишет на диск специальный кэш, по которому предзагружает файлы при загрузке. Но, конечно, исходный метод построения кэша вовсе не оптимизирован под конкретную систему (даже не под систему acer aspire one вообще, а под конкретно вашу инсталляцию со всеми вашими службами, процессами и программами). Поэтому при загрузке нажимаем Esc, заходим в grub, на текущем ядре (это у вас уже, скорее всего, 2.6.28sickboy-kuki) нажимаем e (edit) и ещё раз e на строке kernel. В параметры ядра дописываем слово profile, после чего нажимаем b (boot) и загружаемся. Загрузка должна пройти значительно медленнее, чем обычно, но это только на один раз. При следующей перезагрузке система уже реоптимизирует загрузочный кэш, и boot time уменьшается. Я не парился с bootchart'ом, поэтому точное время не замерял, но субъективно стало действительно заметно быстрее. Если я правильно понимаю, профилирование есть смысл повторять после значительных изменений в системе (поставили сотню новых системных пакетов, перешли на другую версию ядра и т.п.).

Firefox

Mozilla Firefox — отличный браузер, быстрый и удобный. Но на AAO он с настройками по умолчанию безбожно тормозит, и вовсе не потому, что AAO не хватает мощности, а потому, что firefox постоянно пытается писать на диск всякую ерунду, а диски в AAO медленные. Чтобы это поведение устранить, зайдите в firefox на страничку
about:config
Там будет масса разных настроек. Чтобы что-то изменить, дважды щёлкните на нужной строчке. Лично мне вполне хватило для полного комфорта установки следующих параметров:
network.prefetch-next                boolean false
browser.cache.disk.capacity          integer 20000
browser.safebrowsing.enabled         boolean false
browser.safebrowsing.malware.enabled boolean false
browser.cache.disk.parent_directory  string  /tmp
Они означают, что браузер не будет пытаться предзагружать следующие странички, догадываясь о том, куда вы можете захотеть пойти (prefetch; с быстрыми компьютерами работает хорошо, на нетбуках только замедляет дело), а также уменьшает размер кэша (с 50 мегабайт до 20), не пытается писать в него базу подозрительных сайтов и — главное — размещает кэш в памяти (как вы помните, /tmp у нас размещается на tmpfs). Это позволяет практически полностью избавиться от записей на диск — теперь, насколько я понимаю, на диск пишется только то, что является перманентной частью профиля, вроде куки, логинов-паролей и истории посещений; как следствие, ff работает весьма шустро. Цена вопроса — несохранение кэша при перезагрузке; я от этого ни разу никакого неудобства не испытал и с трудом могу себе представить ситуацию, когда это может оказаться важным. Если хотите попробовать что-нибудь ещё более изящное и радикальное, о firefox в сети есть много разных советов. Можно посмотреть, например, сюда.

Внешние мониторы

Разумеется, 1024x600 — не предел для AAO; когда вы подключаете внешний монитор, вы вполне можете использовать его родное разрешение. Для этого используется команда xrandr. Я рекомендую не париться и поставить LXDE-оболочку для xrandr под логичным названием lxrandr:
sudo aptitude install lxrandr
lxrandr подхватит внешний дисплей, если он есть, и покажет доступные разрешения. Единственное замечание — размер буфера видеопамяти, т.е. размер «виртуального экрана», на который должны помещаться все физические экраны, нельзя изменить, не перезапустив X-сервер. Поэтому при первом подключении нового внешнего монитора, если ему нужно разрешение больше, чем у вас когда-либо было раньше, рекомендую перезапустить иксы с подключённым монитором. Это, кстати, легко делается комбинацией клавиш Ctrl+Alt+Backspace (и происходит практически мгновенно).

Прямо сейчас я сижу через AAO за 22" монитором с разрешением 1680x1050 (!) и никаких проблем от этого не ощущаю.

Видео и аудио

Чтобы играть видео, поставьте VLC media player:
sudo aptitude install vlc
Он работает быстро, понимает кучу разных форматов. Здесь всё просто. А вот с mp3 вышла интересная штука: mp3, конечно, лучше всего играть через mpg123:
sudo aptitude install mpg123
Но если просто взять и запустить mpg123 — для этого нужно всего лишь набрать, например,
mpg123 -Z */*.mp3
(эта команда будет играть все mp3-файлы в поддиректориях текущей директории — что естественно, если у вас, например, папка music разделена на альбомы-подпапки, причём будет играть в случайном порядке и повторять заново, когда закончатся) — то mpg123 на обычном декодировании mp3-файлов (по крайней мере, некоторых) будет отжирать добрых 40% ресурсов процессора! Но нет, это опять не «слабый компьютер», а просто лишний уровень абстракции: ALSA (Advanced Linux Sound Architecture), через который по умолчанию будет идти звук, может захотеть, например, сделать resampling с 44.1kHz на 48kHz, который и будет отжирать все эти ресурсы. Решение простое: всегда запускайте mpg123 так:
mpg123 -Z -a hw:0,0 */*.*
Сейчас вот он у меня запущен, играет замечательно и кушает 2.3% ресурсов CPU (читай: вообще не замедляет работу системы). Для любителей графических интерфейсов — существует огромное количество разных gui к mpg123.

Ну вот, собственно, и всё. Настоящие линуксоиды — я знаю, что вас немало среди моих читателей; пожалуйста, поправьте очевидные глупости, а если где-то я выбрал не лучшее решение, наставьте на путь истинный. Серьёзно, буду благодарен. Всем остальным — не бойтесь экспериментировать! Даже если вы совсем, абсолютно, полностью screw up ваш AAO, всё, что вам придётся сделать — это взять recovery cd, который поставляется с нетбуком, сделать из него загрузочную флешку и вернуть всё как было. В этом главный плюс software tweaks по сравнению с hardware — если вы, к примеру, станете ставить дополнительную память и случайно сломаете (скажем, отвёртка соскользнёт) что-нибудь жизненно важное, recovery cd не поможет. :)

Comments:

[User Picture]
From:rioman
Date:Март 6, 2009 12:24 pm
(Link)
Хм. А чем eeebuntu отличается от нормальной убунты?
А то у меня на ноуте убунта глючит, преимущественно в ноутовой части - уровень яркости постоянно прыгает и т.д. Я вот думаю, может, если еее поставить, она сможет с таким работать?
(Ответить) (Thread)
[User Picture]
From:nikolenko
Date:Март 6, 2009 12:29 pm
(Link)
По сути-то практически ничем. Главное — облегчена специально для нетбуков; в неё своё собственное ядро Array (хотя я вот всё равно, как видишь, другое поставил, для AAO собранное); добавлена поддержка нетбучного железа (конкретно eeepc, но и aao работает), в standard-версии есть ещё какие-то специальные конфигураторы для eeepc. Я думаю, что тебе лучше посмотреть форумы про твою конкретную модель ноута.
(Ответить) (Parent) (Thread)
[User Picture]
From:rioman
Date:Март 6, 2009 12:31 pm
(Link)
Понял, спасибо.
(Ответить) (Parent) (Thread)
[User Picture]
From:nekudza_max
Date:Март 6, 2009 12:40 pm
(Link)
Ням... Почитал и захотелось купить нетбук :)
(Ответить) (Thread)
From:a_shen
Date:Март 6, 2009 04:08 pm

+1

(Link)
...
(Ответить) (Parent) (Thread)
[User Picture]
From:ilyabo
Date:Март 6, 2009 01:27 pm
(Link)
хотя нетбука у меня нет, узнал много всего интересного, спасибо.
(Ответить) (Thread)
[User Picture]
From:sosedy
Date:Март 6, 2009 01:39 pm
(Link)
если для нубов и все объяснять, то нипанятно, почему ты такие (и почему разные) моды ставишь на tempfs'ы. Сомнительна эффектиность grp_led:scroll - у тебя эта лампочка есть вапще? :)
(Ответить) (Thread)
[User Picture]
From:nikolenko
Date:Март 6, 2009 03:04 pm
(Link)
да, с grp_led я погорячился :)
добавлять ли целый отдельный абзац про моды - подумаю; наверное, надо бы
(Ответить) (Parent) (Thread)
[User Picture]
From:edwardahirsch
Date:Март 6, 2009 02:40 pm
(Link)
А большая часть борьбы с диском (особенно жаль ext3) не станет бессмысленной, если как следует настроить кеширование? Там параметры всякие у ядра имеются...
(Ответить) (Thread)
[User Picture]
From:nikolenko
Date:Март 6, 2009 02:55 pm
(Link)
Можно отформатировать в ext3, а потом отключить журнал. Но разве она при этом не станет той же ext2? :)
(Ответить) (Parent) (Thread)
[User Picture]
From:edwardahirsch
Date:Март 6, 2009 02:57 pm
(Link)
Журнал и жаль, да.
(Ответить) (Parent) (Thread)
[User Picture]
From:nikolenko
Date:Март 6, 2009 03:08 pm
(Link)
На некоторых форумах ещё советуют reiserfs ставить, но я не пробовал.
(Ответить) (Parent) (Thread)
[User Picture]
From:nikolenko
Date:Март 6, 2009 02:57 pm
(Link)
P.S. Параметры ядра тоже можно применять; собственно, те же noatime, nodiratime.
(Ответить) (Parent) (Thread)
(Удалённый комментарий)
[User Picture]
From:jasperito
Date:Март 6, 2009 11:41 pm
(Link)
Ого.
Это ценно, спасибо )
(Ответить) (Thread)
[User Picture]
From:elementai
Date:Март 8, 2009 11:47 pm
(Link)
Наверняка в Ubuntu в качестве X ставится X.org и можно не запускать каждый раз setxkbmap, а просто прописать в соот-ю секцию конфига /etc/X11/xorg.conf вот это

Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
Option "XkbLayout" "us,ru(winkeys)"
Option "XkbOptions" "grp:ctrl_shift_toggle,grp_led:scroll"
Option "XkbModel" "pc105"
Option "XkbVariant" "winkeys"
EndSection

ru(winkeys) это русская раскладка точно как в windows, где знак точки не на клавише с цифрой '7', а на клавише с буквой 'ю'. Возможно сейчас и в просто ru так же. grp_led:scroll зажигает scroll lock когда клавиатура переключается на ru раскладку.

Вроде бы больше добавить по поводу неточностей нечего.

Если писать про другие решения, получится статья в 2 и более раз объёмнее. Я думаю, что ЖЖ - формат немного не тот для документации подобного рода, какая-нибудь wiki подошла б больше.

И ещё, есть куча-куча-куча доков по уменьшению энергопотребления на ноутбуках, надеюсь, что в готовом предложенном тобою ядре и дистрибутиве многое учтено, навскидку вспоминается в исходниках ядра Documentation/laptops/*, в основном экономия энергопотребления это :
- задержка записи на диск и остановка/раскручиваение его в нужные моменты, хотя для SSD это не должно быть особо важно. Вобщем-то, буферизуя сброс данных на диск, можно применять и журналируемые FS, но, конечно, мы рискуем несохранёнными данными, которые ещё в памяти, а не на диске.
- отключение и/или перевод ( внешних ) устройств в экономный режим, отключение, например, USB или выключение WiFi и тд
- регулировка частоты процессора в зависимости от нагрузки

Если кому-то действительно интересно я подробнее напишу ( сейчас просто нет ссылок ), да и тема весьма и весьма объёмная.
(Ответить) (Thread)
From:(Anonymous)
Date:Декабрь 24, 2009 08:47 am
(Link)
В Убунту теперь просто нет файла /etc/X11/xorg.conf
Уходят от этого.
(Ответить) (Parent) (Thread)
From:besel
Date:Октябрь 30, 2009 09:54 am

Касательного пущего ускорение ssd

(Link)
Можно прошить свежий firmware ssd очень помогает http://habrahabr.ru/blogs/netbook/64249/
если стоит intel ssd то подкладываешь другую прошивку.
(Ответить) (Thread)
[User Picture]
From:symbolic_link
Date:Декабрь 23, 2009 11:47 pm
(Link)
Сергей, это очень здорово!
Но вот к этому придерусь:
Можно, конечно, поставить и xfce или icewm — они тоже считаются «менее тяжёлыми» X-серверами...
X-сервер там Xorg, а подразумевалось, видимо, "менее тяжелыми менеджерами окон".
(Ответить) (Thread)
From:(Anonymous)
Date:Январь 26, 2011 06:58 pm

Язык Богов

(Link)
Может быть сновидения ("вещие сны") - это
Виртуальный Язык Богов, научившись которому,
человек сможет избежать судьбоносных ошибок и
изменить свою жизнь к лучшему? Давайте делиться
нашим опытом и учиться Виртуальному Языку вместе.
Вы вправе счесть этот текст рекламой, но как еще я
смогу рассказать о новом форуме посвященном нашим
сновидениям? Взамен вы можете опубликовать ссылки
на свои ресурсы на нашем форуме в теме "Наши ссылки".
То есть я предлагаю честный обмен ссылками.
Форум Сновидений находится по адресу: snowidenia.ru
(Ответить) (Thread)