Pull to refresh

Загрузка Linux за 5 секунд

Reading time6 min
Views20K
Original author: Arjan van de Ven and Auke Kok, Intel
Полный перевод статьи, анонсированной в http://habrahabr.ru/blogs/linux/41701/

На Конференции «Сантехников» Линукс (Linux Plumbers Conference) Arjan van de Ven, разработчик решений для линукс из Intel, автор PowerTOP, и Auke Kok, разработчик из Intel'овского Open Source Technology Center, продемонстрировали систему на базе линукс, которая загружается всего 5 секунд. Аппаратной основой для этой системы служил Asus EEE PC, с SSD диском. Разработчики преодолели рубеж в «загрузку за 5 секунд» в двух вариантах: модифицированная Fedora и модифицированный Moblin. EEE PC грузился быстрее, чем проектор успечал распознать сигнал с видеовыхода устройства, поэтому им пришлось обойтись без него и попросту поднести ноутбук поближе к зрителям.

Как им это удалось? Arjan сказал, что все началось с правильной постановки задачи: «Заставить систему не 'загружаться быстрее', а заставить ее 'загружаться за пять секунд'.» Вместо того, чтобы экономить секунду здесь, секунду там, был установлен временной лимит на весь процесс загрузки, каждый этап загрузки должен быть сделан в пределах этого времени. И никакого мошенничества: «Завершение загрузки означает прекращение обращений к диску и нагрузки на процессор,» — сказал Arjan. Меряется время не до загрузки рабочего стола, пока службы продолжают загружаться в фоновом режиме (хотя некоторые компании меряют время загрузки своей ОС именно до этого момента). Время загрузки не включает включение сети, но включает запуск NetworkManager. Система с традиционным жестким диском грузится дольше, но Arjan сообщил, что он запускал систему на ThinkPad — и она загружалась менее, чем за 10 секунд

На этом железе Fedora загружается за 45 секунд — от включения питания до экрана ввода пароля. Bootchart, инструмент, созданный Ziga Mahkovec, раскрывает нам подробности загрузки. На графике загрузки Fedora (рис 1.), видно, что в процессе загрузки системы есть некоторые времяпожирающие моменты. Она использует целую секунду для запуска loopback-интерфейсов — на проверку, являются ли все сетевые интерфейсы loopbak-интерфейсами. 2 секунды требуются для запуска sendmail. «'Платят' все, несмотря на то, что возможности sendmail требуется далеко не каждому,» — сказал Arjan, и предположил, что для домашнего использования -SMTP только для исходящей почты — может использоваться ssmtp.
Рис. 1
Рис. 1


Еще одним затратным процессом в Fedora является «setroubleshootd», полезный инструмент для поиска проблем с настройками Security Enhanced Linux (SELinux), он занимает целых пять секунд. Нет повода винить Fedora — некоторые самостоятельные проекты используют непонятное количество времени/ресурсов для работы. Система X Window запускает собственный C препроцессор и компилятор при загрузке, только для того, чтобы составить собственные таблицы символов (keyboard mappings).
Рис. 2
Рис. 2


Загрузка Ubuntu практически такая же — на 2 секунды быстрее (рис. 2). Она тратит 12 секунд на modprobe, только для того, чтобы загрузить единственный модуль. Инструмент для загрузки проприетарных драйверов использует 2,5 секунды — на системе, которой не нужны проприетарные драйверы. «Все платят за возможность использовать закрытые драйвера,» — сказал Arjan. И, наконец, GDM Ubuntu занимает 2,5 секунды чистого процессорного времени, только для того, чтобы отобразить фоновую картинку.

Оба дистрибутива используют сплеш скрины. И Arjan, и Auke согласились: «Мы ненавидим сплеш скрины. За то время, что тратится на то, чтобы вы их увидите, мы хотим, чтобы все уже было сделано». Время, которое разработчики дистрибутива тратят на сплеш скрины, намного больше, чем команда Intel потратила для того, чтобы грузится за такое время, что сплеш скрин просто не нужен.

Как они это сделали: Ядро

Первым шагом является план. Одну секунду на загрузку ядра со всеми модулями. «Ранняя загрузка (Early boot)» включая загрузочные скрипты и фоновые задания — еще одна секунда. X Server — еще одна секунда, и 2 секунды на программы рабочей среды.

Ядро было пересобрано без initrd, который требует пол секунды «ни для чего». Все модули, которые необходимы — встраиваем в ядро. Arjan по этому поводу сказал: «Есть набор модулей, который покроет нужды 95% лаптопов».Он предположил, что нужно просто сделать отдельный дистрибутив с ядром, использующим initrd для оставшихся 5%.
Некоторая работа над ядром позволяет сделать параллельной загрузку некоторых подсистем. Например, модифицированное ядро запускает инициализацию Advanced Host Controller Interface (AHCI) для управления хранилищами в то же время, что и Universal Host Controller Interface (UHCI), для управления USB (рис. 3). «Наверное, мы смогли бы сократить время до половины секунды, но, доведя время до секунды, мы остановились,» — сказал Arjan. Время загрузки ядра должно сократиться до полусекунды к релизу 2.6.28, благодаря новому патчу модуля поддержки AHCI, написанному им.
Рис. 3
Рис. 3


Еще одним изменением ядра был маленький патч для поддержки readahead. Ядро терерь отслеживает, какую информацию необходимо читать во время загрузки, чтобы сделать ее сразу же доступной в пространстве пользователя (userspace) по окончанию своей загрузки. Все это вместе, делает возможным использование readahead, который является частью ранней загрузки.

Как они это сделали: readahead и init

Fedora использует Upstart как замену «init»- первой запускаемой программе в пространстве пользователя. Но команда Intel вернулась к оригинальному init. Порядок задач, которые выполняет init, был изменен для того, чтобы можно было делать 3 вещи одновременно: сначала процесс «sReadAhead» для чтения данных с диска и кеширования их в оперативной памяти, затем критический момент — проверка файловой системы, затем D-Bus истема межпроцессного взаимодействия, затем X- графическая подсистема, затем рабочий стол. Ну, и третий набор программ для запуска Hardware Abstraction Layer (HAL), затем udev — менеджер устройств «горячего подключения», затем сеть. Udev используется только для поддержки устройств, которые могут быть подключены позднее — система использует традиционную /dev папку, таким образом, загрузка не зависит от udev.

Упорядочивание задач помогает более эффективно использовать процессор. Например, X делает паузу в пол секунды ожидая получения информации о поддерживаемых видеорежимах. Это время использует HAL для своей загрузки (рис. 4)
Рис. 4
Рис. 4


В графике использования диска и процессора, оба используются по максимуму практически все время загрузки: спасибо sReadAhead. Когда стартует X, ему не требуется время на чтение с диска, поскольку все данные уже есть в кеше ОЗУ. sReadAhead основан на Readahead от Fedora, но он модифицирован, чтобы использовать преимущество списка данных для чтения, полученного от ядра. sReadAhead уже должен быть опубликован на moblin.org, и патч для ядра будет выложен как только Arjan сделает его совместно с Ted Ts'o (разработчик файловой системы ext3) — во время встречи Ted сделал некоторые предложения, как можно реорганизовать блоки на диске, чтобы увеличить скорость еще больше.

В этом проекте есть одно жесткое ограничение: 75 мегабайт для чтения с диска — 3 секунды передачи информации со скоростью 25 МБ/сек — ограничение SSD накопителей. «Таким образом, мы вынуждены были не читать файлы целиком. Мы читали только те куски файлов, которые мы на самом деле используем,» — сообщил Arjan. sReadAhead использует только время простоя дисковой подсистемы, таким образом, если что-то другое требует доступ к диску — оно его получает. Без использования readahead система загружается за 7 секунд, с его использованием — мы получаем нашу цель — загрузку за пять секунд!

X до сих пор является проблемой. «Нам было необходимо нанести множество «повреждений» X», сказал Arjan. Часть работы была направлена на предотвращение запуска компилятора C, путем повторного использования таблиц символов, но остальная работа была более временной. Текущее направление разработки X направлено на перенос большей части определения и настройки оборудования в ядро, что должно сократить общее время загрузки. Пока часть времени ядра уже используется на определение оборудования, это время можно использовать для инициализации большего количества устройств одновременно — это более эффективное использование времени, инициализировать видеокарту в то же время, что и USB и ATA. Разработчик X Keith Packard (также сотрудник Intel), предложил свою помощь. В итоге установка видеорежима производится ядром во время инициализации остального оборудования (рис. 3). Представленная быстрозагружающаяся система не использует GDM (экран ввода пароля), она грузится прямо в пользовательскую сессию, с окружением XFCE. Arjan предложил, вместо GDM — загрузить сессию последнего пользователя, но загружать вместе со скринсейвером который блокирует использования истемы без ввода пароля. Если другой пользователь захочет войти, он должен использовать кнопку скринсейвера «переключить пользователя».

В заключении Arjan сказал: «Не останавливайтесь на 'сделать загрузку быстрее'. Это неправильная постановка задачи. Правильная задача 'сделать загрузку быстрой'. И не заставляйте всех пользователей ждать из-за того, что кому-то нужен какой-то модуль или sendmail на их ноутбуке. Сделайте так, чтобы пользователи платили только за то, что они реально используют. Разработчики дистрибутивов не должны делать отдельные initrd и не-initrd дистрибутивы,» — сказал он позже: «Ядро должно попробовать загрузится без initrd, и использовать его только если оно не может увидеть /sbin/init (как может случится, если отсутствует модуль для монтирования корневой файловой системы).»
PowerTOP вызвал шквал изменений для экономии энергии во всех областях программного обеспечения Linux.
Рис. 5
Рис. 5


Конференция закончилась в пятницу (доклад был во вторник), и глава конференции Kyle McMartin сообщил, что и Fedora и Ubuntu исправили некоторые необоснованные задержки в их процессе загрузки, что вызвало шквал аплодисментов и одобрений.
Tags:
Hubs:
+48
Comments55

Articles