Overblog Suivre ce blog
Editer l'article Administration Créer mon blog
And Linux For All

Fedora 15: optimiser le temps de boot avec systemd

25 Avril 2011 , Rédigé par Emmanuel PIEUX Publié dans #HOWTO

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.

Partager cet article

Repost 0

Commenter cet article

Anonymous 28/05/2011 21:58


Pour la premiere commande j'ai un message d'erreur: cat: message: Aucun fichier ou dossier de ce type
systemd est bel et bien installé


Emmanuel PIEUX 30/05/2011 11:25



Il manque un "s" à la fin de messages.