Fedora 15: optimiser le temps de boot avec systemd
Introduction
Le processus de démarrage d'une distribution Linux est complexe. Après le chargement du noyau Linux, des paramètres et programmes divers doivent être chargés en mémoire RAM pour rendre le système pleinement opérationnel.
Certains programmes effectuent la tâche qui leur est assigné puis se ferment automatiquement, tel mount qui rend les partitions accessibles. D'autres, souvent appelés les "démons", restent endormis en mémoire, jusqu'à ce qu'on fasse appel à eux, comme Cups, qui permet d'imprimer.
Au démarrage de l'ordinateur, c'est plusieurs dizaines de programmes qui sont chargés en mémoire, après avoir été lus sur le disque dur.
Fedora 15 dispose d'un système évolué de démarrage: systemd.
Parmi les avantages de ce système, on peut noter:
- le fait qu'il prenne soin de noter beaucoup de choses dans les fichiers logs de démarrage,
- le fait qu'il puisse démarrer plusieurs programmes en même temps, au lieu de les démarrer de façon séquentielle,
- le fait qu'il soit simple à administrer et modifier grâce à quelques outils en ligne de commande.
Faire le bilan
Pour optimiser le temps de démarrage de l'ordinateur, il faut tout d'abord faire un bilan: combien de temps met-il à démarrer. Le programme systemd note systématiquement cette information dans le fichier "messages".
Pour trouver cette information, tapez cette commande:
sudo cat messages |grep Startup |
(attention à la majuscule)
Une ou plusieurs lignes comme celle-ci doivent s'afficher:
Apr 20 08:51:35 GEM-10928 systemd[1]: Startup finished in 2s 931ms 361us (kernel) + 15s 969ms 619us (initrd) + 27s 166ms 595us (userspace) = 46s 67ms 575us
Cette ligne peut se décomposer en trois phases:
- le chargement du noyau Linux, qui permet d'initialiser et de charger les programmes essentiels à l'utilisation du matériel. Dans l'exemple, le démarrage du noyau dure presque 3 secondes.
- le chargement de initrd, qui est une image en mémoire d'un miniOS (ou d'un pseudo système de fichier) contenant le minimum nécessaire à l'exécution des programmes de plus haut niveau. Son temps d'initialisation est d'environ 16 secondes.
- les programmes en mode utilisateur. Ce sont des programmes de plus haut niveau, qui peuvent être contrôlés par l'utiisateur. Ils ne sont pas tous indispensables au système mais apportent des fonctionnalités de haut niveau, comme le pare-feu ou le système d'impression. L'initialisation de cette partie dure environ 27 secondes.
Ainsi, dans cet exemple, l'initialisation du système prend environ 46 secondes. Attention, cela ne veut pas dire que l'interface graphique soit lancée. On parle ici du système qui permet de faire fonctionner l'ordinateur, pas d'environnement graphique.
Une fois noté le temps de démarrage étalon, passons à la pratique: supprimer les services inutiles.
Commençons par lister l'ensemble des programmes chargés par systemd:
systemd-analyse |
Voici un extrait du résultat de cette commande:
6657ms cups.service
4777ms NetworkManager.service
4707ms udev-settle.service
4137ms plymouth-start.service
3231ms mcelog.service
3124ms sandbox.service
2334ms fedora-storage-init.service
2234ms fedora-readonly.service
1903ms lvm2-monitor.service
1565ms udev.service
.......
19ms systemd-user-sessions.service
18ms iscsi.service
9ms sys-kernel-security.mount
4ms dev-hugepages.mount
3ms sys-kernel-debug.mount
2ms proc-sys-fs-binfmt_misc.mount
2ms dev-mqueue.mount
Optimisation
La liste est classée par ordre décroissant de temps de démarrage, ce qui permet d'aller immédiatement à l'essentiel, à savoir les programmes longs à initialiser (ici le système d'impression cups et le système de gestion des réseaux, qui prennent respectivement 6,6 secondes et 4,7 secondes)
Une fois vos cibles repérées, vous pouvez désactiver les services qui vous sembles superflus:
systemctl disable sendmail.service systemctl disable sshd.service |
Dans cet exemple, j'ai désactivé le service sendmail car je n'envoie pas directement d'email depuis mon PC, et sshd car je ne prend pas la main à distance sur ma machine via ssh.
Ce ne sont que des exemples. Faites attention à ce que vous désactivez. Certains démons ou programmes sont très utiles et les désactiver pourrait bloquer certaines fonctionnalités dont vous avez besoin.
Une fois les services superflus désactivés, vous pouvez redémarrer votre ordinateur. Une fois ceci fait, retapez la commande:
sudo cat messages |grep Startup |
Vous devez constater un léger mieux au niveau du temps de démarrage. A relativiser cependant.
Comme évoqué plus haut, systemd est capable de lancer plusieurs démons en même temps. C'est lui qui décide quoi lancer avec quoi. Du coup, le fait d'enlever des programmes de sa liste de démarrage lui fait recalculer sa séquence d'optimisation. Il se peut alors que cette nouvelle séquence ne prenne pas exactement le temps de démarrage initial moins le temps cumulé des programmes désactivés.
Un peu plus loin
Notez pour finir que systemctl est une commande puissante, qui vous permet de démarrer et arrêter n'importe quel service du système très facilement. Tapez cette commande pour obtenir de l'aide:
man systemctl |
De la même façon, vous pouvez en savoir plus sur systemd en tapant:
man systemd |
Si vous arrivez à gagner du temps sur le démarrage de votre PC de façon conséquente, n'hésitez pas à me le faire savoir, je suis preneur d'informations à ce sujet.