# Gcc , make.conf et l'option MAKEOPTS

## groutchopok

Bon j'a iconfiguré mon make.conf.

comme j'ai un bi-proc j'ai mis -j2  comme option dans le CFLAGS.

ptit problème : il me dit que cette option lui est inconnu lorsque 'il commence le bootstrap.

soit j'ai arrété. j'ai enlevé cette option...et "oh" quand je lis plus bah je vois l'option MAKEOPTS

qui justement permet d'ajouter l'option -j2 pour les bi-proc...

je décommente la ligne et je relance mon bootstrap.

mais je l'ai pas encore vu utiliser cette option de compilation alors que les options dans CFLAGS sont pris en compte...

QUID du -j2 de MAKOPTS?

si MAKEOPTS ne sert à rien, avant le emerge system, je pourrais redéfinir le -j2 dasn lemake.conf à la ligne CFLAGS mais est ce que ce sera encore util à ce moment là?

----------

## groutchopok

Bon l'impatience m'aura fait posté ça mais bon ça pourra servir à ceux qui ont un bi-proc :

Il semblerait que l'option "-j2" de MAKOPTS (dans le make.conf) soit prise en compte à partir de la compilation de la Glibc lors du bootstrap. ensuite et seuleument ensuite cette option est utilisée lors de la seconde compilation de gcc, des binutils ect...(attendez que je confirme la chose )

donc il y a fort à parier que lors du emerge system il fasse de même tout le temps.

...a suivre donc!  je vous tiens au courant

----------

## sergio

 *groutchopok wrote:*   

> Bon j'a iconfiguré mon make.conf.
> 
> comme j'ai un bi-proc j'ai mis -j2  comme option dans le CFLAGS.
> 
> ptit problème : il me dit que cette option lui est inconnu lorsque 'il commence le bootstrap.
> ...

 

Le "-j2" de MAKEOPTS n'a rien à voir avec le multi-processing !!!!

Il s'agit en fait de lancer plusieurs instances de "make" en paralèlle, ça marche aussi bien sur un monoprocesseur que sur un bi. Cette option n'a rien à faire dans le CFLAGS...

Si tu as un bi-processeur c'est au niveau de la compilation du noyeau que tu devras activer la prise en charge multi-processeurs...

PS : Il y a thread dans le forum français qui parle ça (le make -j) mais je n'ai pas le temps de te le rechercher...

A+

----------

## groutchopok

bon faut que je me mette à l'anglais moi...

pourtant il disait que c t une option à mettre si on avait 2 proc ou plus...

car ils disent que ça prend en compte les 2 procs lors de la compilation par la suite. si tu mets cette option alors que t'a 1 proc ça va servir à rien...

et j'ai bien vu l'option PARALLELISM="-j2"   utilisé pour les make, afin d'utiliser le 2 procs lors de la compilation.

c tout ce que je voulais moi : prendre en compte mes 2 procs lors de l'install pour que je me fasse moins chier à attendre. c tout

----------

## sergio

 *groutchopok wrote:*   

> bon faut que je me mette à l'anglais moi...
> 
> pourtant il disait que c t une option à mettre si on avait 2 proc ou plus...
> 
> car ils disent que ça prend en compte les 2 procs lors de la compilation par la suite. si tu mets cette option alors que t'a 1 proc ça va servir à rien...
> ...

 

Une petite explication :

Si tu lance deux instances de make en parallèle et que tu as deux procs il est quasi certain que le noyeau linux va répartir la charge sur les deux processeurs : en gros une instance de make par processeur (c'est pas toujours vrai). Si tu n'a qu'un seul processeur chaque instance de make ne dispose que de 50% du processeur et là encore c'est le noyeau qui gère la répartition des ressources...

Maintenant je te propose un test quand tu auras fini ton installation :

Tu lances un emerge avec l'option normale "make -j2" et tu observes avec "top" le comportement de make, tu verras que qu'il y a généralement deux instances en même temps...

Tu lances le même emerge avec "make -j4" et tu verras quatres instances en même temps. Si tu as une machine avec assez de mémoire le make -j4 devrais être plus rapide en général. Car la mémoire joue un rôle aussi grand que la puissance processeur (surtout en compilation) si tu n'en a pas assez tu vas voir que plus tu augmente la valeur make -j plus ta machine va ralentir et plus la compilation va prendre de temps. En effet les ressources occupées par une instance de make ne sont pas dispo pour l'autre...

En gros avec bi-pro on peut dire que :

Make -j2 = 1 instance de make par processeur

Make -j4 = 1 instance par demi-processeur !!!

De toute façon dans le multiprocessing comme dans le monoprocessing, les ressources allouées à une application quelle qu'elle soit ne sont pas disponibles pour une autre... 

Pour ma part je trouve que make -j2 est bon compromis dans tous les cas. 

Quant à l'install pourquoi tu ne prend pas directement le stage3 (ça marche dans la majorité des cas) et ça évite la phase de bootstrap qui c'est vrai est très longue...

A+

----------

## groutchopok

je voulais le stage 1 pour VRAIMENT tout customisé des le départ.

chuis ptet maso mais c po grave   :Surprised: )

merci pour ces pécisions sur -j2 je m'en souviendrais maintenant.

on peut pas dire que c t super documenté...et puis dans les docs que j'ai lu tout le monde parlais de "-j2 = bi-proc"

l'amalguame facile quoi

++

----------

## groutchopok

Bon rapido que kk1 me réponde : 

le emerge système à besoin de l'intervention huamine durant sa procédure ou non?

----------

## groutchopok

est ce qu'il est possible alors de faire une commande du genre "emerge system & emerge sync & emerge -u world"

?????

répondez moi s'il vous plait!  j'ai besoin de cette précision trés rapidement!    :Razz: 

----------

## arlequin

Avec deux & ça marche mieux   :Wink: 

----------

## DuF

ça peut être bien de faire l'emerge -u world comme ça peut ne pas être bien  :Smile: 

perso je préfère le faire à la main avec un -pu avant histoire d'être sûr qu'il ne vas pas faire de bêtise  :Smile: 

----------

## avendesora

groutchopok, fais un peu gaffe en chainant tes emerge.

Il est toujours bon de vérifier ses fichiers de /etc entre un emerge system

et un emerge world (faire 'etc-update' après emerge system, et regarder

s'il y a des fichiers à ajuster).

Aussi, pour mettre les choses au clair:

le "-jX" est une option de MAKE, pas de GCC (C'est pour ca que ca va pas dans les CFLAGS.). Tu peux compiler une appli avec "-j1" ou "-j312", le même code sera généré - pas plus rapide, pas plus lent, exactement le même. Tout ce qui va changer avec le -jX c'est le temps que ca va prendre pour compiler.

Pour obtenir du code différent (plus rapide/plus petit/plus "customizé"), c'est bien dans les CFLAGS que ca se joue (-march=, -OX, -fmachin, etc...)

----------

