Linux ускорение загрузки userspace

Обновлено: 04.07.2024

Нижеприведённый текст рассчитан дать представление о возможностях тонкой настройки и оптимизации системы. Бездумные действия могут привести к неожиданным результатам.

Чем замеряем

первое, что нам потребуется - это не большая утилита, которая умеет по логам строить интересный график

systemd-analyze из пакета:

Для начала построим наш график до того, как что-то навыключали:

Ну графике есть три довольно значимых этапа загрузки:

Startup finished in 843ms (kernel) + 8841ms (initramfs) + 24549ms (userspace) = 34235ms

Ну с ядром мы вряд ли что-то поделаем - не пересобирать же его, а вот с остальными двумя очень даже, и так приступим.

Общие рекомендации

  • не используем софтрейд
  • не используем разделы LVM
  • отключаем и выкидываем ненужные для нашего оборудования модули и скрипты.
  • отключаем ненужные сервисы

Выкидываем лишнее из initramfs

дописываем в конец конфигурационного файла dracut:

и перегенерим наш initrd:

Некоторые опции ядра

в файле /etc/default/grub находим параметр GRUB_CMDLINE_LINUX_DEFAULT и приводим его к такому виду:

теперь необходимо перегенерить конфиг груба:

Ускоряем запуск userspace

Примечание
Эффект от службы readahead проявится после нескольких (обычно 2-3) перезагрузок.

Если у Вас выделен на отдельный раздел /home то имеет смысл к опциям его монтирования в файле /etc/fstab добавить такие строки noauto,x-systemd.automount

А дальше отключаем кучу ненужных сервисов:

Примечание
Некоторые сервисы Вам могут быть необходимы. Например, при использовании "легких" оконных сред (LXDE, XFCE) вам может понадобиться acpid.

Избавляемся от GRUB

Если у Вас ROSA стоит как единственная система, то видеть меню выбора загрузки вовсе не обязательно т.к. выбирать там особо нечего, а это все драгоценные секунды. И еще, такой фокус возможен только если у Вас EFI загрузка.

копируем Ваше ядро и initrd на раздел EFI (по умолчанию он должен быть смонтирован в /boot/efi)

И добавляем пункт загрузки в BIOS:

  • --part 1 - это тот самый раздел который смонтирован в /boot/efi/
  • наш диск /dev/sda имеет разделы GPT (в принципе это все дефолтовые параметры при установке системы на чистый носитель)
  • тут мы копируем текущее загруженное ядро. Если нужно загрузить другую версию ядра то строку $(uname -r) замените на нужную Вам версию.
Примечание
Эти шаманства придется проделывать каждый раз при обновлении ядра. И у Вас будет отсутствовать возможность выбрать загрузку другой системы, но такая возможность останется через настройки BIOS. Если система работает с включённым Secure Boot, то его придётся отключить, так как ядро не содержит необходимой подписи.

Циферки говорят сами за себя:

Startup finished in 937ms (kernel) + 974ms (initramfs) + 2887ms (userspace) = 4800ms

Сегодня я обнаружил что Linux mint 18 стал грузиться медленнее чем Linux mint 17. Что не очень хорошо для моего ноутбука. Я выяснил что это связано с ненужными службами, приложениями, визуальными эффектами. Существует множество оптимизаций, позволяющих повысить скорость работы дистрибутива Linux Mint.

В этой статье мы рассмотрим как выполняется оптимизация Linux Mint. Я покажу только максимально безопасные. Проверял их сам на Toshiba Satelite l20 - 101 с Linux Mint 18.1 xfce и на компьютере HP Elite 7200 c linux mint 18.1 MATE. Перед дальнейшими инструкциями установите все обновления, чтобы не возникло ненужных ошибок.

Оптимизация Linux Mint

1. Оперативная память

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

Вначале надо проверить величину этого параметра. Откройте терминал - ctrl + alt + t и выполните команду:

Должно быть число 60. Дальше надо установить приложения gksu и leafpad. Можно через Synaptic или Терминал. В терминале используйте команду, она запросит ваш пароль

sudo apt install gksu leafpad

Установим новое значение параметра. Перейдите по пути /etc/ и откройте файл sysctl.conf текстовым редактором, либо командой:

gksudo leafpad /etc/sysctl.conf


В конце надо будет добавить vm.swappiness=10. Сохраните файл и перезагрузите ваш Компьютер / Ноутбук.

2. Настройка кэша inode

Только для ПК с 1 гб и больше так как это оптимизация приведет к долгому хранению системных файлов в оперативной памяти. Откройте файл /etc/sysctl.conf:

gksudo leafpad /etc/sysctl.conf

Опуститесь вниз файла и добавьте эту строчку в конце:

3. Настройка zram

Только ПК с оперативной памятью 768 Мб или больше. Внимание это может привести к нестабильной работе всей системы! Сделайте бэкап данных.

Работа данной оптимизации:

  • Центральный процессор вашего компьютера (CPU) будет использоваться более интенсивно, так как будут осуществляться постоянные сжатие и распаковка данных;
  • Если система полностью заполнит файл подкачки в оперативной памяти, она начнет дополнительно использовать классический раздел подкачки на жестком диске. При этом она также может переместить в этот раздел часть файла подкачки из оперативной памяти, что еще более замедлит ее работу;
  • На данный момент рассматриваемый модуль все еще является экспериментальным, поэтому реализованный в рамках него дополнительный уровень хранения данных может снизить стабильность работы системы.

Нужен пакет zram-config. Можете через synaptic, но я больше люблю использовать терминал.

sudo apt install zram-config

Перезагрузите ПК после установки. Можно командой:

Надо проверить работу данного модуля:

Должен появится отчёт о разделах на /dev/zram. Если система стала работать неправильно или zram вам уже не нужен, то делаем следующее:

sudo apt purge zram-config

Если у вас мало оперативной памяти, то вы точно заметите ускорение Linux Mint 18. Подробнее про настройку zram в linux написано в другой статье.

4. Отключение индексации

Как и в Windows, в Linux есть приложение для ускорения поиска, которое также тормозит работу системы. Данное приложение удалить полностью через synaptic нельзя. Он удалит лишь его часть. Следовательно надо использовать терминал.

sudo apt purge apt-xapian-index

Перезагрузите ПК для окончания применения изменений.

5. Оптимизация LibreOffice

Как всем известно, java имеет очень медленный компилятор. Скорость запуска LibreOffice повысилась раза в 3 после отключения java. Но она стоит там не просто так. Некоторые функции требуют java. Так что если вам они нужны то не отключайте. Откройте приложение Writer.

Зайдите в меню Сервис — Параметры LibreOffice — Расширенные возможности» и убрать флажок «Использовать виртуальную машину Java». Включить поддержку можно в любой момент просто вернув галочку в том поле:




6. Настройка автозагрузки

В Wndows это msconfig, а в Linux есть несколько способов решения этой задачи. Автозапуск сильно замедляет как и запуск системы, так и работу в целом. Часть программ настраивается через графический интерфейс - Меню - Параметры - Автозапуск. В XFCE это Сеансы и запуск. Но там не все службы. Далее, я буду писать зачем нужна каждая из служб, которые я буду отключать и как их отключить через терминал. Сначала смотрим скорость загрузки системы:

$ sudo systemctl disable служба

$ sudo systemctl enable служба

avahi-daemon.service - это процесс для обнаружения ПК в домене .local. Если у вас один пк в домашней сети или у вас нет домена .local. То можно смело отключать:

sudo systemctl disable avahi-daemon.service

cgmanager.service - предназначен для управления cgroup. Служба нужна только людям использующих контейнер LXC. Этот контейнер позволяет создавать виртуальные машины почти без потерь производительности. Но я не использую виртуализацию. Отключаю:

sudo systemctl disable cgmanager.service

cups-browsed.service – это служба для принтеров. Сейчас у меня нет принтера, но если появится я просто включу эту службу.

sudo systemctl disable cgmanager.service

geoclue.service – это служба, которая отправляет вашу геолокацию приложениям. Без каких-либо вопросов отключаем:

sudo systemctl disable geoclue.service

Службы vm2-lvmetad и lvm2-monitor относятся к службам управления логическими томами (LVM – Logical Volume Management). Если вы не используете логические тома то можно отключать. Если при установке вы выбрали автоматическую, то у вас все первичные.

sudo systemctl disable vm2-lvmetad.service

sudo systemctl disable lvm2-monitor.service

Результаты выполнения может быть таким:

Failed to execute operation: No such file or directory и

Removed symlink /etc/systemd/system/sysinit.target.wants/lvm2-monitor.service

ModemManager.service – это интерфейс, позволяющий реализовать подключение к сети интернет, используя мoдемы, каналы связи (2G/3G/4G/CDMA). У меня вообще шнур так что отключаю.

sudo systemctl disable ModemManager.service

speech-dispatcher.service - это унифицированный API, который имеет предназначение для изменения порядка вызова синтезатора, так же позволяет предотвратить наложения звука при нескольких приложениях, использующих звук. Я не планирую включать сразу штук 8 песен. Так что отключаю:

sudo systemctl disable speech-dispatcher.service

ssh.service - это сервис удаленного управления системой через терминал. Я таким не пользуюсь => отключаем.

sudo systemctl disable ssh.service

ufw.service – служба межсетевого экрана. Это брандмауэр. Мне он нужен, но многим нет. Будем не отключать а удалять. Через Synaptic или терминал.


sudo apt purge ufw

Я перечислил все службы, которые можно отключить безболезненно для системы. Теперь перезагрузка и тест скорости. После отключения служб вы точно заметите ускорение работы linux mint.

Читайте подробнее про ускорение загрузки Linux в отдельной статье.

7. Настройка окружения

Визуальные эффекты делают систему красивой. Если вы любите MacOS вам не пережить их отключение. Те, кто пользовался Windows 7 aero знают как это всё тормозит.

Linux Mint Cinnamon: для начала необходимо открыть: «Меню — Параметры системы — Эффекты» и отключить все эффекты в открывшемся окне. Далее, необходимо открыть: «Меню — Параметры системы — Общие» и активировать переключатель в пункте списка «Отключить композитинг для полноэкранных окон».

Linux Mint Mate: откройте «Меню — Настройки — Окна», перейдите на вкладку «Общие» открывшегося окна и уберите флажок «Включить композитный менеджер».

Linux Mint Xfce: необходимо «Меню — Параметры рабочего стола» и изменить оконный менеджер с «Xfwm4 + Compositing» на «Xfwm4».

Не забудьте поставить фоном один сплошной цвет.

8. Браузеры

Каждое дополнительное расширение для firefox и chromium замедляют его запуск и работу. удалите ненужные вам. Например, вместо онлайн читалки поставить локальную программу.

Теперь конкретно про firefox. В первую очередь следует ввести в адресную строку веб-браузера about:config и нажать клавишу Enter. Далее, нужно нажать на кнопку Я принимаю на себя риск!.

Вам следует ввести в поле поиска на открывшейся странице запрос sessionstore и использовать двойной клик для редактирования значения параметра browser.sessionstore.interval. По умолчанию он имеет значение 15000, соответствующее 15 секундам. Вы можете добавить к значению несколько нулей таким образом, чтобы оно превратилось в значение 15000000 и нажать на кнопку OK для сохранения изменений.

Далее, переключите эти параметры в положение false:

  • browser.sessionstore.restore_on_demand
  • browser.sessionstore.resume_from_crash
  • services.sync.prefs.sync.browser.sessionstore.restore_on_demand

Осталось закрыть все окна веб-браузера Firefox и перезапустить его.

9. Очистка Linux Mint

В Linux, как и в Windows скапливается мусор. Но в отличие от Windows у него нет реестра, что даёт возможность удалить весь мусор.

sudo apt autoclean

sudo apt autoremove

Не забудьте удалить ненужные программы. Например, мне не нужен VLC когда стоит dragon player.

sudo apt purge vlc

10. Установка драйверов

Многие забывают поставить нужные драйвера и устройства используются не на максимум своих возможностей. Например, у меня не было драйвера процессора. Откройте меню и впишите драйвера. Я заменил свободный драйвер nvidia на проприетарный. Все стало гораздо быстрее.



11. Оптимизация tmp

Если у вас много оперативной памяти можно ещё больше ускорить систему с помощью перемещения файлов с жесткого диска на виртуальный раздел в оперативной памяти. Откройте терминал.

sudo cp -v /usr/share/systemd/tmp.mount /etc/systemd/system/

sudo systemctl enable tmp.mount

systemctl status tmp.mount

Если вам он больше не нужен просто удалите его:

sudo rm -v /etc/systemd/system/tmp.mount

12. Оптимизация wifi

Оптимизация Linux Mint также может включать ускорение wifi. Узнаем как названа ваша сетевая карта в системе:

Затем вы сможете узнать название. Например, wlp2s0. Отключим энергосбережение.

gksudo xed /etc/NetworkManager/conf.d/default-wifi-powersave-on.conf

Теперь сохраняем документ и перезагружаем ПК. Выполните команду для проверки:

Если появилась надпись Power management:off то вы все настроили. Для сетевых карт intel есть особый способ ускорения, поскольку система для неё использует драйвер iwlwifi. Нужно активировать функцию Tx AMPDU.

Функция AMPDU предназначена для ускорения передачи данных путем объединения нескольких наборов данных друг с другом. До версии 18.1 включалась автоматически, но была убрана из-за проблемных чипсетов.

В первую очередь следует убедиться в том, что для взаимодействия с чипсетом вашей беспроводной сетевой карты используется именно драйвер iwlwifi.

lsmod | grep iwlwifi

Если появилась строка «iwlwifi» то можно продолжать.

echo "options iwlwifi 11n_disable=8" | sudo tee /etc/modprobe.d/iwlwifi11n.conf

Теперь нужно перезагрузить ПК. Перед перезагрузкой запишите себе эту команду:

sudo rm -v /etc/modprobe.d/iwlwifi11n.conf

Она нужна для отката изменений если сеть не будет работать.

Выводы

Теперь вы знаете как выполняется ускорение Linux Mint 18. Я очень надеюсь что помог другим пользователям. Пишите в комментариях вашу скорость запуска и скорость работы после проделанных изменений. Насколько вам помогла оптимизация Linux Mint 18 по сравнению с тем, как было раньше?

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

Но порой система инициализации выполняет много лишних задач во время загрузки, иногда некоторые сервисы ожидают загрузки других и завершаются только по таймауту через некоторое время. В таких случаях система может загружаться до нескольких минут. В этой статье мы рассмотрим как ускорить загрузку Linux, что нужно для этого настроить, что удалить. А также немного поговорим о процессе загрузки. Мы сосредоточимся на системе инициализации systemd.

Как проходит загрузка Linux

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

На то как BIOS тестирует устройства и запускает загрузчик мы повлиять не можем. Работу загрузчика тоже ускорить не получится, можно только убрать ожидание выбора пункта меню.

Но самое интересное начинается дальше. Перед тем как начать загрузку системы ядро выполняет несколько проверок, загружает модули и так далее. Не все проверки нужно выполнять и не все модули нам нужны.

После того как ядро передало управление системе инициализации, начинается монтирование дисков. Это тоже отнимает время, лучше не использовать виртуальные разделы дисков, например, raid или lvm, да и вообще, чем меньше разделов - тем лучше. Идеальный вариант - только корневой раздел, тогда скорость загрузки linux будет максимальной. Но это очень невыгодный в плане удобства вариант, поэтому найдите золотую серединку. Перед тем как примонтировать каждый диск, система инициализации пытается проверить файловую систему на ошибки, это тоже замедляет загрузку.

Загрузка сервисов отнимает больше всего времени и больше всего работы придется проделать здесь, определить какие сервисы не нужны и отключить их также скрыть те сервисы, которые отключить нельзя. Чтобы понять что именно отключать нам нужно знать сколько времени занимает загрузка каждого сервиса. Давайте рассмотрим анализ скорости загрузки systemd.

Анализ загрузки Systemd

Анализ скорости загрузки системы важен не только в самом процессе оптимизации, но и для того, чтобы оценить насколько эта оптимизация удалась. Перед и после оптимизации нужно замерять время загрузки, чтобы понять чего мы смогли добиться.

Давайте посмотрим насколько быстро грузится наша система сейчас:

systemd

Да, здесь 17 секунд, не так уж плохо, но будет еще лучше после завершения ускорения загрузки. На загрузку ядра уходит 5.405, а на все остальные сервисы 11.611. Чтобы понять какие именно сервисы замедляют систему нам нужна более подробная информация, мы можем ее получить с помощью параметра blame:

systemd1

У нас есть список сервисов, которые загружаются дольше всего, но этот список ни о чем нам не говорит, потому что в Systemd параллельная загрузка сервисов. Если бы во время загрузки была какая-нибудь проблема, мы бы ее увидели, но проблем здесь нет. Нам нужен более детализованный график с указанием не только времени загрузки сервиса, но и с отображением параллельных загрузок и мы можем его получить командой:

systemd-analyze plot > graph.svf

Утилита сгенерирует svf файл с графиком, откройте его в браузере:

systemd2

Вот теперь у нас есть вся информация, чтобы оптимизировать систему. Здесь отображается не только время загрузки каждого сервиса, но также время когда он начал загружаться и когда завершил. Дальше начнем ускорение загрузки Linux.

Ускорение загрузки Linux

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

Настраивать Grub будем правильно. Параметры загрузки ядра находятся в файле /etc/default/grub, а именно в строчке GRUB_CMDLINE_LINUX_DEFAULT. Откройте этот файл:

Теперь приводим интересующую нас строчку к такому состоянию:

GRUB_CMDLINE_LINUX_DEFAULT="quiet rootfstype=ext4 libahci.ignore_sss=1 raid=noautodetect selinux=0 plymouth.enable=0 lpj=12053560"

Разберем подробнее за что отвечает каждый параметр:

  • quiet - вывод, это долго, поэтому говорим ядру что на экран нужно выводить минимум информации
  • rootfstype=ext4 - указываем в какую файловую систему отформатирован корень. У меня ext4.
  • libahci.ignore_sss=1 - Ignore staggered spinup flag, ускоряет загрузку жестких дисков
  • raid=noautodetect - raid я не использую, думаю вы тоже поэтому отключаем.
  • selinux=0 - система полномочий selinux на домашней машине тоже ни к чему, без нее будет быстрее.
  • plymouth.enable=0 - заставка plymouth тоже занимает много времени, поэтому убираем заставку
  • lpj=12053560 - позволяет задать константу loops_per_jiffy, что позволит ядру не вычислять ее каждый раз и сэкономит до 250 миллисекунд. Это значение индивидуально для каждого компьютера.

Чтобы узнать значение последнего параметра выполните:

dmesg | grep 'lpj='

systemd3

Нас будет интересовать значение lpj=, укажите его в своем конфигурационном файле.

Также для указания корневого раздела желательно не использовать всякие там UUID, быстрее будет если написать прямо. Для того чтобы конфигуратор grub не использовал grub добавьте в тот же файл строчку:

Сохраните файл и обновим конфигурацию grub:

Проверяем, действительно ли установлены нужные опции:

systemd5

Да, все правильно, перезагружаем компьютер, и смотрим что вышло:

systemd4

Почти на одну секунду быстрее, и то хорошо. Возможно, у вас эффект будет намного лучше. Теперь идем разбираться с сервисами.

Настройка системы

Во-первых SELinux отключен не полностью. Для полного отключения добавляем строку в файл /etc/selinux/config:

sudo vi /etc/selinux/config

Во-вторых, проверка файловых систем тоже может занять некоторое время. Оставляем проверку на ошибки только для корня. Для этого откройте файл /etc/fstab и приведите строчку для корня к такому виду:

/dev/sda3 / ext4 defaults 1 1

Последний параметр отвечает за проверку, 1 - проверять, 0 - не проверять. Установите для всех других разделов 0. К тому же boot раздел лучше монтировать по требованию. Для этого изменяем его запись:

/dev/sda1 /boot ext4 noauto,comment=systemd.automount 1 0

Затем давайте перенесем папку /tmp в оперативную память, чтобы уменьшить количество операций на жестком диске:

tmpfs /tmp tmpfs defaults 0 0

Ускорение загрузки Linux отключением сервисов

Вот мы и добрались к сервисам. Оптимизация сервисов заключается в том, чтобы отключить лишнее, а также использовать только возможности, встроенные в systemd, так будет быстрее. Сначала перенесем всю функциональность на systemd.

Первым отключим rsyslog. В systemd используется свой механизм записи логов journald, поэтому вести еще один не нужно. Для отключения выполните:

sudo systemctl disable rsyslog
$ sudo systemctl mask rsyslog

Опция mask позволяет спрятать юнит, система будет думать что его не существует и не сможет загрузить. Восстановить такой юнит можно командой systemctl unmask.

В systemd реализована своя служба настройки сети - networkd, поэтому необязательно использовать NetworkManager. Работа со встроенной службой будет намного быстрее. Здесь нужно заметить, что если вы используете wifi и не хотите настраивать его вручную, через консоль, то отключать NetworkManager не стоит.

Отключаем NetworkManager и включаем networkd:

sudo systemctl disable NetworkManager
sudo systemctl enable systemd-networkd

Службу networking тоже можно отключить, если не используете:

sudo systemctl disable networking

Включаем resolved, который отвечает за настройку DNS серверов:

sudo systemctl enable systemd-resolved
sudo systemctl start systemd-resolved

Даем символическую ссылку на файл /etc/resolv.conf

sudo rm /etc/resolv.conf
sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf

Осталось настроить динамическое получение ip адреса при загрузке:

[Match]
Name=enp*
[Network]
DHCP=yes

enp0* значит, что сеть нужно подымать только для устройств, имена которых начинаются на enp0. Готово, сеть настроена.

В systemd есть свое решение для выполнения задач по расписанию, поэтому cron можно не использовать:

sudo systemctl disable cron

С заменой разобрались, перейдем к удалению лишнего. Отключаем фаервол, на домашней машине, за маршрутизатором он не нужен:

sudo systemctl disable ufw
$ sudo systemctl mask ufw

Отключаем apport (служба отчетов об ошибках):

sudo systemctl disable apport

Я не использую ppp и мобильные соединения, поэтому и эти сервисы можно отключить.

sudo systemctl disable pppd-dns
sudo systemctl mask pppd-dns

sudo systemctl disable ModemManager
sudo systemctl mask ModemManager

Если вы не используете Avahi, его тоже можно отключить:

sudo systemctl disable avahi-daemon

Систему AppArmor тоже можно отключить:

sudo systemctl disable apparmor

Также если у вас загружаются такие программы, как postfix (почтовый сервер), apache (веб-сервер), mysql (сервер баз данных) лучше их тоже убрать из автозагрузки и запускать потом вручную.

Перезагружаемся и проверяем скорость загрузки:

systemd7

У меня скорость загрузки linux выросла на пять секунд. Но это нормально, учитывая, что используется VirtualBox, на реальной машине можно получить и больше. А самая лучшая оптимизация - купить SSD, там можно достичь даже скорости загрузки до двух-трех секунд.

Выводы

Вот и все, в этой статье мы рассмотрели как ускорить загрузку Linux. Если у вас долго грузится Linux вы уже знаете что нужно делать. Если вы знаете другие способы ускорить загрузку Linux, напишите в комментариях!

На Конференции «Сантехников» Линукс (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 секунд

Рис. 1

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

Рис. 1

Рис. 2

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

Рис. 2

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

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

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

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

Рис. 3

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

Рис. 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.

Рис. 4

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

Рис. 4

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

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

Рис. 5

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

Рис. 5

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

Читайте также: