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

systemd boot analysis

#Systemd #Ubuntu #PopOS