Analyser son boot
Voici quelques astuces pour analyser son temps de démarrage avec systemd (présent dans beaucoup de distributions). Une autre méthode existe avec bootchart (je pourrai mettre à jour ce tuto).
Systemd
Systemd est arrivé depuis les années 2010 (2012 pour Arch, 2014-2015 pour les Debian/Ubuntu) pour la gestion du système et des services sur les distributions Linux. Il permet de voir ce qui prend du temps au démarrage par exemple. C'est très utile, pas seulement pour comparer sa qué... ses performances, mais aussi pour savoir si un service démarré sur votre distribution prend beaucoup de temps où ralenti votre système. Par exemple, si vous installez Apache, PHP ou MySQL, votre distribution va bien ralentir au démarrage car elle devra lancer ces éléments surtout présents et utiles sur des serveurs web (pas forcément votre besoin de gamer).
Analyser
Voici la commande :
systemd-analyze
qui renvoie chez moi ça :
nasra@pop-os:~$ systemd-analyze
Startup finished in 9.360s (firmware) + 524ms (loader) + 4.469s (kernel) + 4.411s (userspace) = 18.765s graphical.target reached after 4.375s in userspace
Ok, là j'ai un découpage du temps entre les firmwares, le loader, le kernel (et ses différents modules), le temps utilisateur (les applications démarrées lors de l'ouverture de la session de mon DE) et le dernier temps celui qui m'annonce mon temps de boot avant d'avoir affiché mon interface graphique (celle de mon login). Ces temps là changent selon les DE, les modules installés ou non dans le kernel, les services démarrés lors du login.
Analysons plus finement
La commande suivante analyse tous les éléments du démarrage :
systemd-analyze blame
qui renvoie cela chez moi :
nasra@pop-os:~$ systemd-analyze blame
3.425s NetworkManager-wait-online.service
3.369s plymouth-quit-wait.service
2.542s fwupd-refresh.service
549ms apt-daily-upgrade.service
534ms apt-daily.service
463ms ua-timer.service
440ms man-db.service
419ms networkd-dispatcher.service
363ms accounts-daemon.service
289ms logrotate.service
274ms udisks2.service
252ms dev-sdc3.device
197ms systemd-cryptsetup@cryptswap.service
162ms dpkg-db-backup.service
158ms user@1000.service
151ms ModemManager.service
112ms upower.service
109ms boot-efi.mount
Ici j'ai un module
NetworkManager-wait-online.service
qui prend 3,425s à démarrer. Parfois ce module peut prendre plus de temps (dans une configuration réseau par exemple).
La commande
systemd-analyze critical-chain
Permet de mieux identifier les services en question.
Elle renvoie cela chez moi :
nasra@pop-os:~$ systemd-analyze critical-chain
The time when unit became active or started is printed after the "@" character.
The time the unit took to start is printed after the "+" character.
graphical.target @4.375s
└─lactd.service @4.374s
└─multi-user.target @4.373s
└─plymouth-quit-wait.service @962ms +3.369s
└─systemd-user-sessions.service @955ms +4ms
└─network.target @944ms
└─NetworkManager.service @839ms +101ms
└─basic.target @838ms
└─dbus-broker.service @816ms +20ms
└─dbus.socket @805ms
└─sysinit.target @803ms
└─cryptsetup.target @760ms
└─systemd-cryptsetup@cryptswap.service @563ms +197ms
└─dev-disk-by\x2duuid-287ac1e1\x2def46\x2d4d0e\x2d9d7d\x2d6cb19af5b144.device @535ms
Exporter ses résultats
Petit bonus pour la route, vous pouvez exporter vos résultats en .svg 🙂
systemd-analyze plot > boot_analysis.svg