загрузка: восстановление и оптимизация

Вопросы программного кода и архитектуры Linux

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 13913
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: загрузка: восстановление и оптимизация

Непрочитанное сообщение Olej » 25 окт 2019, 20:00

Olej писал(а):
25 окт 2019, 16:00
И здесь как-раз возникает большая необходимость в анализе загрузки ... а заодно, по случаю, оптимизацияя загрузки под свои конкретные условия (например, приостановка сервисов которые не используются).
С задержками загрузки, после изменений swap раздела, возникающими в 2-х разных аспектах (запись в /etc/fstab + в сгенерированном initramfs), разобрались.

А вот с сервисами по минимуму под конкретный компьютер хочу посмотреть...
Вот что видит на этот счёт systemd:

Код: Выделить всё

olej@ACER:~/2019_WORK/HISTORY/10/25$ sudo systemctl list-units --type service | grep running
accounts-daemon.service                                                                   loaded active running Accounts Service                                                           
alsa-state.service                                                                        loaded active running Manage Sound Card State (restore and store)                                
apache2.service                                                                           loaded active running The Apache HTTP Server                                                     
avahi-daemon.service                                                                      loaded active running Avahi mDNS/DNS-SD Stack                                                    
colord.service                                                                            loaded active running Manage, Install and Generate Color Profiles                                
cron.service                                                                              loaded active running Regular background program processing daemon                               
cups-browsed.service                                                                      loaded active running Make remote CUPS printers available locally                                
cups.service                                                                              loaded active running CUPS Scheduler                                                             
dbus.service                                                                              loaded active running D-Bus System Message Bus                                                   
getty@tty1.service                                                                        loaded active running Getty on tty1                                                              
gpm.service                                                                               loaded active running LSB: gpm sysv init script                                                  
haveged.service                                                                           loaded active running Entropy daemon using the HAVEGE algorithm                                  
irqbalance.service                                                                        loaded active running irqbalance daemon                                                          
lightdm.service                                                                           loaded active running Light Display Manager                                                      
ModemManager.service                                                                      loaded active running Modem Manager                                                              
mpd-sima.service                                                                          loaded active running MPD_sima autoqueue utility                                                 
NetworkManager.service                                                                    loaded active running Network Manager                                                            
nscd.service                                                                              loaded active running Name Service Cache Daemon                                                  
ntp.service                                                                               loaded active running Network Time Service                                                       
osspd.service                                                                             loaded active running OSS Proxy Daemon                                                           
polkit.service                                                                            loaded active running Authorization Manager                                                      
rsyslog.service                                                                           loaded active running System Logging Service                                                     
rtkit-daemon.service                                                                      loaded active running RealtimeKit Scheduling Policy Service                                      
smartd.service                                                                            loaded active running Self Monitoring and Reporting Technology (SMART) Daemon                    
ssh.service                                                                               loaded active running OpenBSD Secure Shell server                                                
systemd-journald.service                                                                  loaded active running Journal Service                                                            
systemd-logind.service                                                                    loaded active running Login Service                                                              
systemd-udevd.service                                                                     loaded active running udev Kernel Device Manager                                                 
udisks2.service                                                                           loaded active running Disk Manager                                                               
unattended-upgrades.service                                                               loaded active running Unattended Upgrades Shutdown                                               
upower.service                                                                            loaded active running Daemon for power management                                                
user@1000.service                                                                         loaded active running User Manager for UID 1000                                                  
wpa_supplicant.service                                                                    loaded active running WPA supplicant                                                             

olej@ACER:~/2019_WORK/HISTORY/10/25$ sudo systemctl list-units --type service | grep running | wc -l
33
А вот что видит в старом стиле sysinit:

Код: Выделить всё

olej@ACER:~$ /sbin/service --status-all | grep [+]
 [ + ]  apache2
 [ + ]  apparmor
 [ + ]  avahi-daemon
 [ + ]  binfmt-support
 [ + ]  cron
 [ + ]  cups
 [ + ]  cups-browsed
 [ + ]  dbus
 [ + ]  gpm
 [ + ]  haveged
 [ + ]  hddtemp
 [ + ]  irqbalance
 [ + ]  kmod
 [ + ]  lightdm
 [ + ]  lm-sensors
 [ + ]  mpd-sima
 [ + ]  network-manager
 [ + ]  nscd
 [ + ]  ntp
 [ + ]  openvpn
 [ + ]  osspd
 [ + ]  procps
 [ + ]  rsyslog
 [ + ]  smartmontools
 [ + ]  ssh
 [ + ]  udev
 [ + ]  unattended-upgrades

olej@ACER:~$ /sbin/service --status-all | grep [+] | wc -l
27
Сразу добавлю, что из стандартного (установочного) набора Debiam мной уже исключены (остановлены):
apt-daily-upgrade.service, apt-daily.service, exim4.service, mariadb.service
И наоборот, мной добавлены сервисы:
ntp.service, smartd.service, ssh.service

Аватара пользователя
Olej
Писатель
Сообщения: 13913
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: загрузка: восстановление и оптимизация

Непрочитанное сообщение Olej » 25 окт 2019, 22:55

Olej писал(а):
25 окт 2019, 20:00
А вот с сервисами по минимуму под конкретный компьютер хочу посмотреть...
Как мне кажется, я в своих условиях вполне могу убрать сервисы:

Код: Выделить всё

olej@ACER:~/2019_WORK/HISTORY/10/22$ sudo systemctl status cron
● cron.service - Regular background program processing daemon
   Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2019-10-25 17:15:40 EEST; 5h 31min ago
     Docs: man:cron(8)
 Main PID: 870 (cron)
    Tasks: 1 (limit: 4915)
   Memory: 1.3M
   CGroup: /system.slice/cron.service
           └─870 /usr/sbin/cron -f

окт 25 22:09:01 ACER CRON[10818]: pam_unix(cron:session): session closed for user root
окт 25 22:17:01 ACER CRON[10950]: pam_unix(cron:session): session opened for user root by (uid=0)
окт 25 22:17:01 ACER CRON[10951]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
окт 25 22:17:01 ACER CRON[10950]: pam_unix(cron:session): session closed for user root
окт 25 22:30:01 ACER CRON[11150]: pam_unix(cron:session): session opened for user root by (uid=0)
окт 25 22:30:01 ACER CRON[11151]: (root) CMD ([ -x /etc/init.d/anacron ] && if [ ! -d /run/systemd/system ]; then /usr/sbin/invoke-rc.d anacron s
окт 25 22:30:01 ACER CRON[11150]: pam_unix(cron:session): session closed for user root
окт 25 22:39:01 ACER CRON[11797]: pam_unix(cron:session): session opened for user root by (uid=0)
окт 25 22:39:01 ACER CRON[11798]: (root) CMD (  [ -x /usr/lib/php/sessionclean ] && if [ ! -d /run/systemd/system ]; then /usr/lib/php/sessioncle
окт 25 22:39:01 ACER CRON[11797]: pam_unix(cron:session): session closed for user root

olej@ACER:~/2019_WORK/HISTORY/10/22$ sudo systemctl stop cron

olej@ACER:~/2019_WORK/HISTORY/10/22$ sudo systemctl desable cron
Unknown operation desable.

olej@ACER:~/2019_WORK/HISTORY/10/22$ sudo systemctl disable cron
Synchronizing state of cron.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable cron
Removed /etc/systemd/system/multi-user.target.wants/cron.service.

olej@ACER:~/2019_WORK/HISTORY/10/22$ sudo systemctl mask cron
Created symlink /etc/systemd/system/cron.service → /dev/null.

Код: Выделить всё

olej@ACER:~/2019_WORK/HISTORY/10/22$ sudo systemctl status avahi-daemon
● avahi-daemon.service - Avahi mDNS/DNS-SD Stack
   Loaded: loaded (/lib/systemd/system/avahi-daemon.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2019-10-25 17:15:40 EEST; 5h 35min ago
 Main PID: 864 (avahi-daemon)
   Status: "avahi-daemon 0.7 starting up."
    Tasks: 2 (limit: 4915)
   Memory: 1.3M
   CGroup: /system.slice/avahi-daemon.service
           ├─864 avahi-daemon: running [ACER.local]
           └─907 avahi-daemon: chroot helper

окт 25 17:15:40 ACER avahi-daemon[864]: No service file found in /etc/avahi/services.
окт 25 17:15:40 ACER avahi-daemon[864]: Network interface enumeration completed.
окт 25 17:15:40 ACER avahi-daemon[864]: Server startup complete. Host name is ACER.local. Local service cookie is 2473315401.
окт 25 17:15:40 ACER systemd[1]: Started Avahi mDNS/DNS-SD Stack.
окт 25 17:15:43 ACER avahi-daemon[864]: Joining mDNS multicast group on interface enp2s0.IPv4 with address 192.168.1.103.
окт 25 17:15:43 ACER avahi-daemon[864]: New relevant interface enp2s0.IPv4 for mDNS.
окт 25 17:15:43 ACER avahi-daemon[864]: Registering new address record for 192.168.1.103 on enp2s0.IPv4.
окт 25 17:15:45 ACER avahi-daemon[864]: Joining mDNS multicast group on interface enp2s0.IPv6 with address fe80::c23f:d5ff:fe51:9a5b.
окт 25 17:15:45 ACER avahi-daemon[864]: New relevant interface enp2s0.IPv6 for mDNS.
окт 25 17:15:45 ACER avahi-daemon[864]: Registering new address record for fe80::c23f:d5ff:fe51:9a5b on enp2s0.*.

olej@ACER:~/2019_WORK/HISTORY/10/22$ sudo systemctl stop avahi-daemon
Job for avahi-daemon.service canceled.

olej@ACER:~/2019_WORK/HISTORY/10/22$ sudo systemctl disable avahi-daemon
Synchronizing state of avahi-daemon.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable avahi-daemon
Removed /etc/systemd/system/multi-user.target.wants/avahi-daemon.service.
Removed /etc/systemd/system/sockets.target.wants/avahi-daemon.socket.
Removed /etc/systemd/system/dbus-org.freedesktop.Avahi.service.

olej@ACER:~/2019_WORK/HISTORY/10/22$ sudo systemctl mask avahi-daemon
Created symlink /etc/systemd/system/avahi-daemon.service → /dev/null.

Код: Выделить всё

olej@ACER:~/2019_WORK/HISTORY/10/22$ sudo systemctl status apparmor
● apparmor.service - Load AppArmor profiles
   Loaded: loaded (/lib/systemd/system/apparmor.service; enabled; vendor preset: enabled)
   Active: active (exited) since Fri 2019-10-25 17:15:40 EEST; 5h 37min ago
     Docs: man:apparmor(7)
           https://gitlab.com/apparmor/apparmor/wikis/home/
 Main PID: 806 (code=exited, status=0/SUCCESS)
    Tasks: 0 (limit: 4915)
   Memory: 0B
   CGroup: /system.slice/apparmor.service

окт 25 17:15:40 ACER systemd[1]: Starting Load AppArmor profiles...
окт 25 17:15:40 ACER apparmor.systemd[806]: Restarting AppArmor
окт 25 17:15:40 ACER apparmor.systemd[806]: Reloading AppArmor profiles
окт 25 17:15:40 ACER apparmor.systemd[806]: Skipping profile in /etc/apparmor.d/disable: usr.bin.thunderbird
окт 25 17:15:40 ACER systemd[1]: Started Load AppArmor profiles.

olej@ACER:~/2019_WORK/HISTORY/10/22$ sudo systemctl disable apparmor
Synchronizing state of apparmor.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable apparmor
Removed /etc/systemd/system/sysinit.target.wants/apparmor.service.

olej@ACER:~/2019_WORK/HISTORY/10/22$ sudo systemctl mask apparmor
Created symlink /etc/systemd/system/apparmor.service → /dev/null.

Код: Выделить всё

olej@ACER:~/2019_WORK/HISTORY/10/22$ sudo systemctl status cups-browsed.service
● cups-browsed.service - Make remote CUPS printers available locally
   Loaded: loaded (/lib/systemd/system/cups-browsed.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2019-10-25 17:15:40 EEST; 5h 40min ago
 Main PID: 957 (cups-browsed)
    Tasks: 3 (limit: 4915)
   Memory: 3.8M
   CGroup: /system.slice/cups-browsed.service
           └─957 /usr/sbin/cups-browsed

окт 25 17:15:40 ACER systemd[1]: Started Make remote CUPS printers available locally.

olej@ACER:~/2019_WORK/HISTORY/10/22$ sudo systemctl stop cups-browsed.service

olej@ACER:~/2019_WORK/HISTORY/10/22$ sudo systemctl disable cups-browsed.service
Synchronizing state of cups-browsed.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable cups-browsed
Removed /etc/systemd/system/multi-user.target.wants/cups-browsed.service.

olej@ACER:~/2019_WORK/HISTORY/10/22$ sudo systemctl mask cups-browsed.service
Created symlink /etc/systemd/system/cups-browsed.service → /dev/null.

Аватара пользователя
Olej
Писатель
Сообщения: 13913
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: загрузка: восстановление и оптимизация

Непрочитанное сообщение Olej » 25 окт 2019, 23:53

Olej писал(а):
25 окт 2019, 22:55
Как мне кажется, я в своих условиях вполне могу убрать сервисы:
И теперь параметры загрузки выглядят так:

Код: Выделить всё

olej@ACER:~$ systemd-analyze
Startup finished in 4.743s (firmware) + 2.439s (loader) + 3.508s (kernel) + 4.594s (userspace) = 15.285s 
graphical.target reached after 4.583s in userspace

olej@ACER:~$ systemd-analyze critical-chain
The time after the unit is active or started is printed after the "@" character.
The time the unit takes to start is printed after the "+" character.

graphical.target @4.583s
└─multi-user.target @4.583s
  └─hddtemp.service @4.573s +9ms
    └─network-online.target @4.572s
      └─NetworkManager-wait-online.service @1.535s +3.036s
        └─NetworkManager.service @1.273s +258ms
          └─dbus.service @1.252s
            └─basic.target @1.181s
              └─sockets.target @1.181s
                └─uuidd.socket @1.181s
                  └─sysinit.target @1.172s
                    └─systemd-update-utmp.service @1.163s +9ms
                      └─systemd-tmpfiles-setup.service @1.120s +40ms
                        └─local-fs.target @1.117s
                          └─boot-efi.mount @1.104s +12ms
                            └─systemd-fsck@dev-disk-by\x2duuid-200C\x2d8B31.service @1.031s +71ms
                              └─dev-disk-by\x2duuid-200C\x2d8B31.device @978ms
Время загрузки снизилось не сильно, на ~1/2 сек. (там уже нечего сокращать), но это и не было целью.
Главное - освободить неиспользуемые ресурсы.

Аватара пользователя
Olej
Писатель
Сообщения: 13913
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: загрузка: восстановление и оптимизация

Непрочитанное сообщение Olej » 28 окт 2019, 16:41

Olej писал(а):
25 окт 2019, 17:22
15.5 секунд из которых запуск графического DE!
Характерно и интересно... это нужно отметить, что:

- systemd-analyze не включает в итоговое время задержки тайм-аут, указанный для автологина DM (lightdm) ... или оно считает время до временной точки графического запроса login? (я бы на их месте так и сделал ;-) ) - см. автологин при входе;

- но systemd-analyze полностью включает в итоговое время загрузки ту паузу меню загрузчика GRUB, которую вы допускаете на старте системы...

- вот результат, когда я практически мгновенно выбираю дефаултную позицию меню GRUB нажатием Enter:

Код: Выделить всё

olej@ACER:~$ systemd-analyze
Startup finished in 4.738s (firmware) + 2.403s (loader) + 3.455s (kernel) + 4.505s (userspace) = 15.103s 
graphical.target reached after 4.495s in userspace

- а вот другой результат, когда GRUB полностью выжидает свой указанный тайм-аут, и только после этого идёт в загрузку (ту же дефаултную):

Код: Выделить всё

olej@ACER:~$ systemd-analyze
Startup finished in 4.740s (firmware) + 6.028s (loader) + 3.492s (kernel) + 4.692s (userspace) = 18.953s 
graphical.target reached after 4.680s in userspace
- разница в том и другом случае - 4 сек., которые (примерно) и указаны как тайм-аут меню GRUB:

Код: Выделить всё

root@ACER:/etc/default# cat /etc/default/grub | grep TIMEOUT
GRUB_TIMEOUT=5

Это всё нужно знать при интерпретации результатов анализа времён загрузки!

Аватара пользователя
Olej
Писатель
Сообщения: 13913
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: загрузка: восстановление и оптимизация

Непрочитанное сообщение Olej » 19 июл 2020, 13:06

Дальше об оптимизации времени загрузки - на примере Mint 20, который после 6-7 лет обновлений (а не переустановок) оказался сильно перегружен сервисами ... да и вообще пакетами программ (накопленное ;-) ). Кроме того, там, по-старинке, ещё остались диски HDD, механические (хоть и хорошие по показателям), что замедляет все начальные процессы (и теперь, после SSD на всех остальных компьютерах, это уже кажется "слишком медленно" :lol: ).

Это обсуждение - продолжение того что было при обновлении Mint 20: Mint 20.
Но это всё применимо и к любому другому дистрибутиву Linux.

Аватара пользователя
Olej
Писатель
Сообщения: 13913
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: загрузка: восстановление и оптимизация

Непрочитанное сообщение Olej » 19 июл 2020, 13:18

Olej писал(а):
19 июл 2020, 13:06
Дальше об оптимизации времени загрузки
Некоторое улучшение времени загрузки (на 4-5 сек. ... но при общем времени 30-50 сек. это уже существенно) можно достичь такими трюками (не относящимися к сервисам):

1. Initramfs - это временная файловая система, использующаяся ядром при начальной загрузке.
Загрузчик загружает в память ядро и образ initramfs, и начальная загрузка системы происходит из этого образа. Соответственно, чем меньше лишнего в этом образе - тем быстрее будет загружаться система и тем меньше она будет требовать памяти на начальном этапе.
Вот "до того" ;-) :

Код: Выделить всё

olej@nvidia:~$ ls -l /boot/initrd.img-`uname -r`
-rw-r--r-- 1 root root 85969398 июл 16 19:45 /boot/initrd.img-5.4.0-40-generic
Нужно заменить в /etc/initramfs-tools/initramfs.conf строку MODULES=most на MODULES=dep:

Код: Выделить всё

olej@nvidia:~$ cat  /etc/initramfs-tools/initramfs.conf | grep MODULES=
#MODULES=most
MODULES=dep
MODULES=dep означает, что будет предпринята попытка вычислить минимально нужный, рабочий набор ФС и драйверов.
И в терминале вызываем перегенерацию загрузочных образов:

Код: Выделить всё

root@nvidia:/etc/initramfs-tools# update-initramfs -k all -u
update-initramfs: Generating /boot/initrd.img-5.4.0-40-generic
Warning: No support for locale: ru_RU.utf8
update-initramfs: Generating /boot/initrd.img-5.3.0-62-generic
Warning: No support for locale: ru_RU.utf8
Теперь стало:

Код: Выделить всё

olej@nvidia:~$ ls -l /boot/initrd.img-`uname -r`
-rw-r--r-- 1 root root 68560905 июл 19 12:41 /boot/initrd.img-5.4.0-40-generic
Видно, что загрузочный образ уменьшился около 25%.
В дальнейшем, при появлении новых ядер сборка initramfs будет происходит автоматически и не требовать дополнительных команд.

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

Код: Выделить всё

olej@nvidia:~$ cat /etc/fstab | grep /home
# /home was on /dev/sda2 during installation
#UUID=3ee8f840-4b98-4984-8ab2-b4aa4cb2db1e /home           ext4    defaults        0       2
UUID=3ee8f840-4b98-4984-8ab2-b4aa4cb2db1e /home           ext4    defaults        0       0
Последний параметр отвечает за проверку, 1 - проверять, 0 - не проверять. Установи для всех других разделов 0.

Аватара пользователя
Olej
Писатель
Сообщения: 13913
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: загрузка: восстановление и оптимизация

Непрочитанное сообщение Olej » 19 июл 2020, 13:21

Olej писал(а):
19 июл 2020, 13:18
Некоторое улучшение времени загрузки (на 4-5 сек. ... но при общем времени 30-50 сек. это уже существенно) можно достичь такими трюками (не относящимися к сервисам):
Было:

Код: Выделить всё

olej@nvidia:~$ systemd-analyze blame | head -n25
11.377s dev-sda1.device
 5.871s systemd-journal-flush.service
 5.259s systemd-udevd.service
 4.327s tor@default.service
 3.896s systemd-resolved.service
 3.095s NetworkManager-wait-online.service
 3.029s udisks2.service
...

olej@nvidia:~$ systemd-analyze
Startup finished in 5.783s (kernel) + 31.239s (userspace) = 37.022s
graphical.target reached after 30.466s in userspace
Стало:

Код: Выделить всё

olej@nvidia:~$ systemd-analyze blame | head -n25
10.699s dev-sda1.device                                                          
10.328s plymouth-start.service                                                   
 4.773s plymouth-read-write.service                                              
 4.276s systemd-udevd.service                                                    
 3.288s tor@default.service                                                      
 3.086s udisks2.service                                                          
 3.035s NetworkManager.service                                                   
 3.031s NetworkManager-wait-online.service                                       
...

olej@nvidia:~$ systemd-analyze
Startup finished in 5.609s (kernel) + 28.522s (userspace) = 34.131s 
graphical.target reached after 28.509s in userspace
Не Бог-весть что, но >10% времени загрузки сэкономили на ровном месте :lol:

Ответить

Вернуться в «Linux изнутри»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость