вторник, 26 мая 2009 г.

Создаем свой мини-дистрибутив линукса

http://www.ibm.com/developerworks/ru/edu/l-embedded-distro/index.html
http://www.ibm.com/developerworks/ru/library/l-linuxboot/

http://www.linuxjournal.com/node/4335/print
http://buildroot.uclibc.org/ http://www.buildroot.org/
http://ru.wikipedia.org/wiki/Busybox
http://en.wikipedia.org/wiki/Busybox
http://www.ibm.com/developerworks/library/l-busybox/

воскресенье, 24 мая 2009 г.

Оптимизация загрузки Ubuntu 9.04. Часть 4

По мере накопления информации, буду дописывать 4ю часть, но потом хочу слить все части в одну статью.
Так вот, забыл упомянуть самое главное. Скорость загрузки ОС также напрямую зависит от файловой системы, на которой стоит ОС. Дело в том, что с мелкими файлами лучше работает новая ext4 и старый reiserfs. Собственно, в дистрибутиве больше всего мелких файлов. Поэтому, рекомендую полностью переходить на ext4 - это намного уменьшит скорость не только загрузки ОС, но и саму работу с системой, программами и файлами.
Так-же, можно отключить предварительную проверку разделов жесткого диска во время загрузки ОС. Журналируемые файловые системы уже давно безопасны и проверять их желательно лишь после достаточно долгого использования, после небезопасного выключения компьютера, после глюков, ну и по желанию собственно. Отключать надо в файле "/etc/fstab". Там в конце каждой строчки стоят две цифры. Нам нужна только последняя цифра, она и отвечает за проверку жесткого диска во время запуска ОС. Меняем эту цифру на ноль на нужных файловых системах. И все, больше ничего трогать не нужно.
От половины до двух секунд занимает проверка, выходит ли компьютер из спящего режима или стартует обыкновенно (можете посмотреть по dmesg по ключевым словам resume). Отключить можно просто, добавляем в "/boot/grub/menu.lst" в конец строки с параметрами ядра ("kernel vmlinuz-bla bla-bla-bla") слово noresume.

Несколько идей...

Попробовал использовать preload. Но никакого прироста производительности не заметил, скорее наоборот. Но подробно не вникал в этот вопрос. Кому интересно, поставьте в синаптике пакет "preload". Он должен влиять не только на скорость загрузки ОС, но и на вообще скорость работы всех приложений. Если будет хоть какой-нибудь прогресс, дайте знать, попробую вникнуть в ее работу лучше.
Еще есть идея полностью отказаться от использования Initial Ram-Disk (initrd). Тут есть конечно некоторые недостатки, но для галочки просто необходимо попробовать.
Так-же, после изучения кучи систем стартовых скриптов и программ типа /sbin/init, решил написать свою программу, более простую, несовместимую со всеми остальными методами загрузки, но зато быструю и удобную. Совместимость только лишь тормозит прогресс.
Можно еще сделать некое подобие initrd. Сейчас initrd - это костыль в системе. Но что если самые важные части системы, которые не обязательно изменять каждый раз, запаковать в образ squashfs или по подобной технологии. Тут не нужно чрутиться, долго искать положение файлов на файловой системе, можно вообще основные вещи загрузить целиком в память и так далее. Конечно, сложно создавать такой образ, особенно сложно будет оновлять компоненты этой базовой системы.
В общем, пишите свои мысли в комментариях, очень интересно узнать, что вы об этом думаете.

понедельник, 11 мая 2009 г.

Оптимизация загрузки Ubuntu 9.04. Часть 3.

Убил напрочь свою убунту. Экспериментировал с системой стартовых скриптов и insserv. Пока восстановлю, пока заново разберусь во всем, напишу-ка еще один способ оптимизации загрузки.
Если присмотреться к логам bootchart, то можно увидеть, что скорость загрузки ограничивает винчестер в компьютере. Мало того, что скорость чтения с него не такая уж большая, но еще и файлы, которые запускаются при загрузке с винчестера, размазаны по файловой системе и при загрузке, система должна отыскать их и только потом грузить. То есть, на данный момент все происходит вот так: система ищет файл на винчестере, загружает его, запускает, когда тот завершил свою работу, система ищет следующий файл и так далее. Попробуйте хотя-бы подумать, сколько всего этих файлов. Есть выход из этой ситуации. И называется он - readahead. С этой штукой все выглядит иначе. Перед загрузкой файлов, программа readahead по списку ищет и загружает все загрузочные файлы за один раз, а дальше уже все идет проще - система стартовых скриптов запускает один файл, потом другой и т.д. Без предварительного поиска по винчестеру. Это сокращает время загрузки на очень большой процент (но который постоянно колеблется).
И так, открываем synaptic и ставим там пакет readahead. После чего перезагружаемся, но когда появляется меню выбора ОС (меню grub, если не появляется, то нажмите клавишу Esc, как только появится отсчет на экране), выбираем нашу систему и нажимаем клавишу "e", теперь можно отредактировать параметры ядра. В конце строчки "kernel vmlinuz-xx blablabla" пишем слово "profile" (без ковычек естественно и с пробелом между концом строки и самого слова) и нажимаем клавишу "b". Система будет грузится несколько минут, но в последующие разы, слово profile писать не надо. Эта команда генерирует список всех загружаемых вначале файлов в файл /etc/readahead/boot. В следующий раз, после проделанной операции, система будет грузится еще на пару секунд быстрее.
Пока я восстанавливаю свою систему, можете поискать в интернете информацию и почитать вот эти темы:
insserv, readahead, sreadahead, upstart

суббота, 9 мая 2009 г.

Оптимизация загрузки Ubuntu 9.04. Часть 2.

В продолжение предыдущей статьи, могу добавить еще пару легких советов. В этот раз с консолью возиться не придется:
  • Лезем в "Система" -> "Параметры" -> "Запускаемые приложения" и убираем галочки с ненужных сервисов. Например, я лично отключил вот эти службы: Evolution Alarm Notifier, Gnome Login Sound, Gnome Splash screen, Print Queue Applet (у меня принтера нет), Remote Desktop (не пользуюсь удаленным рабочим столом), Update Notifier (обновляться проще вручную, когда самого приспичит), User Folders Update, Visual Assistance (для людей без осложнений со зрением и некоторыми другими недугами - не нужно). Всегда можно вернуть службы назад, поставив обратно галочку.
  • "Система" -> "Администрирование" -> "Службы". Тут особо отключать нечего, ну в зависимости от установленного ПО на вашем компьютере. Но если нету на компьютере того-же принтера или блутуса - можно убрать галочки с печати и блутуса, до тех пор, пока не появятся эти девайсы. Так-же можно отключить samba или apache, если вы их устанавливали и пользуетесь только раз в неделю, а не при каждом запуске компьютера (всегда можно будет вернуть автозагрузку обратно или всегда можно загрузить и вручную).
  • В synaptic поставьте пакет bum. В меню "Система" -> "Администрирование" появится пункт "BootUp-Manager". Это как-бы дополнение к настройкам служб. Здесь можно отключить чуть больше, чем в стандартных настройках служб. Но будьте осторожны!
Продолжение следует...

Оптимизация загрузки Ubuntu 9.04. Часть 1.

Конечно, скорость загрузки GNU/Linux не играет особой роли, но все-таки, удобней, когда система загружается за несколько секунд, а не минут. Особо неудобно, когда медленно включается ноутбук/нетбук или другое портативное устройство. Попробуем уменьшить время запуска дистрибутива Ubuntu 9.04.
Для начала нужно узнать, за какое время загружается ОС в данный момент, чтобы потом было с чем сравнивать. Для этого, лезем в synaptic и устанавливаем утилиту bootchart. Она при каждой загрузке составляет отчет о загрузке компонентов ОС. Логи она хранит в папке /var/log/bootchart в формате png.
И так, после перезагрузки, можно посмотреть, за какое время система загружается до GDM. Открываем png файл в /var/log/bootchart и смотрим время. Теперь можно приступить наконец к легким путям оптимизации времени запуска ОС. Дело в том, что большинство этих путей уменьшают время всего на секунду - на две, а иногда и того меньше. Но в совокупности - можно сократить время загрузки Ubuntu примерно до 25 секунд (от меню grub до завершения запуска Gnome).
И так, приступим:
  • Я недолюбливаю заставку при запуске убунты - не так уж и красиво и при этом малоинформативно. Можно без всяких проблем избавиться от нее и сэкономить секунду запуска ОС. В synaptic удаляем пакет usplash и редактируем настройки grub: sudo gedit /boot/grub/menu.lst Находим там строчку с параметрами ядра:
    kernel /boot/vmlinuz-2.6.28-12-generic root=UUID=619b888a-ccd8-40b8-a1dc-8ca721829b3f ro quiet splash
    и убираем слова quiet и splash. Сохраняем и теперь наслаждаемся подробным и более крутым видом загрузки.
  • После загрузки ядра, в ubuntu начинает загружаться образ рам-диска (initial ramdisk, initrd). Если распаковать этот образ, можно убедится, что там очень много чего лишнего и распакованный он занимает чуть-ли не 25 мегабайт. Поэтому, желательно пересобрать все initrd-образы в системе только с необходимыми модулями. Но все не так сложно, как кажется. Открываем файл:
    sudo gedit /etc/initramfs-tools/initramfs.conf
    Находим там строчку
    MODULES=most
    и заменяем ее на
    MODULES=dep
    Все, теперь надо запустить команду
    sudo update-initramfs -k all -u
    Она пересоберет для всех установленных ядер все найденные образы initrd. В будущем, для новоустановленного ядра, initrd будет генерироваться уже сам с этими параметрами, так что это нужно сделать всего один раз. Теперь файлы initrd будут весить примерно по 3 мегабайта запакованными и по 6-7 мегабайт - распакованными. Это частично сократит время загрузки и при этом не повлияет отрицательно на систему.
  • У кого двух или более ядерный процессор, можно попробовать использовать параллельную загрузку. Открываем synaptic и ставим пакет insserv. После чего делаем так: sudo gedit /etc/init.d/rc Находим строчку CONCURRENCY=none и заменяем ее на CONCURRENCY=shell Перезагружаемся и проверяем, все-ли в порядке.
Продолжение следует...