[ in English ] - [ en français ] - [ en espanol ] - [ Deutsch ] -

* Focus sur Pinit

[à compléter]

* Démarrage des services en parallèle : Pinit

Sous Mandriva Linux le système de démarrage est basé sur une initialisation de type Système V. L'ensemble est réalisé par tout un jeu de scripts, souvent appelés 'initscripts'. Dans /etc/rc.d/ se trouve les scripts de démarrage principaux, rc.sysinit, qui est le premier script à être lancé par le processus init au démarrage. rc.sysinit fait un nombre assez conséquent d'actions, il initialise les polices de caractères, s'assure de monter la partition racine, lance udev, vérifie les systèmes de fichiers avant de les monter, éventuellement configure les disques RAID logiciels ou LVM. Ensuite il passe la main au script rc, qui est plus un chef d'orchestre lançant le reste des scripts d'initialisation se trouvant dans /etc/init.d.

Plus exactement les répertoires /etc/rc.d/rcX.d, où 'X' représente le runlevel (entre 0 et 6), contiennent des liens vers les scripts se trouvant dans /etc/init.d pour sélectionner, en fonction du runlevel, ceux qui doivent être lancés et ceux qui doivent être arrêtés (avec une commande du type service nom_du_service start/stop). Avec le système actuel, chaque liens dans, par exemple, /etc/rc.d/rc3.d/, contient une lettre, S pour Start ou K pour Kill, suivie d'un nombre entre 00 et 99, et enfin le nom de l'initscript. De cette façon les liens dans /etc/rc.d/rc3.d sont classés par ordre, tout d'abord les KXXnom_du_script, puis les SXXnom_du_script, par exemple :

K09dm
K10psacct
S03iptables
S04acpi
S04dkms
S05harddrake
S10network

Dans cet exemple, successivement les service dm, psacct vont être arrêtés, puis les services iptables, acpi, dkms, harddrake et network vont être lancés. Jusqu'à présent le lancement des scripts se faisait de façon séquentielle, rc attendant que le script dkms se termine pour lancer le script harddrake. Or dans beaucoup de cas les choses pourraient être faîtes en parallèle, et économiser ainsi un temps substantiel de démarrage.

Un contributeur Mandriva, Philippe Rétornaz, plus connu sous le pseudonyme Couriousous, a développé un programme permettant, moyennant l'ajout d'une indication de dépendance dans les en-têtes des initscripts, de calculer un ordonnancement des scripts pour lancer en parallèle tous les scripts qui ne dépendent pas d'autres scripts, et les autres dès que les scripts sur lesquels ils s'appuient sont exécutés. Le gain de temps au démarrage est variable, mais souvent significatif, plusieurs secondes, voire 20 à 30 pourcent. Pour pouvoir comparer précisément le temps gagné, vous pouvez utiliser le programme bootchart. Ce programme, disponible via le paquet bootchart disponible en contrib, se lance simplement en passant 'init=bootchartd' en option au démarrage du noyau, ensuite un programme java utilise les données récupérées dans /var/log/bootchart.tgz pour créer un graphique représentatif de la séquence de démarrage. Pour plus d'information, vous pouvez consulter l'aide en ligne sur 'http://www.bootchart.org' ou sur http://qa.mandriva.com/twiki/bin/view/Main/BootTimeOptimisation.

Vous pouvez allez sur le Wiki communautaire pour plus d'information : http://qa.mandriva.com/twiki/bin/view/Main/Pinit.
There are no comments on this page.
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki