Ускорение загрузки — различия между версиями

Материал из Rosalab Wiki
Перейти к: навигация, поиск
(Ускоряем запуск userspace)
 
(не показано 13 промежуточных версий 7 участников)
Строка 1: Строка 1:
 +
== ПРЕДУПРЕЖДЕНИЕ ==
 +
 +
Нижеприведённый текст рассчитан дать представление о возможностях тонкой настройки и оптимизации системы. Бездумные действия могут привести к неожиданным результатам.
 +
 
== Чем замеряем ==
 
== Чем замеряем ==
  
Строка 25: Строка 29:
 
* не используем софтрейд
 
* не используем софтрейд
 
* не используем разделы LVM
 
* не используем разделы LVM
* отключаем и выкидываем не нужные для нашего оборудования модули и скрипты.
+
* отключаем и выкидываем ненужные для нашего оборудования модули и скрипты.
* отключаем не нужные сервисы
+
* отключаем ненужные сервисы
  
 
== Выкидываем лишнее из initramfs ==
 
== Выкидываем лишнее из initramfs ==
Строка 51: Строка 55:
  
 
<pre>
 
<pre>
grub2-mkconfig > /boot/grub2/grub.cfg
+
update-grub2
 
</pre>
 
</pre>
  
Строка 103: Строка 107:
  
 
{{Примечание|Некоторые сервисы Вам могут быть необходимы. Например, при использовании "легких" оконных сред (LXDE, XFCE) вам может понадобиться acpid.}}
 
{{Примечание|Некоторые сервисы Вам могут быть необходимы. Например, при использовании "легких" оконных сред (LXDE, XFCE) вам может понадобиться acpid.}}
 +
 +
 +
== Избавляемся от GRUB ==
 +
 +
Если у Вас ROSA стоит как единственная система, то видеть меню выбора загрузки вовсе не обязательно т.к. выбирать там особо нечего, а это все драгоценные секунды.
 +
И еще, такой фокус возможен только если у Вас EFI загрузка.
 +
 +
Начнем
 +
 +
копируем Ваше ядро и initrd на раздел EFI (по умолчанию он должен быть смонтирован в /boot/efi)
 +
<pre>
 +
cp /boot/vmlinuz-$(uname -r) /boot/efi/EFI/rosa/
 +
cp /boot/initrd-$(uname -r).img /boot/efi/EFI/rosa/
 +
</pre>
 +
 +
И добавляем пункт загрузки в BIOS:
 +
 +
<pre>
 +
efibootmgr --create --gpt --disk /dev/sda --part 1 \
 +
          --write-signature --label "ROSA Linux (kernel-$(uname -r))" \
 +
          --loader "\EFI\rosa\vmlinuz-$(uname -r)" \
 +
          -u "$(cat /proc/cmdline) initrd=/EFI/rosa/initrd-$(uname -r).img"
 +
</pre>
 +
 +
 +
 +
Где:
 +
* --part 1 - это тот самый раздел который смонтирован в /boot/efi/
 +
* наш диск /dev/sda имеет разделы GPT (в принципе это все дефолтовые параметры при установке системы на чистый носитель)
 +
* тут мы копируем текущее загруженное ядро. Если нужно загрузить другую версию ядра то строку $(uname -r) замените на нужную Вам версию.
 +
 +
{{Примечание|Эти шаманства придется проделывать каждый раз при обновлении ядра. И у Вас будет отсутствовать возможность выбрать загрузку другой системы, но такая возможность останется через настройки BIOS. Если система работает с включённым Secure Boot, то его придётся отключить, так как ядро не содержит необходимой подписи. }}
  
 
== Итог: ==
 
== Итог: ==
Строка 109: Строка 145:
  
 
'''Startup finished in 937ms (kernel) + 974ms (initramfs) + 2887ms (userspace) = 4800ms'''
 
'''Startup finished in 937ms (kernel) + 974ms (initramfs) + 2887ms (userspace) = 4800ms'''
 +
 +
[[Category:Установка и настройка]]

Текущая версия на 16:10, 11 октября 2017

ПРЕДУПРЕЖДЕНИЕ

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

Чем замеряем

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

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

urpmi systemd-tools

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

systemd-analyze plot > ~/default.svg

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

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

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

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

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

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

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

echo 'omit_dracutmodules+="i18n plymouth resume"' >> /etc/dracut.conf.d/50-dracut-rosa.conf

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

dracut -f /boot/initrd-$(uname -r).img

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

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

GRUB_CMDLINE_LINUX_DEFAULT='splash=silent logo.nologo quiet nouveau.modeset=0 rootfstype=ext4 plymouth.enable=0'

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

update-grub2

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

Включим профилировщик:

systemctl enable systemd-readahead-collect.service systemd-readahead-replay.service
systemctl start systemd-readahead-collect.service systemd-readahead-replay.service
Idea.png
Примечание
Эффект от службы readahead проявится после нескольких (обычно 2-3) перезагрузок.

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

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

systemctl disable mysqld.service
systemctl disable polkit.service
systemctl disable acpid.service
systemctl disable apmd.service
systemctl disable console-kit-daemon.service
systemctl disable wine.service
systemctl disable mdadm.service
systemctl mask mdadm.service
systemctl mask systemd-ask-password-plymouth.path
systemctl mask plymouth-start.service
systemctl disable laptop-mode.service
systemctl disable bluetooth.service
systemctl disable wpa_supplicant.service
systemctl mask mandrake_everytime.service
systemctl mask mysqld.service
systemctl mask dev-hugepages.mount
systemctl mask fedora-storage-init-late.service
systemctl mask fedora-storage-init.service
systemctl mask console-kit-log-system-start.service
systemctl disable lm_sensors.service
systemctl mask systemd-vconsole-setup.service
systemctl disable rpcbind.service
systemctl disable autofs.service
systemctl mask partmon.service
systemctl mask plymouth-read-write.service
systemctl disable rsyslog.service
systemctl disable postfix.service
systemctl mask avahi-daemon.service
systemctl mask sys-kernel-debug.mount
systemctl mask mandriva-save-dmesg.service
systemctl mask mandriva-kmsg-loglevel.service
Idea.png
Примечание
Некоторые сервисы Вам могут быть необходимы. Например, при использовании "легких" оконных сред (LXDE, XFCE) вам может понадобиться acpid.


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

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

Начнем

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

cp /boot/vmlinuz-$(uname -r) /boot/efi/EFI/rosa/
cp /boot/initrd-$(uname -r).img /boot/efi/EFI/rosa/

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

efibootmgr --create --gpt --disk /dev/sda --part 1 \
           --write-signature --label "ROSA Linux (kernel-$(uname -r))" \
           --loader "\EFI\rosa\vmlinuz-$(uname -r)" \
           -u "$(cat /proc/cmdline) initrd=/EFI/rosa/initrd-$(uname -r).img"


Где:

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

Итог:

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

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