OVH Cloud OVH Cloud

Augmenter la vitesse de compil du noyau

7 réponses
Avatar
Hugolino
Bonjour,

Je suis en train d'installer des Debian chez des copains. Et qui dit
installation dit recompilattion pour prendre en compte leurs
périphériques.
Mais sur un 350 MHz/256Mo, la compil prend une demie-heure au bas mot
(avec un 2.4.24)
Il y a de ça un certain temps (du temps du 2.2 ou du 2.0), il était
possible d'augmenter la vitesse de compilation du noyau.

Pour cela il suffisait dans /usr/src/linux/Makefile de modifier une
ligne:
A la place de "MAKE=make"
On mettait "MAKE=make -j N"
Avec N le nombre de jobs simultamément possible, N étant déterminé par
la formule N = ( (RAM en Mo) / 8 ) + 1

Chez mon copain qui dispose de 256 Mo de RAM, on aurait n = 33

Et ça marchait très bien, Je me rapelle que sur mon 233MHz/64Mo la
charge explosait, mais on avait une dizaine de make qui s'exécutait en
même temps et la compil du noyau boostait.

Le problème est que je ne trouve pas cette ligne dans le makefile de la
lignée des 2.4.X

Bref: Que modifier pour que la compil du noyau s'effectue plus
rapidement sur une machine faible en processeur, mais bien dotée en RAM ?


PS: En explorant le /usr/src/linux/makefile, je suis tombé sur l'option
':htmldocs: sgmldocs
$(MAKE) -C Documentation/DocBook html'

Donc je m'attendais a trouver pleinde doc au format html dans le-dit
répertoire... Que nenni.. C'est plein de 'sgml' et de 'tmpl'. Avec quoi
quoi peut-on lite cette doc ? Y aurait-il un parser (c'est comme ça
qu'on dit ?) capable de transformer ces fichiers en html, c'est à dire
(petit lamers deviendra grand) en language human-readable)


Merci de votre aide


--
"Marre des versions stables, je vais tester les instables, au moins je
saurai pourquoi ça plante !"
-+- JCD in Guide du linuxien pervers - "Maintenant que j'ai liquidé le
tout venant, je peux me risquer dans le bizarre". -+-

--
Pour contacter l'équipe de modération : moderateurs-fcolm@efrei.fr
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.

7 réponses

Avatar
Christian Marillat
Hugolino writes:

Bonjour,



Bonjour,

Je suis en train d'installer des Debian chez des copains. Et qui dit
installation dit recompilattion pour prendre en compte leurs
périphériques.



Ho, le méchant troll.

[...]

Bref: Que modifier pour que la compil du noyau s'effectue plus
rapidement sur une machine faible en processeur, mais bien dotée en RAM ?



Si tu es sous debian tu dois utiliser make-kpkg ? Donc tu vas dans
/etc/kernel-pkg.conf et tu ajoutes 'CONCURRENCY_LEVEL := X' ou X est le
nombres de jobs que tu veux.

Pour plus d'options :

man 5 kernel-pkg.conf

Christian

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
Avatar
TiChou
Dans l'article news:,
Hugolino écrivait :

Bonjour,



Bonjour,

Je suis en train d'installer des Debian chez des copains. Et qui dit
installation dit recompilattion pour prendre en compte leurs
périphériques.
Mais sur un 350 MHz/256Mo, la compil prend une demie-heure au bas mot
(avec un 2.4.24)
Il y a de ça un certain temps (du temps du 2.2 ou du 2.0), il était
possible d'augmenter la vitesse de compilation du noyau.

Pour cela il suffisait dans /usr/src/linux/Makefile de modifier une
ligne:
A la place de "MAKE=make"
On mettait "MAKE=make -j N"
Avec N le nombre de jobs simultamément possible, N étant déterminé par
la formule N = ( (RAM en Mo) / 8 ) + 1



D'où vous tenez cette formule que je qualifierai bien de fantaisiste ?

La règle d'usage pour déterminer le nombre de jobs à mettre en argument à
l'option -j de make est le nombre de cpu + 1. Donc, dans le cas d'un
monoprocesseur, -j2. Au delà on améliore en rien les performances, bien au
contraire (cf fin du post).

Chez mon copain qui dispose de 256 Mo de RAM, on aurait n = 33

Et ça marchait très bien,



Sûrement pas, juste une impression.

Je me rapelle que sur mon 233MHz/64Mo la charge explosait,



Forcément oui.

mais on avait une dizaine de make qui s'exécutait en même temps



Et comme la charge était énorme, chaque instance de make n'avait que très
peu de ressources disponibles pour travailler.

et la compil du noyau boostait.



Elle s'étouffait vous vouliez dire.

Le problème est que je ne trouve pas cette ligne dans le makefile de la
lignée des 2.4.X

Bref: Que modifier pour que la compil du noyau s'effectue plus
rapidement sur une machine faible en processeur, mais bien dotée en RAM ?



Il n'y a pas besoin de modifier le Makefile. Il suffit simplement de passer
l'option '-j N' en ligne de commande :

$ make -j2 bzImage

Merci de votre aide



De rien.

Je vous laisse maintenant apprécier différents tests de compilation sur
trois types de machine avec différentes valeurs pour l'option '-j'.
Vous remarquerez alors que, dès qu'on dépasse la valeur de cpu+1, les temps
de compilation augmentent.

Pentium 3 550MHz - RAM 256Mo - Slackware 9.0

:~/linux-2.4.25# time make bzImage
[...]

real 13m47.685s
user 12m58.150s
sys 0m37.450s

:~/linux-2.4.25# time make -j2 bzImage
[...]

real 13m40.676s
user 12m59.860s
sys 0m35.750s

:~/linux-2.4.25# time make -j3 bzImage
[...]

real 13m40.880s
user 13m1.420s
sys 0m35.750s

:~/linux-2.4.25# time make -j4 bzImage
[...]

real 13m41.397s
user 13m2.760s
sys 0m35.060s

:~/linux-2.4.25# time make -j5 bzImage
[...]

real 13m41.541s
user 13m0.570s
sys 0m36.800s


Pentium 3 1GHz - RAM 640Mo - Gentoo 1.4

pegase linux-2.4.20 # time make bzImage
[...]

real 8m4.589s
user 7m13.530s
sys 0m35.895s

pegase linux-2.4.20 # time make -j2 bzImage
[...]

real 7m55.599s
user 7m7.230s
sys 0m35.715s

pegase linux-2.4.20 # time make -j3 bzImage
[...]

real 8m3.905s
user 7m26.835s
sys 0m34.520s

pegase linux-2.4.20 # time make -j4 bzImage
[...]

real 8m7.209s
user 7m28.335s
sys 0m33.200s

pegase linux-2.4.20 # time make -j81 bzImage
[...]

real 25m36.938s
user 7m35.670s
sys 0m42.705s

(640 / 8) + 1 = 81


Bi Pentium 3 1,2GHz - RAM 2Go - Mandrake 9.2

[ linux-2.4.25]$ time make bzImage
[...]

298.69user 18.15system 5:16.62elapsed 100%CPU (0avgtext+0avgdata
0maxresident)k
0inputs+0outputs (632352major+1567042minor)pagefaults 0swaps


[ linux-2.4.25]$ time make -j2 bzImage
[...]

305.84user 19.41system 2:49.11elapsed 192%CPU (0avgtext+0avgdata
0maxresident)k
0inputs+0outputs (703603major+1575740minor)pagefaults 0swaps


[ linux-2.4.25]$ time make -j3 bzImage
[...]

306.24user 19.12system 2:46.33elapsed 195%CPU (0avgtext+0avgdata
0maxresident)k
0inputs+0outputs (633175major+1567218minor)pagefaults 0swaps

[ linux-2.4.25]$ time make -j4 bzImage
[...]

306.90user 18.95system 2:46.32elapsed 195%CPU (0avgtext+0avgdata
0maxresident)k
0inputs+0outputs (633175major+1567219minor)pagefaults 0swaps

[ linux-2.4.25]$ time make -j10 bzImage
[...]

309.08user 17.93system 2:46.65elapsed 196%CPU (0avgtext+0avgdata
0maxresident)k
0inputs+0outputs (633175major+1567238minor)pagefaults 0swaps

--
TiChou

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
Avatar
Daniel Dechelotte
TiChou a écrit :

| La règle d'usage pour déterminer le nombre de jobs à mettre en
| argument à l'option -j de make est le nombre de cpu + 1. Donc, dans le
| cas d'un monoprocesseur, -j2. Au delà on améliore en rien les
| performances, bien au contraire (cf fin du post).
| [...]

Oui. Merci pour les stats !

| Je vous laisse maintenant apprécier différents tests de compilation
| sur trois types de machine avec différentes valeurs pour l'option
| '-j'. Vous remarquerez alors que, dès qu'on dépasse la valeur de
| cpu+1, les temps de compilation augmentent.
|
| Pentium 3 550MHz - RAM 256Mo - Slackware 9.0
| [...]

Une amelioration de 0.8 % entre -j1 et -j2 pour cette machine au nom charmant.

| Pentium 3 1GHz - RAM 640Mo - Gentoo 1.4
| [...]

Une amelioration de 1.9 % de -j1 a -j2. Mais c'est peut-etre la RAM
supplementaire qui permet de cacher tous l'arbre de compil et
d'expliquer la "meilleure amelioration".

| Bi Pentium 3 1,2GHz - RAM 2Go - Mandrake 9.2
| [...]

Une amelioration de 47.5 % entre -j1 et -j3.

En gros, pour nos autres petites gens qui n'ont qu'un processeur, ca ne
vaut probablement pas le coup. (enfin, ca ne coute pas grand chose non
plus, sauf peut-etre avoir les sorties des compils qui se melangent).

Je m'attendais a au moins 10 % d'amelioration, me voila detrompe.

--
Daniel Déchelotte
http://yo.dan.free.fr/

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
Avatar
Hugolino
Le 02 Mar 2004 13:28:02 GMT, TiChou a écrit:
Dans l'article news:,
Hugolino écrivait :

> Bonjour,

Bonjour,

> Je suis en train d'installer des Debian chez des copains. Et qui dit
> installation dit recompilattion pour prendre en compte leurs
> périphériques.
> Mais sur un 350 MHz/256Mo, la compil prend une demie-heure au bas mot
> (avec un 2.4.24)
> Il y a de ça un certain temps (du temps du 2.2 ou du 2.0), il était
> possible d'augmenter la vitesse de compilation du noyau.
>
> Pour cela il suffisait dans /usr/src/linux/Makefile de modifier une
> ligne:
> A la place de "MAKE=make"
> On mettait "MAKE=make -j N"
> Avec N le nombre de jobs simultamément possible, N étant déterminé par
> la formule N = ( (RAM en Mo) / 8 ) + 1

D'où vous tenez cette formule que je qualifierai bien de fantaisiste ?



De <http://www.faqs.org/docs/Linux-mini/Modules.html>

Mais c'est vrai que Google donne plus de réponses à propos des machines
multi-processeurs (avec «where N = number of CPU + 1»)

Merci de votre réponse.

--
je suis assez têtu et utilise toujours Linux en root et en voulant effacer
tous les fichiers dans un repertoire j'ai fait un rm -fr * or en tapant sur
entree je me suis rendu compte que je suis sur / : oooooooups
-+- T in Guide du linuxien pervers : "Et paf le tétu" -+-

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
Avatar
Jeremy JUST
On 01 Mar 2004 08:32:47 GMT
Hugolino wrote:

On mettait "MAKE=make -j N"
Avec N le nombre de jobs simultamément possible, N étant déterminé par
la formule N = ( (RAM en Mo) / 8 ) + 1

Chez mon copain qui dispose de 256 Mo de RAM, on aurait n = 33



Il a combien de processeurs, ton copain?
Il me semble peu utile de demander beaucoup plus de processus qu'il n'y
a de processeurs.
Pour mes compilations courantes, sur une machine à 2 processeurs, je
demande 4 processus simultanés (et sur une 12 procs, je demande (12 -
load_average), mais ça, c'est parce que je ne suis pas tout seul que je ne
veux pas gêner les autres).

Demander un nombre de processus légèrement supérieur au nombre de
processeurs permet de mieux utiliser globalement la machine: pendant que
quelques compilateurs tourneront à fond sur les CPU (sans I/O), d'autres
pourront charger leurs données en RAM depuis le disque (étape qui prend
peu de CPU mais beaucoup d'I/O).
Intuitivement, j'ai l'impression qu'un nombre trop grand de processus
simultanés risque d'être moins intéressant.


Accessoirement, l'option `-j n' complique *beaucoup* le débuggage,
puisque les sorties de tous les processus sont enchevêtrées. Et quelques
compilations ne la supporte pas (de mémoire, la compilation de Xemacs
plante lamentablement quand on la tente en parallèle).


la charge explosait



Si c'est ton but, tu peux utiliser `-j' sans argument. ;)


PS: En explorant le /usr/src/linux/makefile, je suis tombé sur l'option
':htmldocs: sgmldocs
$(MAKE) -C Documentation/DocBook html'

Donc je m'attendais a trouver pleinde doc au format html dans le-dit
répertoire... Que nenni.. C'est plein de 'sgml' et de 'tmpl'.



Normal: c'est du DocBook, le format natif de la doc, et la règle que tu
as recopiée ci-dessus le convertit en HTML.


Avec quoi quoi peut-on lite cette doc ?



Le format DocBook est standard. Tu devrais trouver sans difficulté plein
de filtres pour le convertir en d'autres formats. Tiens, je l'ignorais,
mais j'ai tout ça d'installé sur ma Mdk9.2:
docbook2dvi docbook2man docbook2rtf docbook2texi
docbook2html docbook2ps docbook2tex docbook2txt

Le plus simple, si tu as l'espace disque suffisant, est de laisser le
makefile que tu as lu s'en occuper (il fera appel au bon convertisseur
avec les bonnes options).

--
Jérémy JUST

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
Avatar
Jeremy JUST
On 02 Mar 2004 13:28:02 GMT
TiChou wrote:

Il n'y a pas besoin de modifier le Makefile. Il suffit simplement de
passer l'option '-j N' en ligne de commande :

$ make -j2 bzImage



Je ne suis pas sûr que cela fonctionne aussi bien que désiré: le premier
make (le père des autres) utilisera bien cette option, mais d'après la doc
de Make, il ne la passera pas à ses fils.
Make a ce comportement pour éviter une explosion:
- le père lance 2 fils
- chaque fils lance 2 fils...
- qui lancent chacun 2 fils...

Donc ça ne marchera que si le make-père réalise un travail significatif
de compilation. Or dans le Makefile du noyau Linux, ce n'est pas le cas:
je vois plutôt apparaître des règles du genre:
$(MAKE) CFLAGS="$(CFLAGS) $(CFLAGS_KERNEL)" $(subst $@, _dir_$@, $@)
qui lancent un make-fils (qui n'aura donc pas l'option `-j', d'où la ruse
de Hugolino, qui modifiait directement le contenu de $MAKE).

--
Jérémy JUST

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
Avatar
Arnaud Launay
Le 07 Mar 2004 16:29:34 GMT, Jeremy JUST écrivit:
Donc ça ne marchera que si le make-père réalise un travail significatif
de compilation. Or dans le Makefile du noyau Linux, ce n'est pas le cas:
je vois plutôt apparaître des règles du genre:
$(MAKE) CFLAGS="$(CFLAGS) $(CFLAGS_KERNEL)" $(subst $@, _dir_$@, $@)
qui lancent un make-fils (qui n'aura donc pas l'option `-j', d'où la ruse
de Hugolino, qui modifiait directement le contenu de $MAKE).



Sauf que pour le 2.6, ils ont modifie la partie construction pour
que justement cette option marche, en la passant juste au pere.

Arnaud.

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.