Разработчики systemd: загрузка с initrd оказалась быстрее загрузки без initrd

В ходе работ по улучшению поддержки системного менеджера systemd в качестве init-процесса начального RAM-диска (initrd), разработчики Кей Сайверс и Гарольд Хойер столкнулись с интересным и по-своему курьезным фактом — при использовании initrd, суммарное время инициализации ядра и initrd оказалось примерно на 10% меньше, чем время инициализации ядра без initrd. Начальный RAM-диск (initrd) представляет собой специализированную файловую систему, которая используется ядром на стадии начальной загрузки. Основная задача initrd — обеспечить монтирование жизненно важных файловых систем: корня и /usr. В наиболее простых ситуациях (локальные дисковые разделы) данная работа может быть проделана и ядром, однако в случае использования для этих разделов специфическим механизмов (LVM, RAID, multipath, шифрование, NFS), initrd является наиболее простым и гибким решением. Также он может оказаться полезен в качестве аварийно-восстановительной системы, предоставляя администратору средства, необходимые для исправления ошибок при монтировании ключевых системных разделов.

Традиционно считалось, что отказ от initrd должен неизбежно привести к увеличению скорости загрузки. Однако, при использовании в качестве init-процесса initrd systemd, результат получился неожиданным и парадоксальным: ядро в сочетании с initrd отрабатывали быстрее, чем ядро без initrd. Наиболее вероятная причина состоит в том, что при загрузке без initrd ядро выполняет вызов wait_for_device_probe (), ожидая завершения инициализации всех периферийных устройств. В то время как при использовании initrd с systemd, загрузка продолжается сразу после инициализации необходимых устройств (т.е. носителей корня и /usr).

Асинхронная архитектура systemd, в отличие от классической синхронной, позволяет не задерживать процесс загрузки на ожидание устройств, которые не требуются на данном этапе. В зависимости от аппаратной конфигурации системы, эта задержка может сильно отличаться: например, встроенный в ноутбук 3G-модем без SIM-карты задерживает загрузку на 5 секунд, а сервер с тысячами физических дисков и/или логических томов может потерять несколько десятков минут, опрашивая каждое блочное устройство на предмет наличия на нем файловой системы.

Стоит отметить, что в обсуждении один из разработчиков приводит довольно простой патч, который теоретически должен исправить эту проблему, путем перевода данной операции в ядре на асинхронный режим. К сожалению, пока отсутствуют результаты измерений, которые бы позволили судить об эффективности такого исправления.

В дополнение, несколько других, более коротких новостей от проекта systemd:

Разработчики systemd и Arch Linux Том Гундерсен и Дейв Рейзнер обеспечили поддержку systemd в качестве init-процесса initrd при использовании стандартного для Arch генератора inird — mkinitcpio (в то время, как упомянутая выше работа Сайверса и Хойера акцентируется на dracut, стандартном initrd-генераторе Fedora/RHEL и Mageia/Mandriva). Разработчик Arch Linux и SDDM Андреа Скарпино представил библиотеку libsystemd-qt, упрощающую обращение к функциям systemd из программ на базе фреймворка Qt. В качестве примера использования библиотеки приводится простая программа ksystemd, позволяющая просматривать состояние различных системных юнитов. В целом, проект направлен на улучшение взаимной интеграции systemd и KDE. Разработчики пользовательского окружения Enlightenment обеспечили поддержку использования systemd в качестве системы инициализации сеанса. Запуск пользовательского сеанса в десктоп-окружении во многом аналогичен загрузке системы, что позволяет использовать для решения обеих этих задач один и тот же механизм, с минимальной адаптацией. Ранее, в силу сложившейся в эпоху SysV init традиции неоднократно дублировать и реализовывать заново уже существующую функциональность, каждое десктоп-окружение предлагало свою собственную систему инициализации сеанса. Замена множества собственных реализаций на общий стандарт должна упростить жизнь разработчикам DE и позволит им сконцентироваться на более актуальных задачах. Опубликованы видеозаписи докладов сотрудника компании Wargaming (известной своей игрой World of Tanks) Максима Мельникова, одного администраторов инфраструктуры серверов World of Tanks. В первом докладе «Зачем нам systemd», кратко рассматриваются ключевые преимущества systemd, полезные для системных администраторов и отсутствующие в других решениях. Во втором докладе обсуждаются достоинства механизма Journal и разбирается практический пример его использования. Доклады примечательны тем, что тема использования systemd впервые затронута на русскоязычной конференции разработчиков и пользователей Linux ((LVEE 2012).

©  OpenNet