Latence du noyau au démarrage
RésoluBonjour à tou.te.s :D !
Récemment j'ai ouvert le fil suivant : Convertir partition depuis support GPT en MBR pour isoler en p2v un système Debian problématique sur une machine physique afin de l'éprouver en machine virtuelle (ici avec Qemu/KVM/libvirt).
J'avais presque mené à terme ce projet, mais il restait un problème de latence au démarrage que je viens de résoudre.
=> célébration, problème résolu :D !
Je propose de vous faire un retour ici.
----
Au démarrage il y avait environ 30s où il ne se passait rien. Le curseur blanc clignotait sur fond noir. Juste après venaient toutes les écritures ininterrompues de systemd avant d'arriver sur l'accueillant.
J'ai fait un audit sur l'activité après amorçage et j'ai constaté que c'était le noyau qui générait cette latence.
$ systemd-analyze Startup finished in 33.781s (kernel) + 4.069s (userspace) = 37.851s graphical.target reached after 4.040s in userspace. $ systemd-analyze plot > analyse.svg
J'avais ouvert le fichier SVG généré (ristretto sait le faire) et sans zoom, on voyait une longue barre en gris en haut de 33s ...
... et on pouvait constater que cette barre était relative au noyau :
J'ai alors demandé à @mamiemando de l'aide pour révéler l'activité du noyau (voir dans le fil dessus) mais les propositions simples n'ont pas abouties.
Remarque : le fameux "RTFM" ne m'a pas beaucoup aidé jusqu'à présent car quand je me lance dans la lecture d'un manuel (man, info, help), je me sens noyé dans sa compréhension, le sens des phrases et souvent je ne comprends pas ou je mésinterprête (j'ai un multi-handicap sensoriel et mnésique). Pour moi ces rédacteurs s'adressent uniquement à des personnes qui les comprennent et rarement je les comprends. De fait, je suis contraint de rechercher différentes documentations et approches, pour mieux cerner les tenants et les aboutissants. C'est aussi pour ça que je ne me réfère pas à ces manuels pour sourcer mes démarches.
Après m'être documenté sur l'analyse du démarrage Linux (Analyze Linux startup performance), j'ai vu qu'il y avait un prérequis (Understanding systemd at startup on Linux) que j'ai également parcouru et à la rubrique Exploring Linux startup with systemd il était question de modifier le fichier grub.cfg pour enlever la directive quiet de manière à afficher les messages d'amorçage ce qui m'a fait réaliser qu'ils pouvaient être cachés par défaut et que je ne me souciais pas du fait qu'il y avait dans les distributions actuelles, cette pratique de cacher ces messages.
Je l'ai donc supprimé de /etc/default/grub et ai appliqué la modification avec update-grub.
Au prochain amorçage, j'ai vu que l'écran était d'avantage verbeux avant les affichages de systemd et qu'il bloquait sur une action qui se répétait : "running /scripts/local-block"
Cette page Solving the Running /scripts/local-block loop while booting in Linux a mis en évidence le problème : l'amorçage Linux a besoin de connaître l'identifiant unique (UUID) du fichier d'échange (mémoire SWAP) qu'il essaye de monter
Ça a fait tilt dans ma tête ! Le SWAP du disque GPT était dans une partition dédiée (et non dans un fichier du système) qui n'avait pas été clonée. J'avais bien supprimé son montage depuis /etc/fstab (je rappelle que le SWAP n'est pas obligatoire, surtout en virtualisation), mais je m'étais arrêté là.
Attention : à partir d'ici, je ne suis pas sûr de tout comprendre, donc si des experts passent par là, n'hésitez pas à corriger ...
En effet, depuis /etc/initramfs-tools/conf.d/resume (de mémoire, qui sert entre autre pour la veille), il y avait bien un lien vers le SWAP, je l'ai alors désactivé en commentant la ligne (la précéder par #).
Dans mon cas, une fois modifiée :
$ cat /etc/initramfs-tools/conf.d/resume #RESUME=UUID=80f3d2a0-e416-49d1-b5d9-1dd5fb089e22
Mais ce n'était pas tout, après le chargement du noyau, le SWAP est aussi utilisé par l'archive initrd.img qui charge le système de fichier initramfs permettant de monter le système de fichiers racine (source et aussi ici).
Comme le lien vers le SWAP est intégré "en dur" dans l'archive, il faut mettre à jour pour la régénérer :
$ sudo update-initramfs -u update-initramfs: Generating /boot/initrd.img-6.1.0-23-amd64
Note : cette mise à jour est entre autre impactée par le fichier resume indiqué dessus, j'ai pu le constater car en réactivant la ligne et en remettant à jour, j'ai pu constater le problème initial
=> il n'y a désormais pas cette latence de 30s au démarrage :D
En espérant que ça puisse servir à d'autres ...
Avec adelphité,
lnj
Linux / Firefox 115.0
- Latence du noyau au démarrage
- Ordinateur lent au démarrage - Guide
- Reinitialiser pc au demarrage - Guide
- Forcer demarrage pc - Guide
- Qu'est ce qui se lance au démarrage de l'ordinateur - Guide
- Problème démarrage windows 10 - Guide
1 réponse
Bonjour,
Merci pour ce retour très intéressant. Le fait que le noyau soit perdu a cause de cette histoire de swap n'est pas surprenant, puisque cette dernière est utilisée lors d'une mise en hibernation sur le disque dur. A vrai dire, ça m'étonne que le système parvienne à démarrer (il faut croire qu'un timeout a été prévu quand la récupération d'un système hiberné échoue) !
Ensuite, si je comprends bien tes explications, réactiver la prise en charge de l'hibernation te ramène a ton problème initial. Si c'est bien le cas, je suspecte qu'il réside encore aujourd'hui dans ta swap une ancienne hibernation. Pour s'en débarrasser, tu pourrais reformater ta partition swap.
Si tu veux le faire, commence par retrouver le device concerné à l'aide de sudo fdisk -l
(mando@velvet) (~) $ sudo fdisk -l [sudo] Mot de passe de mando : Disque /dev/nvme0n1 : 476,94 GiB, 512110190592 octets, 1000215216 secteurs Modèle de disque : SAMSUNG MZVLW512HMJP-00000 Unités : secteur de 1 × 512 = 512 octets Taille de secteur (logique / physique) : 512 octets / 512 octets taille d'E/S (minimale / optimale) : 512 octets / 512 octets Type d'étiquette de disque : gpt Identifiant de disque : CCA34840-4481-48C5-B59B-5DA342615950 Périphérique Début Fin Secteurs Taille Type /dev/nvme0n1p1 2048 1087487 1085440 530M Environnement de récupération Windows /dev/nvme0n1p2 1087488 1619967 532480 260M Système EFI /dev/nvme0n1p3 1619968 1882111 262144 128M Réservé Microsoft /dev/nvme0n1p4 1882112 281618431 279736320 133,4G Données de base Microsoft /dev/nvme0n1p5 998418432 1000212479 1794048 876M Environnement de récupération Windows /dev/nvme0n1p6 281618432 289431551 7813120 3,7G Partition d'échange Linux /dev/nvme0n1p7 289431552 387088383 97656832 46,6G Système de fichiers Linux /dev/nvme0n1p8 387088384 998418431 611330048 291,5G Système de fichiers Linux Les entrées de la table de partitions ne sont pas dans l'ordre du disque.
(dans cet exemple /dev/nvme0n1p6)
Tu peux alors désactiver la swap, la reformater, et la réactiver. Si on suit cet exemple (attention, veille à utiliser le bon device car si tu le fais sur une partition de disque dur, tu perdras ses données !!!)
swapoff /dev/nvme0n1p6 mkswap /dev/nvme0n1p6 swapon /dev/nvme0n1p6
Peut-être qu'ainsi au redémarrage, la swap étant vidée, ton noyau ne tenterait pas de restaurer une hibernation passée bancale.
Bonne chance et tous mes meilleurs vœux ;-)
C'est surtout que la dite partition de SWAP est inexistante ... Je rappelle que j'ai juste fait une copie fichier (rsync) du contenu de la partition du support GPT donc sans la partition SWAP.
Mais merci beaucoup pour la démarche pour refaire le SWAP.
Du coup je peux (enfin) estampiller en résolu ;D
A toi aussi une très belle année 2025 (que j'espère meilleure que 2024) :D
D'accord merci pour la précision. En fait peu importe qu'elle soit mal référencée ou carrément inexistante, le problème de fond est que le noyau ne la trouve pas. Merci beaucoup pour tous ces explications et félicitations pour avoir trouvé la solution.
J'espère aussi :D
Dans mon cas cette commande a retourné :
donc UUID est 77822326-b1ac-47e5-9b4f-492da91bc47e
Corriger /etc/fstab avec des droits root (éventuellement via sudo), et corriger la ligne qui correspond à la swap (sans toucher aux autres lignes). Dans mon cas, la ligne corrigée devient donc :