Artisan Numérique

/système/démarrage/performances/kernel/linux/ Optimisation post-démarrage

Les distributions récentes commencent de plus en plus à ressembler à leurs équivalent propriétaires. Histoire de satisfaire le plus grand nombre, des tonnes d'options sont activées pour rien Le problème des distributions généralistes reste qu'elles doivent de démarrer en toute situation. La conséquence en est que beaucoup de modules sont chargés pour rien, et même certaines fois à tord. Ces modules allongent le temps de démarrage mais diminue aussi les ressources disponibles en restant chargés tout au long de la session. Une manière de régler une partie du problème peut consister en la création d'une kernel monolithique mais si cette approche vous semble trop violent ou si vous désirez rester à jour côté kernel sans repasser systématiquement par une compilation, il est aussi possible d'optimiser la manière dont GNU/Linux démarre pour limiter la casse au maximum.

Épuration des services

Les services sont les éléments les plus simples à optimiser, il suffit généralement de les désactiver ou mieux de les désinstaller. Ce qui suit est juste la liste de ceux que j'élimine systématiquement sur une installation fraîche Mandriva. Le résultat est en gros un gain de 7 à 10 secondes sur le démarrage et surtout moins de lattence sur l'ensemble de système car moins de ressources utilisées.

Sous Mandriva, l'outil qui vous sert à activer/désactiver les services est drakxservices. Cela ne désinstalle rien du tout, cela empêche juste le lancement au démarrage et rien ne vous empêche par la suite de relancer ces services au cas par cas par un service xxxxx start.

ATD

Activé par défaut, ce service n'apporte rien si vous n'utilisez pas la commande at permettant de planifier une tâche à une heure donnée.

acpi

l'ACPI (Advanced Configuration and Power Interface) permet de gérer l'utilisation de l'énergie dans un PC. Sa première particularité est que, contrairement à APM qui était pris en charge par le BIOS, tout ici est pris en charge par l'OS. On ne peut pas dire que cela prenne en soit un temps de dingue mais pour qui n'utilise pas la gestion de l'énergie, cette prise en charge implique un thread kernel (kacpid), un service (acpid) et différentes choses faites par gnome ou encore HAL. De plus, il n'est pas rare que le thread kernel parte en sucette et face fumer le CPU.

Pour s'en passer, le mieux est de desinstaller purement et simplement le démon (urpme $(rpm -qa | grep acpi)) et d'ajouter à la ligne de démarrage du kernel un acpi=off pour supprimer toute prise en charge.

autofs4

Dans le cadre de l'utilisation en tant que poste de travail, je ne vois plus bien l'intérêt d'autofs4 avec l'arrivé de HAL et le démon de montage de Gnome. Il n'est pas possible de supprimer ce service mais on peut le désactiver (via drakxservices). Cela fait toujours un module de moins (27ko) et un peu moins de temps au démarrage. A noter que cela n'empêche en rien les montages automatiques (directive auto) dans /etc/fstab.

netfs

NetFS, comme son nom l'indique plus ou moins, permet de monter au démarrage de la machine les partages réseaux en mode auto contenus dans /etc/fstab. Si vous n'en avez aucun, autant désactiver ce service qui ne sert alors qu'à ralonger le temps de démarrage.

BlueTooth

Rares sont les machines du bureau disposant du bluetooth, et pourtant ce service est installé et activé en standard. Avant il est était possible de le désinstallater mais l'équipe de Mandriva a aujourd'hui décidé que ce n'était plus possible, merci à eux... Plus exactement, le fait de désinstaller bluetooth entraîne la désinstallation de task-gnome entraînant une ribambelle des faux orphelins. La seule solution est donc de désactiver le service. Cela évite le chargement de 154ko sur 4 modules sans intérêt et autant de temps de gagner sur le démarrage. N'oubliez pas de désactiver aussi le service dund, hidd et pand.

partmon

Ce service ne va rien faire d'autre que vérifier s'il reste assez d'espace disque sur chacune de vos partitions au démarrage. Or j'ai tendance à considérer que si ce genre de problème arrive, c'est plutôt en cours d'utilisation de la machine, à déconnecter donc.

laptop_mode

Ce service fait appel à Laptop Mode Tools qui régle un certain nombre de paramétres énergétiques dans le cas d'une utilisation nomade. Sans grand intérêt pour une machine de bureau donc.

Avahi

Encore un truc activé par défaut d'un très grand intérêt... Avahi est l'équivalent de RendezVous pour MacOS aussi connu sous le nom de ZeroConf. L'idée est en soit séduisante car elle permet aux logiciels qui offrent des services (ex. imprimante) de se faire connaître sur le réseau et à des clients de pouvoir les découvrir et s'y connecter. Maintenant cela n'est utile que si l'on s'en sert et personellement je n'en ai jamais vu l'interêt. En revanche je vois bien les inconvénients comme le fait d'envoyer des messages sur le réseau pour rien, et d'avoir en mémoire un démon tout aussi innutile. Encore une fois il s'agit d'un point de vue très personnel et je conçoit parfaitement que certains puisse penser autrement, j'aimerais seulement que ce ne soit pas activé/installé en standard pour laisser à ceux qui le désire le plaisir de l'installer eux-même.

Malheureusement, tout le monde ou presque dépend d'avahi, impossible donc de désinstaller sous pene d'embarque tout le système avec. La solution est donc une fois encore de désactiver le service.

lm_sensors

lm_sensors permet d'auditer un ensemble de capteur physiques (température, vitesse de rotation, etc) présent dans votre machine. Là il ne s'agit pas de désactiver le service mais de l'empêche d'aller trop loin. En effet une partie de son lancement consiste au chargement des modules, très bien, mais le reste va mettre en orbite un démon qui va collecter à intervalle de temps régulier les données des capteurs. Et si vous ne le saviez pas, c'est qu'il fait sans aucun doute cela pour rien.

L'idée est donc de modifier /etc/init.d/lm_sensors de sorte à ne pas lancer le démon sensorsd en commentant simplement la ligne correspondante dans la fonction start

# Start daemons.
#        gprintf "Starting sensord: "
#        daemon sensord -i 1m -l 30m
#        echo
#        touch /var/lock/subsys/lm_sensors
/etc/init.d/lm_sensors

Vous pouvez faire la même chose dans la fonction stop, cela vous évitera une erreur lors de l'extinction du PC.

sound

Je ne saurais trop dire à quoi sert ce service qui pour moi semble redondant avec alsa. Ce que je peux dire c'est que je l'ai toujours désactivé et que je n'ai jamais vu d'effets secondaires.

netconsole

Ce service a pour seul objectif de charger en mémoire un module du même nom dont le rôle semble lier au debugage du kernel. Je n'en ai semble t-il pas l'usage car je l'ai toujours désactivé.

harddrak

Fut un temps ou harddrak, le démon de recherche de nouveau matos, était un service à part entière. Aujourd'hui il est caché dans un coin difficile à atteindre. Heureusement vous pouvez toujours désactiver cette recherche coûteuse en temps de démarrage dans /etc/sysconfig/system un HARDDRAKE_ONBOOT=no.

Réseau

Difficile de se passer des services réseau (network, network-auth, nework-up et resolveconf). Il y a cependant des cas où il n'est pas utile qu'une connection soit initialisée au démarrage de la machine. Pour ce fare, vous devez modifier le fichier en modifiant /etc/sysconfig/network-script/ifcfg-XXX et en ajoutant ONBOOT=no. Vous pouvez ensuite toujours activer cette carte réseau à la demande par un ifup XXX.

Les modules

Chargements forcés

La première chose à faire avant de chercher à interdire des modules, est de vérifier s'il ne sont pas forcés en chargement par votre distribution. Le premier cas de figure correspond au fichiers /etc/modprobe.preload et ceux contenus dans le dossiers /etc/modprobe.preload.d. Ces fichiers, comme leur nom l'indique, forcent le chargement de module indiqués par leur nom au démarrage de la machine. Il convient donc de commenter ceux qui ne servent à rien pour vous, par exemple :

edv
#pcmouse
#pcspkr
sdhci
#nvram
/etc/modprobe.preload

Le deuxième cas de chargement forcé est plus indirect, en passant par le fichier /etc/modprobe.conf et les fichiers contenus dans le dossier /etc/modprobe.d. Ces fichiers contiennent des définition permettant de spécifier le mode de chargement de tel ou tel module. Par exemple sous Mandriva vous avez le fichier /etc/modprobe.d/snd-oss qui contient :

install snd /sbin/modprobe --first-time --ignore-install --all snd snd_pcm_oss snd_seq_oss snd_mixer_oss
/etc/modprobe.d/snd-oss

Il s'agit de la définition d'une procédure d'installation pour le module ALSA snd qui dit que lorsque le module est installé, on doit aussi installer les modules snd_pcm_oss, snd_seq_oss et snd_mixer_oss. Ces modules permettent d'ajouter à ALSA une couche ce compatibilité vers le vieux système sonore OSS. Si vous n'utilisez que des application purement ALSA, cela ne sert à rien. Il faut donc commenter la ligne dans /etc/modprobe.d/snd-oss de sorte à laisser ce charger snd sans les modules OSS. Commenter est ici plus efficace que déplacer ou supprimer le fichier car lors des mise à jour de mandriva, ce dernier risquerait de réapparaître dans votre dos.

Sur ma mandriva sont forcés :

  • Les pilotes audio USB, sans grand intérêt vu que je n'ai pas de telle périphérique.
  • Les pilotes permettant de faire varier la fréquence du CPU, ce qui là aussi n'est pas très utile sur une machine de bureau, soit j'utilise ma machine, soit je l'éteint (d'où l'intérêt de réduire le temps de démarrage). Ces modules prenne de la mémoire mais occupe aussi un certain nombre de threads kernel pour rien.
  • La couche de compatibilité OSS pour ALSA, ce qui ne me sert à rien aujourd'hui vu que toute les applications que j'utilise parlent ALSA nativement.

Après, à c'est à chacun d'osculter son lsmod pour déterminer ce qui est chargé pour rien.

La liste noire

Certains modules se chargent "tout seul", généralement via des règles udev qui demandent à ce que tel module soit chargé lorsque tel matériel est trouvé. Ainsi par exemple mon lecteur d'empreinte digitale implique lorsque l'USB est monté, le chargement du module AES2501. Ce module ne me sert pourtant à rien car j'utilise fprint qui intègre déjà le protocole de communication avec le lecteur. Pire, le module prenant la main sur le lecteur va bloquer fprint.

La première solution consiste simplement à interdire le chargement de ce module. Pour y parvenir il suffit de créer un simple fichier, par exemple /etc/modprobe.preload.d/blacklist-ma_config et d'y ajouter des définitions de mise en liste noire.

blacklist aes2501
/etc/modprobe.preload.d/blacklist-ma_config

Un coup de redémarrage permet de voir si le module est correctement ignoré. Si cela ne marche pas, enlevez cette définition sans effet, et passez au moyen suivant.

Installation bidon

Comme nous l'avons vu plus haut, il est possible d'utiliser les définitions install pour charger plusieurs modules à la fois. De la même manière nous pouvons utiliser cette techniques pour bloquer certains modules qui bypassent le blacklistage, typiquement IPV6. Le but n'est pas de lancer un débat pour ou contre l'IPV6, mais juste de constater que ce module occupe 250ko de mémoire (faite un lsmod | grep ipv6, la taille est affichée, exprimée en octets) de manière totalement inutile pour l'instant.

Nous allons pour cela ajouter une ligne dans /etc/modprobe.conf :

install ipv6 /bin/true
à la fin de /etc/modprobe.conf

Ainsi lorsque le système cherchera à charger ce module, il utilisera cette procédure d'installation que ne fera rien du tout mais qui fera croire que tout c'est bien passé (la commande /bin/true qui ne fait que renvoyer un "tout vas bien"). La même technique est utilisable par exemple sur piix qu'il n'est pas possible de blacklister.

Optimiser le chargement de GNOME

Comme tout développement populaire, Gnome tend irrémédiablement vers l'usine à gaz. Fort heureusement, cette tendance est aujourd'hui largement moins forte qu'avec KDE4. Toujours est-il qu'un certain nombre de service, gnome cette fois, sont lancés au démarrage de la session et ce, généralement, en pure perte de temps.

Pour voir si c'est le cas pour votre distribution, il faut jetter un oeil sur Système/Préférences/Sessions. Là vous avez une longue liste de service démarrés avec la session qu'il est possible de désactiver.

Pour se donner une idée, je passe de 13s à 7s pour le démarrage d'une session après avoir désactivé les services suivant.

Aide Visuelle et Assistant du Registre AT SPO

Ces services sont liés à l'accessibilité, vous pouvez le désactiver sans crainte si vous n'en avez pas besoin.

Beagle Search Daemon et Beagle Search Tool

Beagle est une application qui, à l'instar de Spotlight sur MacOS, permet de chercher dans les informations présentes sur votre machine (courriels, fichiers, logs de pidgin, etc.). Alors déjà tout le monde n'a pas besoin de chercher dans ses fichiers comme on cherche dans le WEB avec Google. Personellement j'ai une préférence pour le rangement. En plus, cette application fonctionne en indexant les contenus en tâche de fond, et même si cette tâche est sensée se mettre en pause lorsque vous utilisez votre machine, cela n'en augmente pas moins la lattence du système, il y a toujours un temps de "freinage". Enfin pour ne rien gâcher cette application n'est pas écrite native, comme le reste du bureau, mais utilise Mono, ce qui est un gage supplémentaire de sous-performance et d'occupation exagéré de resources. Si vous tenez absolument à ce genre de service, dirigez-vous plutôt vers tracker qui a le bon goût d'être une application native.

Si vous n'utilisez pas ce genre de service, vous avez tout à gagner à le désactiver.

Bureau à distance

Ce service permet à un tiers de se connecter sur votre bureau, à distance vous l'aurez compris. A désactiver donc si vous n'en voyez pas l'usage.

Codeina

Codeina est un outil vachement utile pour vous informer sur les codecs libres disponibles et permet aussi d'en installer d'autres qui ne le sont pas forcement. Il fonctionne en conjonction avec gstreamer (utilisé par exemple par Totem) et s'active lorsque dernier ne sait pas lire un contenu. Le service ci présent permet de s'inquiéter des mises jours disponibles pour les dits codecs. Je vous laisse juge de son utilité, personellement je préfère utilise gnome-mplayer pour la lecture ou vlc pour la diffusion, au moins eux, ils sont indépendant et ne m'ont jamais demandé d'acheter un codec.

Draksnapshot Applet, Mandriva Online Applet et NetApplet

Ce sont trois applets pour le tableau de bord founies par Mandriva. Le premier permet comme son nom l'indique de faire des snapshots du disque à des fins de sauvegarde. Je ne vois pas bien ce que cela fait sous la forme d'une applet. Le second permet entre autre d'être prévenu des mises à jours, il a aussi le très vilain defaut de se prendre pour Windows et d'effectuer ces mise à jours sans vous demander votre avis. Personellement je désactive les deux.

Enfin NetApplet permet de simplifier le paramétrage du reseau. Elle est très pratique sur un portable, en attendant que gnome-network-center ne la remplace. Sur une machine de bureau, je la désactive.

PulseAudio Session Management

Voir le chapitre sur Pulse Audio.

Ecran d'accueil de Gnome et Gnome Login Sound

Sans grand intérêt, je désactive.

Gestionnaire d'énergie

A désactiver si l'on n'utilise pas les fonctions énergétiques sur son desktop.

Gestionnaire BlueTooth

A désactiver si l'on n'utilise pas le bluetooth.

PulseAudio

Je ne sais pas si d'autres distributions ont eu la riche idée d'utiliser cet outil mais c'est le cas par défaut depuis Mandriva 2008.1. PulseAudio pour faire simple est la version moderne et cool d'esd, le serveur sonore d'enlightenement. Son but premier est de permettre, comme KDE/Artsd, de permettre le transport audio à travers le réseau. Vous pouvez ainsi au prix de quelques nuits blanches, le paramétrer pour que toute la musique lue par le PC de votre femme, sorte par la carte son de votre PC à vous, le tout à travers le réseau. Quel intérêt pour une machine du bureau ? c'est une bonne question. Mis à part rajouter de la lattence et manger des resources je n'en ai vu aucun mis à part peut-être la possibilité de régler le volume par application m'a t'on dit.

En revanche pas question de le désinstaller sauvagement sous peine d'un éfondrement global du système de paquets. Fort heureusement l'équipe Mandriva n'a pas été vacharde au point de ne laisser aucune alternative et ce serveur audio est désactivable en tapant la commande draksound. Ceci fait un redémarrage de la session et nécessaire. Pour parfaire cela, vous pouvez aussi éditer le fichier /etc/mplayer/mplayer.conf et supprimer pulse qui se trouve en tête de la liste des sorties audio à utiliser par défaut.

Compiz

Je me suis beaucoup amusé avec Beryl à ses débuts mais aujourd'hui cela me semble loin. Ce système promettait à l'époque d'étonnantes performances visuelles en utilisant le GPU à la place du CPU. Résulat des courses, même en mettant les options au minimum, un gtkperf est sans appel, c'est plus lent qu'un simple metacity. Alors si c'est juste pour avoir des ombres sous les fenêtres et la prévisualisation des applications par ALT-TAB, autant utiliser le compositeur de Metacity qui fait cela très bien et de manière beaucoup plus efficace.

Optimiser la lecture des fichiers

Une bonne manière de gagner du temps passe par des outils de pré-chargement de fichiers en mémoire cache. Nous avons par exemple readahead ou encore super readhead, une version optimisée par le projet moblin.

Dans le même esprit que readahead mais globalisé à l'ensemble des applications, il y aussi le paquet preload qui est un démon analysant l'exécution des applications et prenant de l'avance sur les chargements qui leur seront nécessaires.

Enfin, pour améliorer les temps de lancement des applications, un paquet bien utile est prelink qui va, via une tâche cron, scanner tous les binaires et les modifier de sorte à ce que les références à des librairies se fasse plus rapidement (en gros ;-)).

Conclusion

L'ensemble de ces modifications m'ont permis de réduire le temps global de démarrage de l'U810 de 80 à 45 secondes, ce qui n'est pas un petit gain. Le système en lui même n'en sera que plus réactif ne serait-ce que par les ressources ainsi libérées pour un travail plus utile.