The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Быстрая загрузка Linux с параллельным запуском сервисов (boot tune linux init)


<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>
Ключевые слова: boot, tune, linux, init,  (найти похожие документы)
From: TuxR Date: Sun, 19 Nov 2006 17:02:14 +0000 (UTC) Subject: Быстрая загрузка Linux с параллельным запуском сервисов Оригинал: http://www.rostovlinux.ru/content/view/927/56/ Написал Mark Alexander Bain, перевод: TuxR (Monday, 01 May 2006) Оригинал: http://enterprise.linux.com/article.pl?sid=06/04/13/173227 Если долгая загрузка вашего Linux сводит вас с ума, попробуйте технику параллельной загрузки. Какие улучшения вы сможете заметить, по сравнению с вашим текущим порядком проц есса загрузки? Хорошо, давайте начнем; посмотрим сколько времени это занимает сейчас. Засеките время, либо напишите простой скрипт для подсчета времени загрузки: #Filename: time_booting HOST=$1 RESULT="" while [ "$RESULT" != "$HOST" ] do RESULT=$(ssh bainm@$HOST uname -n 2>&-) done Запустите отчет времени и нажмите кнопку включения компьютера. $ time time_booting hector real 2m54.014s user 0m47.140s sys 0m18.660s В этом примере загрузка простого сервера занимает около трех минут. Чтобы посмотреть, какие улучшения возможно сделать, вам нужно посмотреть на исп ользуемый уровень выполнения (runlevel), какие приложения были запущены и в каком порядке. Узнайте runlevel, набрав sudo runlevel , а затем посмотрите соответствующие директории rc.d . $ sudo ls -l /etc/rc$(sudo runlevel| awk '{print $2}').d total 0 lrwxrwxrwx 1 root root 18 1999-10-20 01:12 S10sysklogd -> ../init.d/sysklogd lrwxrwxrwx 1 root root 15 1999-10-20 01:12 S11klogd -> ../init.d/klogd lrwxrwxrwx 1 root root 13 1999-10-20 01:11 S14ppp -> ../init.d/ppp lrwxrwxrwx 1 root root 17 1999-10-20 01:43 S18portmap -> ../init.d/portmap lrwxrwxrwx 1 root root 24 1999-10-20 02:12 S20binfmt-support -> ../init.d/binfmt-support lrwxrwxrwx 1 root root 15 1999-10-20 01:12 S20exim4 -> ../init.d/exim4 lrwxrwxrwx 1 root root 15 1999-10-20 01:11 S20inetd -> ../init.d/inetd lrwxrwxrwx 1 root root 13 1999-10-20 01:43 S20lpd -> ../init.d/lpd lrwxrwxrwx 1 root root 17 1999-10-20 01:10 S20makedev -> ../init.d/makedev lrwxrwxrwx 1 root root 18 1999-10-20 03:33 S20mono-xsp -> ../init.d/mono-xsp lrwxrwxrwx 1 root root 15 1999-10-20 12:54 S20mysql -> ../init.d/mysql lrwxrwxrwx 1 root root 18 1999-10-20 01:44 S20netatalk -> ../init.d/netatalk lrwxrwxrwx 1 root root 27 1999-10-20 01:44 S20nfs-kernel-server -> ../init.d/nfs-kernel-server lrwxrwxrwx 1 root root 20 1999-10-20 01:42 S20postgresql -> ../init.d/postgresql lrwxrwxrwx 1 root root 15 1999-10-20 01:44 S20samba -> ../init.d/samba lrwxrwxrwx 1 root root 13 1999-10-20 01:43 S20ssh -> ../init.d/ssh lrwxrwxrwx 1 root root 20 1999-10-20 01:43 S21nfs-common -> ../init.d/nfs-common lrwxrwxrwx 1 root root 20 2006-04-05 15:44 S22set_time -> /etc/init.d/set_time lrwxrwxrwx 1 root root 13 1999-10-20 01:12 S89atd -> ../init.d/atd lrwxrwxrwx 1 root root 14 1999-10-20 01:11 S89cron -> ../init.d/cron lrwxrwxrwx 1 root root 17 1999-10-20 01:43 S91apache2 -> ../init.d/apache2 lrwxrwxrwx 1 root root 19 1999-10-20 01:10 S99rmnologin -> ../init.d/rmnologin lrwxrwxrwx 1 root root 23 1999-10-20 01:10 S99stop-bootlogd -> ../init.d/stop-bootlogd Во время загрузки скрипт /etc/init.d/rc получает уровень запуска и смотрит в со ответствующей директории (обычно, называющейся /etc/rc.d ). Затем скрипт запускает все файлы из директории в алфавитном порядке. Каждый файл фактически является ссылкой и его имя с буквы S и номера. Эта схема создает порядок загрузки и гарантирует, что все зависимости будут правильно обработаны. Например, в предыдущем листинге, S10 не имел зависимостей , и, следовательно,запускался первым. S11 может зависеть от S10 и запускаться следующим - и т.д. В вышеприведенном примере показаны 12 процессов с префиксом S20. Они запускаются последовательно и в алфавитном порядке. Если запуск каждого из них потребует 10 секунд, это займет 2 минуты времени загрузки. Так как каждый процесс имеет такой же уровень зависимостей, вы теоретически можете запускать их параллельно, уменьшив время загрузки с двух минут 54 секунд до одной минуты и 4 секунд. Сделаем смелый ход: Понимание, почему загрузка происходит медленно - это одно, но сделать что-то, относящееся к этому - совсем другое дело. Перед тем, как вы начнете делать изменения, убедите сь, что вы сделали бэкап всего - или еще лучше, используйте тестовый Linux. Нет гарантий, что вы не сделаете что-то неправильно, а поломанный процесс загрузки может привести к пол омке Linux. Если вы уверены и знаете, что делаете, начнем с просмотра вашего скрипта /etc/ init.d/rc. В конце файла вы найдете что-то вроде следующих строк (хотя, я его сильно упрости л): for i in /etc/rc$runlevel.d/S* do case "$runlevel" in 0|6) startup $i stop ;; *) startup $i start ;; esac done Вы можете заставить загрузочные процессы запускаться параллельно, сделав неболь шое изменение в коде: *) startup $i start & ;; Сделав это, я запустил свою проверку времени и получил эти результаты: $ time time_booting hector real 1m44.105s user 0m0.613s sys 0m0.674s Это более, чем на 1 минуту быстрее. К сожалению, у этой техники есть потенциальный недостаток. При нормальной загру зке все запускается и завершается в порядке очереди. Запуская каждый процесс параллельн о, вы не можете гарантировать, что один процесс не захватит критическую секцию раньше, чем другой, от которого он зависит будет завершен. Эта техника может работать у вас, но возмож ны большие отклонения, чем планировалось. Использование cinit для упрощения процесса Чтобы избежать потенциальной проблемы, вам нужно модифицировать скрипт так, что бы он проверял, что все зависимости удовлетворены перед тем, как сервис будет запущен. Вы можете упростить этот процесс, установив cinit, программу, спроектированную для включения параллельной загрузки процессов и обработки зависимостей приложения. Однако, cinit не для трусов или новичков. Вы не можете просто поменять init на cinit - вам действительно нужно знать, что вы делаете. Это значит, что если вы знаете, что делаете, то cinit может быть очень полезен. Основная идея cinit проста - перейти в директорию, содержащую упорядоченные наборы ссылок на приложения, которые вам нужно запустить. Вместо этого, cinit предоставляет набор директорий (в /etc/cinit) - одну для запуска каждого сервиса. Каждая директория содержит с сылку (calledon) , которая указывает на приложение, которое должно быть запущено. Другая особенность - две субдиректории: должны содержать ссылки на сервисы, которые являются критическими для вашего нового сервиса, и могут содержать ссылки на второстепенные сервисы, которые вы хотите запускать раньше вашего нового. Файл параметров содержит (или может быть ссылкой на) параметры, требующиеся сервису. Это было краткое описание cinit. Давайте посмотрим пример: $ ls -l /etc/cinit/pcmcia/modprobe/ lrwxrwxrwx 1 bainm bainm 14 2006-04-06 18:07 on -> /sbin/modprobe -rw-r--r-- 1 bainm bainm 6 2006-04-06 18:09 on.params $ cat /etc/cinit/pcmcia_module/on.params pcmcia Вы можете видеть, что сервис modprobe не имеет зависимостей. Однако, следующий пример (cardmgr) требует, чтобы сервис modprobe стоял раньше, чем он может быть запущен: $ ls -l /etc/cinit/pcmcia/cardmgr/* lrwxrwxrwx 1 bainm bainm 13 2006-04-06 18:20 pcmcia/cardmgr/on -> /sbin/cardmgr pcmcia/cardmgr/needs: total 0 lrwxrwxrwx 1 bainm bainm 20 2006-04-06 18:22 pcmcia_modules -> /etc/cinit/modprobe/ Вы можете прочесть больше о настройке cinit на веб-сайте Nico Schottelius. Этот сайт также содержит несколько примеров конфигурации. После двух дней работы с cinit, я получил следующие результаты: $ time time_booting hector real 2m03.003s user 0m0.841s sys 0m0.762s , другой продукт, который использует параллельный запуск сервисов, это другой в ыбор, заслуживающий проверки. Он все еще находится в процессе разработки, и не имеет поддержки некоторых вещей, как cron, но похоже, что он может использоваться и обычными(повседневными) пользователями, а не только экспертами. В зависимости от того, как хорошо вы понимаете Linux и насколько вы отчаяны, вы можете сократить время загрузки. Вы можете пойти быстрым, но потенциально опасным путем, либо вы можете потратить некоторое время и силы для менее рискованного решения.

<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру