http://nico.schottelius.org/documentations/speeches/metarheinmain-chaosdays-
110b/cinit/view.
Гпава 22. Системы инициализации
391
22.3. Система инициализации systemd
22.3.1. Идеальная система инициализации
А теперь начнем наше знакомство с новой системой инициализации. Но прежде
еще раз остановимся на моментах, которые не устраивали нас (как пользователей
Linux) в старой системе init.
Как мы знаем, init (точнее, процесс системы инициализации) — это процесс с UID 1,
он первым запускается ядром и выступает родителем для всех процессов, у кото-
рых нет собственного родителя. Основная задача такого процесса (помимо всех ос-
тальных задач) — инициализация системы. А значит, он должен это сделать быст-
ро. Как запустить систему быстро? Во-первых, запускать не все, что можно, а толь-
ко самое необходимое. Во-вторых, запускать сервисы параллельно. Существует
еще одна система инициализации, запускающая сервисы параллельно, — это upstart
(о ней мы говорили в начале главы — она, правда, больше не используется, но от
этого ее возможности не стали хуже).
Давайте разберемся теперь, как запустить минимум сервисов, а запуск всех осталь-
ных отложить до тех пор, пока они не понадобятся. В некоторых случаях мы знаем,
какие сервисы нам понадобятся заранее. Как правило, это syslog, dbus и т. д. Но
представьте, что на своем ноутбуке мы хотим передавать и принимать файлы по
Bluetooth. Нужен нам демон bluetoothd? Да, потому что мы хотим использовать
Bluetooth. Но в данный момент, пока мы ничего не передаем и не принимаем, — он
не нужен. То есть, пока не включен Bluetooth-адаптер (и пока одно из пользова-
тельских приложений не захочет с ним общаться через D-Bus), загружать bluetoothd
не требуется. Аналогично и для системы печати cups — хоть принтер и подключен
к компьютеру, но сервис cupsd нужен лишь тогда, когда происходит печать. То же
и для сетевых сервисов— пока никто не обращается к вашему Web- или FTP-
серверу, нет необходимости их запускать, что сэкономит не только лишние секун-
ды при запуске системы, но и снизит нагрузку на процессор в процессе работы сис-
темы. Да и память сбережет.
Теперь поговорим о параллельном запуске нужных нам сервисов. Современные
процессоры настолько мощны, что система инициализации может попытаться за-
пустить все нужные сервисы одновременно. Этим она полностью загрузит имею-
щиеся ресурсы, но и сократит время запуска системы.
Однако запустить все и сразу нельзя — необходимо синхронизировать запуск сер-
висов. Иначе получится, что сервису Б требуется сервис А, который еще не запус-
тился. «Вес» сервисов разный, действия, выполняемые при запуске, — тоже раз-
ные. Даже если вы сначала запустите сервис А, а потом — Б, сервис Б может запус-
титься быстрее базового сервиса А. Приведу для конкретности некоторые примеры:
практически всем службам нужен syslog (иначе, как они будут вести протоколиро-
вание?), поэтому им необходимо дождаться его запуска. Многим службам (напри-
мер, тому же Avahi) нужен D-Bus, поэтому, пока D-Bus не будет запущен, сервису
Avahi приходится ждать.
392
Do'stlaringiz bilan baham: |