Ускорение загрузки системы
Чтото вспомнилось вдруг время, когда оттюнинговывал Win95, WinMe.., так что Me грузился за 10 сек на компе - p3 753 мГц + 128mb. Посмотрел на текущее время загрузки на ноуте - centrino 1729 + 1.5mb + Gentoo и немного недоволен остался.. Сравнения конечно совсем не уместные, но ситуация думаю всем понятна.
Вобщем решил немного исправить положение, вот замеры до оптимизаций времени загрузки:
12:kernel (время от нажатия энтера в lilo до начала инициализации сервисов)
31:services (инициализация сервисов, сюда же входит загрузка udev и тп., вобщем всё после появления строчки init version ..., появляющейся когда ядро загружено)
07:x11 (от перехода на 7-ю консоль до появления крестика мышки)
07:xdm (kdm) - от появления крестика мышки до диалога логина
27:kde (от нажатия ентер в диалоге логина до полного исцезания экрана заставки)
summary - 84
Результаты после оптимизации:
10:kernel
23:services
06:x11
06:xdm (kdm)
13:kde
summary - 58
Больше ускорить пока не получается, итого получился прирост в - 26 секунд.
Цель этого поста поделиться своим опытом, привести реальный пример с цифрами другим, услышать кто ещё чем пользуется в стремлении выхватить побольше драгоценных секунд их процесса загрузки системы.
Что делалось:
1) Как видно из начальных замеров, много времени занимает старт сервисов, начнём с него:
был выбор, ускорять через (initng или baselayout2) +- RC_PARALLEL_STARTUP. Пробовал все комбинации. В авторане у меня следующее:
alsasound | boot
bootmisc | boot
checkfs | boot
checkroot | boot
clock | boot
consolefont | boot
cupsd | default
gpm | default
hald | default
hibernate-cleanup | boot
hostname | boot
hplip | default
keymaps | boot
local | default nonetwork
localmount | boot
modules | boot
net.lo | boot
netmount | default
rmnologin | boot
sshd | default
urandom | boot
vixie-cron | default
xdm | default
убрать ничего не могу, всё используется, большого ускорения я не ожидал, т.к достаточно много времени тратилось не на запуск большого колличества маленьких скриптов (в этом случае и будет наибольший выигрыш initng), а в получении ip по dhcp от wifi точки + монтировании fs.
Результаты
- паралельная загрузка в моём случае процесс не ускорила (-1,2 сек иногда)
- от initng - отказался, из-за проблем с загрузкой сервисов (надо вручную мигрировать многие старые на его систему инициализации). Даже не стал до конца сервисы переводить на него, т.к увидел что прироста существенного не будет, время отжиралось, как я уже сказал раньше - на полезную работу.
- baselayout2 - о чудо, ребята из этой команды переработали инициализацию сетевых устройств, переписали код на чистом С, и много ещё чего сделали (читаем тут basalayout2). В результаты сеть стала инициализироваться заметно быстрее, и общее время запуска сервисов сократилось на - (31-23)=8 сек. (парвда в связи в изменением синтаксиса пришлось около ~20-ти конфигов вручную мёрджить :), но дело того стоило)
2) Давно конфиг ядра оптимизаровал, для версии 2.6.15 ещё, проревьювил и его..
в результате - уменьшил размер образа с 2.789 кб до 1996 кб. Получил выигрыш ещё в 2-е секунды.
3) Приступил к оптимизации графики, глобально можно было повлиять на ускорение prelink-ом, с него и решил начать (http://www.gentoo.org/doc/ru/prelink-howto.xml).
После отработки 'prelink -amvRf' зашёл в kdecenter и убрал прелоадинг конкваера и обновление базы mime и меню при загрузке (то что не рекомендуется, но т.к. софт сейчас добавляю редко - ничего страшного). Сервисы у меня уже по минимуму стоят.
И получил последний скачок скорости:
x11 + kdm - выигрыш 2 секунды
kde - (27-13) = 14 секунд.
Субъективно от прелинка приложения kde-шные стартовать чуть быстрее стали, особенно - kdevelop, kopette, recoll, kaffeine, konquaror. gimp - значительно быстрее стал, почти как простенький граф. редактор стратует. OO - с 12 секунд до 10 время запуска сократил. Но это уже отлонение от темы :) говорим о скорости загрузки системы.
Буду крайне благодарен за ещё какие-либо советы по оптимизации, так же думаю для всех, будут полезны описания ваших жизненных ситуаций - в какой конфигурации, после чего, насколько - удалось ускорить.
PS. hibernate это конечно хорошо, но не всегда приемлим, особенно когда проблемы после выхода из него. Если кто с помощь ining достиг существенно лучших результатов чем с baselayout2 отпишитесь пж-та, и приведите обязательно свой - "rc-update -s"
- Для комментирования войдите или зарегистрируйтесь
Еще есть einit
Его в Sabayon хотят использовать для ускорения загрузки. И уже есть пробная реализация (можно переключить стандарт на einit). Но я работу этого самого einit в Sabayon не испытывал.
ИМХО
ИМХО распараллеливание процессов инициализации чтоб побыстрее показать юзверю окошечко создает чисто визуальный эффектувеличения скорости загрузки (ибо количество тиков проца не меняется). Реально жде происходит замедление. Бо в то время когда система пытается поднять жизненно важный сервис юзверь запросто может запустить какой нить трудоемкий процесс. Очень сильно замедляет монтирование сетевых ресурсов, особенно по nfs. Про кеду улыбнуло. Ежели вы так спешите поставте флукс. Хибернэйт - штука хорошая и перспективная, как то пытался поднять, но напоролся на косяки с нвидишными дровами. Впрочем скорость загрузки за неимением ноута как бы некритична.
не совсем верно
не совсем верно про распараллеливание, оно может ускорить загрузку, просто не на каждой конфигурации, эффект очень зависит от колличества сервисов и их типа.
- распараллеливается только старт сервисов, юзер ни чего не может в это время запустить. И это вобщемто не очень важно, т.к старт сервисов не трудоёмкая операция, сервисы просто должны стартовать и выполить определённые действия, иногда связанные с вводом/выводом и обращением к оборудованию, в это время остальные, не зависящие от первых могут спокойно запускаться: именно поэтому идея расспараллеленной загрузки и заложена в виде стандартной возможности в генту, просто так бы никто этого не делал.
Я так и думал что будут ответы типа - флюкс рулез :) , но не стал просить не писать так, т.к в этом случае при шлось бы ещё много о чём предупреждать. С kde никуда уходить не собираюсь, зарекаться конечно не буду, но вероятнее всего так и будет.
- все мы спешим.. а те кто не спешат, ни куда не успеют. Просто мне нравиться когда всё работает быстро, чётко и оборудование используется по максимуму. На мой взгляд вполне естественное желание.
- звучит несколько странно, если учесть когда эта технология стала использоваться, я её с появления winxp постоянно использовал. А это уже весьма давно было..
Благодарю за ответ, уже начал думать что тема ни кому не интересна.
>>звучит
>>звучит несколько странно, если учесть когда эта технология стала использоваться, я её с появления winxp постоянно использовал. А это уже весьма давно было..
Дык дело не в давности а в принципе. Перелить с диска в память образ, по любому, много прооще нежели выполнять какие то действия по проверке,монтированию, инициализации, и.т.д. Даже монтирование фс не нужно. Надо будет дома еще раз попробовать. Может они его выпрямили?
У меня на ноуте
У меня на ноуте в принципе юзабельно, но после второго/третьего выхода из хибернейта могут начаться проблемы. Типа - полный висняк иксов, помогает только ребут. На текущем ядре не пробовал даже - 2.6.20-r6, после след. обновления затещу.
(кстати, если кто подскажет как можно обезопасить себя, или хотябы свести к минимуму подобный вред от зависания иксов буду крайне признателен, а то система работает как часы.. но графика порой всё убивает)
PS.
С baselayout2 перезагрузка/shutdown стал в несколько раз быстрее, что весьма обрадовало, а то раньше приходилось подождать пока ноут не выклиться достаточно долго.. - ~10 сек.
_________________
- Desktop: core: p4-3.0, video: Nvidia 7900 GT, hard: 4x250 Gb (baracuda 9 series) & 80 Gb WD, mem: 2 G, Audio: Creative X-Fi
- Portable: Asus U5A (915 chipset, centrino 1.73 Donath, 1.5 Gb mem, 160 Gb hard, e.t.c)
С год назад
С год назад ставил хибернейт. Понравилось. Грузиццо в 5 сек. Красиво. Грабли те же, периодически дохнет сц..... Гуглил в нете. Нарыл гдето статейку про то как нехорошо юзать пропиетарные дрова от нвидии с хибернейтом и чем то там еще. Отключил проп.дрова. Поюзал денька 2. Вроде без проблем, хотя два дня не повод говорить о стабильной работе. При выборе между шустрой графикой и шустрой загрузкой я остановился на первом. Потому хибернейт снес.
всё там с
всё там с дровами нормально, просто надо внимательно документацию к дровам читать. Например, не компилировать agpgart даже модулем ( или запретить автозагрузку этого модуля) если важен гибернейт, указать в /etc/X11/xorg.conf
если проблемы остались, просто заносите модуль нвидиии в чёрный список гибернейта и указываете в конфиге, что не надо трогать модули из черного списка.
заработало, Спасибо!
короче заработало, как ни странно.
1 - установил ядро suspend2-sources
2 - закоментировал nvidia в /etc/hibernate/blacklisted-modules и SaveClock restore-only в common.conf - что-бы часы не сбивались, и добавил в common.conf OnResume 20 /etc/init.d/net.eth0 restart
3 - нажал hibernate и все выключилось
4 - нажал power и все включилось ) - здорово! и главное на том-же самом месте.
5 - сделал кнопочку на рабочем столе, назвал "выкл" )
Спасибо! Просто здорово, ничего не глючит (amd64/nvidia) рекомендую всем )
Не много не
Не много не понял автора.
Нужно чтобы побыстрее загрузились ВСЕ сервисы?
Или чтобы побыстрее загрузился UI (X-ы)?
Если второе, то очевидно надо подкорректировать порядок загрузки сервисов, и не требующиеся для X-ов сервисы грузить после /etc/init.d/xdm.
У меня больше всего времени отжирает проверка фс на целостность. Вот и думаю можно как-нить распараллелить проверку разделов?
идея проста
Идея проста и понятна, если вспомнить о том что я написал, - xdm в авторане, т.е наиболее актуально время от запуска инициализации ядра до появления диалога логина.
Вот про идею с порядком xdm огромное спасибо!
в принципе после проверки целостности fs и монтирования локальных + keymaps: для запуска X ничего и не нужно, можно даже подъём сети в фоне пустить. Только вот не уверен что можно будет безболезненно пустить xdm раньше большинства остальных, щас попробую, отпишусь что получиться.
Старт xdm-а перед
Старт xdm-а перед большинством сервисов не прошёл, в принципе в скрипте об этом и было сказано (/etc/init.d/xdm), всё что могли разработчики уже сделали по максимуму:
# this should start as early as possible
# we can't do 'before *' as that breaks it
# (#139824) Start after ypbind and autofs for network authentication
# (#145219) Could use lirc mouse as input device
# (#70689 comment #92) Start after consolefont to avoid display corruption
...
вобщем он уже сейчас экономит несколько секунд. На данный момент занимает основное время из условно названного мною - "старт сервисов" этапа:
- проверка fs
- монтирование локальной фс
- коннект к wifi ap.
- старт HAL (я юзаю ivman для автомонтирования)
_________________
- Desktop: core: p4-3.0, video: Nvidia 7900 GT, hard: 4x250 Gb (baracuda 9 series) & 80 Gb WD, mem: 2 G, Audio: Creative X-Fi
- Portable: Asus U5A (915 chipset, centrino 1.73 Donath, 1.5 Gb mem, 160 Gb hard, e.t.c)
ну я net.eth* гружу
ну я net.eth* гружу после иксов, хотя net.lo до них стартует.
Ещё можно "несистемные" (винда, доки, медиа, архивы, всякие loops) разделы монтировать не в самом начале вместе с остальными, а в самом конце отдельным скриптом.
Так же можно отредактировать localmount и всё что нужно монтировать паралельно. ещё некоторые скрипты подстроить, в общем, можете подсмотреть твики в этой статье Ускорение загрузки системы
От всего там
От всего там перечисленного на моей машине эффекта почти никакого, именно поэтому я и открыл данную тему чтобы люди могли поделиться реальным опытом, и увидеть на примерах, когда какие результаты можно достигнуть.
Если ФС = reiserfs,
Если ФС = reiserfs, то некоторая часть времени уходит на медленный mount данной ФС.
Да, именно так,
Да, именно так, я тоже это заметил, просто если бы о каждой мелочи в начале сказал то уже статья получилась бы :)
У меня reiserfs два больших раздела: 46 гигов + 100 гигов и несколько маленьких на остальных fs, так что монтируется это хозяйство и проверяется несколько секунд.
(по поводу размера разделов прошу не флеймить, это с опытом уже пришло, под мои задачи размеры оптимальные)
Тип fs могу в принципе сменить, пока не очень разбирался с reiserfs новой и ext4. У меня задачи основные завязаны на работу с огромным колличеством маленьких файлов, постоянное их удаление и распаковка архивов. Если у кого есть опыт, поделитесь, что быстро монтируется и проверяется имея при этом преимущества райзера. Хотя думаю не особо претенденты есть, кроме более новой версии.
У меня,
У меня, настольный комп:
Время загрузки:
ядро ~10 сек
сервисы ~20 сек
X (KDE+Beryl,autologin) ~25сек
-------------
итого ~55 сек
ОО-2.2 (при запуске на "свежезагруженной" ситеме) ~12 сек
----------
Windows XP (от выбора в грубе до полного переставания моргания красного индикатора на системнике) ~35-40 сек
Что скажите?
В принципе
Генту - время в принципе нормальное для твоего компа, мои конфигурации смотри в подписи, нет времени сейчас на домашнем замерить linux :( . Но винда XP sp2 грузится 20 секунд ровно. (с лило до логина, логиниться у меня почти мгновенно, пару секунд)
_________________
- Desktop: core: p4-3.0, video: Nvidia 7900 GT, hard: 4x250 Gb (baracuda 9 series) & 80 Gb WD, mem: 2 G, Audio: Creative X-Fi
- Portable: Asus U5A (915 chipset, centrino 1.73 Donath, 1.5 Gb mem, 160 Gb hard, e.t.c)
В качестве ФС
В качестве ФС на замену reiserfs попробуй JFS или XFS.
XFS для больших
XFS для больших файлов оптимальна насколько я помню, она вроде бы как для мультимедиа у меня раньше была, потом с ноута почти всё такое убрал, соответственно не нужен стал раздел.
Разве чтото изменилось в плане области применения xfs?
Про jfs ничего путного не нашёл, никаких отзывов и рекомендаций кроме того что на офиц. сайте. Хотелось бы узнать мнение юзеров..
Повторюсь ещё раз, в текущей fs храняться десятки тысяч маленьких файлов, постоянно выполняются операции удаления пачек по несколько тысяч и создание/распаковка архивов.
Посмотрите
Посмотрите несколько ссылок:
http://linuxgazette.net/122/piszcz.html
http://www.debian-administration.org/articles/388
Рекомендую XFS, проц у вас вроде не слабый (иначе предпочтительнее JFS). Я использую обе эти ФС, проблем не было. Для разделов с большим количеством маленьких файлов можете выставить меньший размер блока (это делается при создании ФС).
basalayout2
а как он в портах называется? basalayout2 не нашел.
смотри
смотри маскированные версии базелауоута ;-)
работает он быстро...
у меня кпк с ним за 8-10 секунд грузится ;-)
_________________
Gentoo GNU/Linux 2.6.21 GCC 4.1.2 Dual Xeon
Working on Gentoo for iPAQ hx4700 :-)
Я не нашёл в
Я не нашёл в baselayout2 проверки ineed iuse needsme usesme. Где она? Её пока нет или она поменяла вид? И где бы почитать про baselayout в общем, что-то я не в курсе.
у меня
у меня называется
sys-apps/baselayout
Latest version available: 2.0.0_alpha3
Latest version installed: 2.0.0_alpha1
про мой опыт установки читай здесь http://gentoo.ru/node/6785
Не, я подожду
Не, я подожду пока хотябы Hard Masked с него уберут...
Около 5-ти
Около 5-ти секунд прироста скорости загрузки в дебиане мне дала смена симлинка sh с bash на dash (аналог ash).
30:kernel45:services15:x11
30:kernel
45:services
15:x11
60:xdm
150 сек
localhost ~ # rc-status
Runlevel: default
cupsd
dbus
hald
hdparm
local
net.eth1
netmount
ntpd
numlock
syslog-ng
vixie-cron
xdm
С виду все нормально, но на деле прескверно.
Какое железо?
Какое железо?
Как то фигово действительно... Мне кажеться такое время нормально для p2 :)
По поводу - 45:services, почитай про baselayout:2, реально классная вещь.
Сделал заметку,
Сделал заметку, об уменьшении времени загрузки системы. Почитай, возможно поможет.
x
p4 + 512 старый хард FUJITSU 10 gb HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs
более точные данные
30:kernel
60:services
10:x11
7:xdm
57:gnome
+164
а с baselayout2 я не знаю как поступить
(02 Oct 2006)
!!! All ebuilds that could satisfy "sys-apps/makedev" have been masked.
!!! One of the following masked packages is required to complete your request:
- sys-apps/makedev-3.23.1 (masked by: package.mask, ~x86 keyword)
/usr/portage/profiles/package.mask:
# Roy Marples
# masked for testing due to major ebuild and installation changes
For more information, see MASKED PACKAGES section in the emerge man page or
refer to the Gentoo Handbook.
(dependency required by "sys-apps/baselayout-2.0.0_rc6-r1" [ebuild])
Старый хард
Старый хард вносит свою хорошую лепту в медренный старт, я так полагаю...
man emerge - расскажет как размаскировывать пакеты. sys-apps/makedev надо будет прописать в package.mask & package.keywords.
Вот еще по
Вот еще по поводу ускорения загрузки. Только уже отдельного софта: preload
http://habrahabr.ru/blog/linu
http://habrahabr.ru/blog/linux/37035.html
Изучайте. Вот это подход!
Я бы сказал что
Я бы сказал что это тупик.
+1 в gentoo весьма
+1
в gentoo весьма развитая и сбалансированная система скриптов - причём она сделана для однообразной настройки разных частей системы.
Вопрос по хибернейту:
Для нормального использования этой возможности, сколько я действительно должен выделить на раздел подкачки, имея 2Гб оперативной памяти? В некоторых источниках - полтора размера оперативки, в других - два.
Вроде бы это всё и логично, но что же это, имея 4Гб памяти (а это сегодня не предел), человек должен 8Гб под своп выделять, при этом это получится впустую потраченное место..
Как по-вашему, сколько всё же целесообразно на эти дела выделять?
Размер свопа
Размер свопа больше размера оперативки обычно необходим тогда, когда оперативки мало. Если её > 1 гига, и не играешь в крутые гамесы типа Quake 4 на сверхвысоких настройках, тогда для хибернейта вполне достаточно будет сделать свой размером 1.1 от размера оперативки (так, на всякий случай, чуть больше ОЗУ).
Но, при оперативе >=2 гигов и это пространство уже не хочется отдавать под временные нужды (хотя что есть этот объём по сравнению с обычным современным диском - 750 гигов?.. только на ноуте если париться), что можно сделать в этом случае? а можно сделать перед хибернейтом "sync && echo 1 > /proc/sys/vm/drop_caches". Тогда вся лишняя информация из оперативки перед засыпанием выкинеться, и можно будет за пару попыток на своей машине понять, сколько обычно реально занятой памяти. Сильно сомневаюсь, что из 4-х гигов, после "echo 1 > /proc/sys/vm/drop_caches" будет занято больше 600-1000 метров (если только куча виртуальны хашин не запущена).
Ещё, на сколько я помню, в ядре suspend2, а сейчас уже в tuxonice есть поддержка сжатия образа памяти записываемого в своп.. посмотри ещё в эту сторону.
А вообще, на ноуте, у меня нет swap раздела, есть 2-а гига оперативки и юзаю suspend-to-ram. Всем доволен.
Дабы знание не пропадало,
Дабы знание не пропадало, отпишусь:
В рамках программы бесконечной навязчивой оптимизации системы заметил, что собранная модулями поддрежка USB уменьшает время загрузки ядра на несколько секунд. + Субъективно, выключенный verbose лог загрузки ещё на 1, 1.5 секунды.
Разумеется udev тратит какой-то время позже, на подгрузку тех же модулей, выкинутых из монолитного ядра, но у меня на ноуте оно получается не существенным.
Были подозрения, на то, что могут появится проблемы с usb девайсами, но всё круто работает (мышь, комуникатор, web-camera etc.).
На данный момент, ядро грузится 2.5 секунды.
Могу поинтересоваться? Что
Могу поинтересоваться?
Что значит загрузка ядра? Как визуально определить, что ядро загрузилось?
Или это имеется ввиду до загрузки (до появления надписи), например, openrc?
В принципе можнго и на openrc
В принципе можно и на openrc надпись ориентироваться.
Я предложил и описал критерии различных стадий загрузки в первом посте: