udev, uevents, modules & cie au démarrage de Archlinux..

Questions et astuces concernant l'installation et la configuration d'archlinux
Répondre
Clark
archer
Messages : 142
Inscription : dim. 01 juil. 2007, 15:41

udev, uevents, modules & cie au démarrage de Archlinux..

Message par Clark »

Bonjour à tous,

Ce message fait suite à cette discussion, où le rôle de udev dans la vitesse de démarrage est abordé. Ayant des ennuis avec udev, je vais raconter ici :
- les ennuis que udev m'a apporté (démarrage et système très lent)
- ce que j'ai trouvé pour y remédier
- quelques considérations générales pour expliquer un peu plus ce que j'ai observé avec Arch et udev.

Ma vie
J'ai installé Archlinux à la fin de juin 2007. Aucun problème à relever dans les premiers temps : RAS. J'utilise la conf du noyau par défaut proposé à l'installation. J'ai trouvé quand même qu'au fur et à mesure des mises à jour, KDE devenait très rapide (j'y reviendrai). Puis, un beau jour, le démarrage s'est mis, de façon aléatoire, à devenir très lent : udev uevents prenait parfois plus d'une minute, HAL prenait alors quelques secondes à charger et tout le système était très lent au point d'en être quasi inutilisable.
Ceci se produisait environ 1 démarrage sur 5 et ne semble pas si rare que ça puisque le forum anglophone regorge de discussions à ce propos, et ce depuis quelques mois pour ne pas dire années...(sans commentaires !). Quelques bugs ont bien été ouverts et le dernier en date (http://bugs.archlinux.org/task/8878) a été fermé sans la moindre vérif : sans vouloir parler sans savoir, je trouve que ce problème récurrent et ennuyeux n'a l'air préoccuper aucun développeur.

J'ai bien trouvé une discussion récente sur leur mailing list (je n'ai pas conservé le lien) où un "problème" avec udev est évoqué, mais la dernières versions devaient avoir réglé le pb selon leurs dires (c'est là qu'on apprend que blacklister les modules dans le rc.conf peut ralentir le démarrage -on marche sur la tête...). J'ai essayé presque toutes les solutions évoquées à droite et à gauche : aucune ne fonctionne, inutile de vous fatiguer à les essayer (en particulier celles-ci et celle-ci).

La ubuntu de l'ordinateur de ma femme ayant fini d'achever toute la patience que je lui (=ubuntu) consacrais, je lui ai mis une belle petite Arch toute neuve. Et là, stupéfaction : sa machine fonctionne mieux que la mienne (nous avons 2 portables), alors que c'est la moins puissante !
Un peu dégoûté, mais plein d'espoir, je me dis qu'une réinstallation de la mienne ne me coûtera pas bien cher et devrait me débarrasser de ce pb avec udev. Et bien ce fut pire que tout, puisqu'au lieu d'être aléatoire, le pb devint systématique.

J'ai mis une semaine (j'avais décidé de m'entêter) à réinstaller Arch je ne sais combien de fois et à la triturer dans tous les sens pour trouver ce qui n'allait pas. Je n'ai pas résolu le pb (sinon j'écrirais à phrakture ou un autre), mais élaboré une solution qui donne toute satisfaction.


Une solution
Je donne ici directement une méthode fonctionnelle, les explications sont dans la troisième partie, pour les plus courageux. :P
Dans /etc/mkinitcpio.conf, on passe comme MODULES les seuls modules nécéssaires à la création de /, et en virant udev et autodetect des HOOKS :

Code : Tout sélectionner

...
MODULES="sd_mod pata_atiixp ata_generic reiserfs"
...
HOOKS="base pata scsi keymap filesystems"
Je pense que sd_mod est obligatoire, ainsi que ata_generic. reiserfs est à adapter à votre système de fichiers, et le module pata à votre matériel.
Bien vérifier dans le /etc/rc.conf que mod_autoload est fixé à "yes" et ça devrait rouler.
J'ai bien sûr tâtonné pour trouver les modules dont j'avais besoin, aussi, à partir d'un système qui fonctionne bon an mal an, il faut générer une image noyau spécifique à vos essais avec une entrée spéciale dans grub :

Code : Tout sélectionner

mkinitcpio -c /etc/mkinitcpio.conf.crashtest -g /boot/linuxtest.img

Code : Tout sélectionner

# (1) Arch Linux
title  Arch Linux test
root   (hd0,1)
kernel /boot/vmlinuz26 root=/dev/sda2 ro
initrd /boot/linuxtest.img
En cas d'erreur au démarrage (on le sait très vite ;) ), redémarrez avec votre entrée par défaut et bidouillez votre mkinitcpio.conf.crashtest jusqu'au succès. Quand c'est bon, copiez ce fichier à la place de /etc/mkinitcpio.conf et générez l'image principale :

Code : Tout sélectionner

mkinitcpio -g /boot/kernel26.img
Avec ces réglages, udev uevents ne plante plus jamais au démarrage, et rentre désormais toujours en moins de 6 secondes. Pb réglé (ou tout du moins contourné) !

Le seul détail qui me reste à régler (mais ma science s'épuise) est que KDE est moins réactif que sur ma précédente installation (quand elle ne bugait pas bien sûr) et que sur la machine de ma femme. Là j'y comprend plus rien, malgré prelink & preload et le /etc/hosts modifié comme il faut : affaire à suivre.


Le pourquoi du comment
Je reviens ici sur quelques unes de mes affirmations précédentes, ainsi qu'un explication de ce que j'ai compris du fonctionnement des modules et de udev dans Archlinux. si je raconte des bêtises, dites-le (gentiment, de préférence ;) ) !

En utilisant mkinitcpio (ce qui est fait à chaque installation ou mise du jour du noyau), on dit, par le biais de mkinitcpio.conf, quels ingrédients doit contenir l'initrd chargé au démarrage du système. Les HOOKS disent quelles doivent être les grandes caractéristiques de cette image, et surtout quelles "familles" de modules doivent être installées.
La variable MODULES, elle, liste les modules qui doivent être chargés avant toutes choses, avec le noyau, et dans l'ordre donné (c'est équivalent à compiler les "modules" "en dur" dans un noyau perso).
Le hook udev intègre udev à cett initrd et dit au noyau d'utiliser udev pour choisir quels modules utiliser pour créer la partition racine : udev va les choisir dans ceux qui ont été installé, donc ceux qui (généralement) ont été choisis à l'installation du noyau par le hook autodetect pour coller à votre matériel, dans les familles listées (pata, scsi, filesystem...).

Quel est le rapport avec le chargement des uevents ? J'ai acquis la conviction que udevd et udev intégré dans le noyau kernel26 ne font pas bon ménage sur certaines machines. Le problème semble donc résider dans la gestion et l'appel des modules ad-hoc, et notamment ceux nécessaires à l'utilisation de la partition root. Le but du jeu de la solution expliquée plus haut est donc de laisser le système au maximum tel que conçu par les dev (avec le chargement automatique des modules par udevd) mais en l'orientant suffisamment pour éviter les conflits en ne lui laissant pas le choix des modules pour créer / . Donc il faut virer udev de l'image du noyau chargée au démarrage (j'ai bien dit dans la première que les bidouilles du rc.conf et des scripts de udevd sont inopérants) afin du lui dire quels modules charger (et que ceux là).

C'est là où enlever autodetect des hooks est intéressant (en tous cas sur ma machine) : il peut mal reconnaitre votre matériel et choisir pour vous des modules inadaptés. Les appeler dans MODULES ne servira alors à rien (c'est surtout ici que je peux me tromper). En tout cas je l'ai viré et je m'en porte très bien. J'ai peut-être trop de modules d'installés, mais ils ne seront jamais appelés.
Car il faut bien comprendre que ce HOOK ne dit pas au noyau de touver votre matériel au démarrage (ça c'est le rôle de udev lui-même), mais de trouver les modules à installer avec votre noyau qui correspondent à votre matériel. Il ne joue en rien sur la grosseur de l'initrd donc sur le temps de démarrage. Mais il peut apporter des ennuis sur certains protables (comme le mien).

Ensuite, les différentes façon d'accélérer udev au démarrage listées sur le wiki anglophone ne fonctionnent pas si vous avez ce problème. Elles ne font que chinter load_modules.sh, qui fait pourtant bien son travail quand les conditions sont correctes. En tous cas, à moins de 5 secondes de chargement des uevents, vous n'y gagnerez rien du tout.
Pour info, ce script est appelé par les règles de /etc/udev/rules.d/ (ce balayage des règles s'appelle précisément uevents).
Non, le problème est avec udevd lui-même. J'ai remarqué grâce à bootchart que udev uevents laggait quand deux instances de udevd étaient lancées au démarrage. Et quand cela ne se produisait pas, la séquence de démarrage était normale et le système "rapide". Voici mon message en anglais avec les images bootchart qui mettent bien ceci en évidence : http://bbs.archlinux.org/viewtopic.php? ... 45#p364345 (cette découverte n'a pas eu l'air de soulever les foules d'ailleurs).

Je suppose donc suite à tout ceci que udevd bugue face à un mauvais choix de modules et surtout lorsqu'une sorte de conflit a l'air de se créer entre les choix d'un noyau abandonné à udev et des load_modules.sh qui pédalent dans la semoule ? Je précise que j'ai essayé de comprendre les initscripts mais que ceux-ci me semblent hors de cause (contrairement à ce que j'affirme dans mon message en anglais).

Voilà, j'espère que tout ceci n'est pas trop fumeux ni prétentieux, et surtout que cela pourra en aider quelques uns (car j'ai été moi-même à deux doigts de changer de distrib).
Avatar de l’utilisateur
cycyx
yeomen
Messages : 222
Inscription : dim. 02 mars 2008, 19:53

Message par cycyx »

Moi j'ai carrement vire pratiquement tout dans /etc/mkinitcpio.conf.

En fait, si tous les modules sont charges au demarrage, on peut se passer de quasiment tous les hooks.

Premiere etape : identifier les modules a charger.
Pour cela, utiliser lsmod et voir quels sont les premiers modules charges (ils sont dans le bas de la liste).
Pour moi :

Code : Tout sélectionner

sd_mod                 23320  2 
ext3                  123912  1 
jbd                    44052  1 ext3
mbcache                 7172  1 ext3
ata_piix               17668  1 
ata_generic             5636  0 
pata_acpi               4992  0 
libata                141840  3 ata_piix,ata_generic,pata_acpi
dock                    7952  1 libata
scsi_mod               92204  4 sr_mod,sg,sd_mod,libata
Donc ici, il faut utiliser les modules scsi_mod, libata, pata_acpi, ata_generic, ata_piix, ext3 et sd_mod.

Seconde etape : modifier le fichier mkinitcpio.conf en consequence.

Code : Tout sélectionner

MODULES="scsi_mod libata pata_acpi ata_generic ata_piix ext3 sd_mod"
BINARIES=""
FILES=""
HOOKS="base keymap"
(en fait, je pense que je pourrais meme me passer de "keymap" mais bon...)

Troisieme etape : relancer la generation du initramfs.

Code : Tout sélectionner

mkinitcpio -p kernel26
D'ailleurs a ce propos, je soulignerais que sur mon install (faite a partir de la derniere ISO rc4), avec un kernel up-to-date (2.6.25.4), mkinitcpio utilise le meme fichier de conf pour la generation du fallback, ce qui est d'une stupidite monumentale (editer le fichier /etc/mkinitcpio.d/kernel26.preset pour remedier au probleme -- chose qui devrait etre faite par les devs)...

Quatrieme etape : rebooter !
Au redemarrage, j'ai juste note un petit message du genre :

Code : Tout sélectionner

No device /dev/sda2 found. Trying to make one.
mknod b 8 2 /dev/sda2
Ceci n'est pas tres grave (le kernel cree son device en direct).

Ce qui peut mal se passer :
J'ai rencontre 2-3 soucis avec cette installation.
En effet, la derniere ISO installe un systeme qui se sert non plus des devices, mais des uuid pour trouver ses petits (dans /etc/fstab et dans /boot/grub/menu.lst).
Editez donc ces deux fichiers pour retourner a des valeurs "saines" et le probleme sera resolu.

Derniere astuce : pour gagner encore une demi-seconde (on sait a quel point l'affichage peut ralentir une machine... :p), j'utilise le parametre "quiet" lors du boot de mon kernel.

Code : Tout sélectionner

/boot/grub/menu.lst
kernel /boot/vmlinuz26 root=/dev/sda2 ro quiet
Voili voulou, mes deux cents.

P.S. : je suis d'accord, apres avoir fait plusieurs tests, le fait de zapper load-module.sh ne fait gagner que 2 ou 3 microsecondes...
Dernière modification par cycyx le mar. 27 mai 2008, 13:06, modifié 2 fois.
Avatar de l’utilisateur
tuxce
Maître du Kyudo
Messages : 6677
Inscription : mer. 12 sept. 2007, 16:03

Message par tuxce »

cycyx a écrit : D'ailleurs a ce propos, je soulignerais que sur mon install (faite a partir de la derniere ISO rc4), avec un kernel up-to-date (2.6.25.4), mkinitcpio utilise le meme fichier de conf pour la generation du fallback, ce qui est d'une stupidite monumentale (editer le fichier /etc/mkinitcpio.d/kernel26.preset pour remedier au probleme -- chose qui devrait etre faite par les devs)...
à la différence près mais relativement importante qu'une option "-S autodetect" est passé à mkinitcpio pour l'image fallback, ce qui a pour conséquence de ne pas limiter le ramdisk.
Avatar de l’utilisateur
cycyx
yeomen
Messages : 222
Inscription : dim. 02 mars 2008, 19:53

Message par cycyx »

Certes, mais cependant, si tu vires les "bons" hooks de ton fichier de conf (genre udev ou pata/sata/scsi) sans charger les modules, tu te retrouves coince, sans meme pouvoir compter sur le fallback.

C'est ce point que je trouve surprenant.

Ne pas prendre en compte le hook autodetect, c'est bien, pouvoir compter sur le fallback en cas de merdouillage, c'est mieux ! :p
Avatar de l’utilisateur
warnaud
Maître du Kyudo
Messages : 1640
Inscription : ven. 11 août 2006, 17:05
Localisation : Rolle (CH)

Message par warnaud »

Et après quand vous avez tous les pilotes nécessaires, il est aussi fort aisé de se faire un noyau avec ces pilotes "en dur" dans le noyau pour virer cette initcpio :)
Plus ça rate, plus ça a de chance de réussir. En somme, un succès n'est qu'une erreur qui a finit par réussir (même par erreur). Ne déséspérez donc pas et perseverez. Utilisez La Rache™
Patientia quod lard quod barrus planto diligo ut licentia
—¤÷(`[¤*Powered By *¤]´)÷¤—
Archlinux ~ Fvwm ~ Irssi ~ URxvt
Avatar de l’utilisateur
cycyx
yeomen
Messages : 222
Inscription : dim. 02 mars 2008, 19:53

Message par cycyx »

Oui, mais c'est pousser le vice ca ! ;)

Et puis tu passes de "modifier 3 fichiers de conf" a "recompiler son kernel", et ca, c'est pas newbie-friendly (voire user-friendly)...

En revanche, je vais peut-etre essayer de voir si la recompilation du noyau peut corriger mes problemes avec iwl4965...
Avatar de l’utilisateur
warnaud
Maître du Kyudo
Messages : 1640
Inscription : ven. 11 août 2006, 17:05
Localisation : Rolle (CH)

Message par warnaud »

Y'a wain qui maintient un pkg (kernel-source) super bien fait pour ça, après oui c'est "chaud" les premières fois...
Plus ça rate, plus ça a de chance de réussir. En somme, un succès n'est qu'une erreur qui a finit par réussir (même par erreur). Ne déséspérez donc pas et perseverez. Utilisez La Rache™
Patientia quod lard quod barrus planto diligo ut licentia
—¤÷(`[¤*Powered By *¤]´)÷¤—
Archlinux ~ Fvwm ~ Irssi ~ URxvt
Avatar de l’utilisateur
cycyx
yeomen
Messages : 222
Inscription : dim. 02 mars 2008, 19:53

Message par cycyx »

Je ne parlais pas pour moi :wink: , mais merci pour l'info sur le kernel-source.
Avatar de l’utilisateur
tuxce
Maître du Kyudo
Messages : 6677
Inscription : mer. 12 sept. 2007, 16:03

Message par tuxce »

cycyx a écrit :Certes, mais cependant, si tu vires les "bons" hooks de ton fichier de conf (genre udev ou pata/sata/scsi) sans charger les modules, tu te retrouves coince, sans meme pouvoir compter sur le fallback.
ca se défend :)
mais je pense qu'il y a incompréhension sur le mot "fallback", tu le vois comme un kernel de secours qui fonctionnerait quelque soit x, alors que je pense que les dev de arch le voit comme un kernel qui pallierait à un défaut éventuel de "autodetect" (dans le cas où il choisirait le mauvais module ou n'en détecterait pas un)

d'ailleurs la déscription qui en est faite:
contains all modules of subsystems
le meilleur moyen de ne pas se retrouver coincé est de garder dans un coin (et une entrée du bootloader) le noyau qui va bien ;)
Avatar de l’utilisateur
cycyx
yeomen
Messages : 222
Inscription : dim. 02 mars 2008, 19:53

Message par cycyx »

La encore, ca prete a confusion : "all modules of subsystems"...

All modules of _given_ susbsystems aurait ete plus juste.

Et effectivement, pour moi un "fallback", c'est comme une roue de secours, un truc sur lequel t'appuyer en cas de defaillance.
Il suffit de mettre un fichier de conf dedie, avec les hooks "surs" (genre 'base udev pata sata scsi filesystems'), voire celui du kernel d'install et le tour est joue.

C'est vraiment quelque chose que je ne comprends pas.
Et d'ailleurs, je me demande si sur une release plus ancienne ce n'etait pas le cas.

Quelqu'un pour verifier avant que je ne rentre chez moi, ce soir, tard ? :p
Avatar de l’utilisateur
tuxce
Maître du Kyudo
Messages : 6677
Inscription : mer. 12 sept. 2007, 16:03

Message par tuxce »

subsystem, fait référence au initramfs
en gros, le fallback est spécifique à une config de noyau plutot qu'à un système
sinon, effectivement, c'était le cas avant
http://archlinux.org/pipermail/arch-dev ... 05521.html
Avatar de l’utilisateur
cycyx
yeomen
Messages : 222
Inscription : dim. 02 mars 2008, 19:53

Message par cycyx »

- Removed /etc/mkinitcpio.d/kernel26-fallback.conf, because the default
fallback image doesn't need a separate config file anymore
J'adore...

J'aimerais vraiment savoir qui a pris cette decision relativement arbitraire et sur quelle(s) base(s) cela a ete fait.

Bref, forcement, on s'habitue a un bon vieux fallback des familles, propre, efficace, a qui on peut faire confiance et :paf: , ils te changent tout...

Ca me me rappelle les decision des dev kernel d'abandonner du matos, de ne plus vouloir de kernel tainted, ...
Ou les changements dans la pile iwl !!! (comment ca je boucle ?)

Bref, :cdmalad:
Avatar de l’utilisateur
tuxce
Maître du Kyudo
Messages : 6677
Inscription : mer. 12 sept. 2007, 16:03

Message par tuxce »

c'est une question de point de vue (et d'utilisation), personnellement, je pense que fallback != rescue
pour ce que de iwlwifi, ce n'est pas la "pile iwl" mais le driver "iwl" à la place de "ipw" qui utilise la pile "mac80211" à la place de "ieee80211"
la modif de ieee vers mac est faite par les dev du kernel, pas de arch
et c'est pas plus mal si on a plus de fonctionnalités par la suite, maintenant des phases de tests, y en a toujours :)
Avatar de l’utilisateur
cycyx
yeomen
Messages : 222
Inscription : dim. 02 mars 2008, 19:53

Message par cycyx »

Je sais que cela est du aux devs kernel et non arch (arch, c'est le probleme du initcpio :p), mais ca ne m'empeche pas de raler...

En revanche, je note tes remarques sur les diverses piles ! :D
Avatar de l’utilisateur
Skunnyk
Maître du Kyudo
Messages : 1137
Inscription : mer. 06 sept. 2006, 21:31
Localisation : IRC
Contact :

Message par Skunnyk »

De toutes façons les dev' de Arch sont connus pour tout casser d'une version à l'autre, sans faire de news, et sans forcement vraiment tout tester ... Mais bon, au bout d'un moment on est habitué >_<
Clark
archer
Messages : 142
Inscription : dim. 01 juil. 2007, 15:41

Message par Clark »

Euh, les gars, ce que vous dites est certes intéressant, mais la discussion coure (enfin c'est comme ça que je l'ai ouverte) sur les problèmes de udev et les conneries associées, pas sur la gestion du fallback.

Alors sans vouloir jouer au mauvais c** ni vouloir vous commander, ouvrez plutôt une nouvelle discussion à côté afin de laisser ici le champ libre à ceux que les problèmes de udev sur Arch intéressent vraiment.

Merci d'avance de vote compréhension ;)
Cactus
Maître du Kyudo
Messages : 2073
Inscription : sam. 16 sept. 2006, 10:39
Localisation : 31 - Toulouse Nord

Message par Cactus »

Je viens de tester les modifs pour mkinitcpio.conf, et j'obtiens "exactement" le même temps de chargement (chronomètre manuel).
Je resterai avec un boot de 90 secondes... :cry:
(30 secondes jusqu'à X, 10 secondes d'écran noir, puis lancement de KDE, avec notamment wicd, quadkonsole et kmail).

Merci tout de même d'avoir pris le temps de tout expliquer, j'y ai appris bcp !

PS : De temps en temps (1 fois / mois ?), j'observe moi aussi, avec le kernel standard, un lag important au démarrage : ça turbine 2 secondes, puis pause de 2 secondes, ça returbine, etc... obligé de redémarrer (tant bien que mal, car tout est gelé : saisie clavier, souris...). Parfois, le redémarrage déconne pareil... alors j'éteins tout pendant qq minutes, et je relance (bien souvent, c'est ok).
jiu
archer de cavalerie
Messages : 160
Inscription : dim. 25 mai 2008, 16:24
Localisation : Auckland, Nouvelle Zelande

Message par jiu »

merci bcp pour toutes ces infos. La j'ai pas trop le temps d'essayer tout ca, mais ca va eviter a pas mal de monde de perdre du temps a experimenter avec udev
Répondre