Forum Astuces.divers [Terminal] make -jx, ou comment ralentir/acceler une compilation

Posté par  .
Étiquettes : aucune
0
30
mar.
2005
Lorsque vous compiler une application ou une bibliothèque, vous vous demandez sûrement comment faire pour que cela aille plus vite. il y a 4 solutions :
1/ vous avez une machine peu puissante (jusqu'à 300MHz), dans ce cas, vous pouvez faire make MAKE=make -jx (ou x appartient à [2;4])
2/ vous avez une machine qui se tient (de 300 à 700 MHz), dans quel cas vous pouvez passer x à des valeurs un peu plus grandes, appartennant à [4;8].
3/ vous avez un super-calculateur de la mort qui tue, ou une machine de plus de 700MHz, dans quel cas vous pouvez passer x à [8;14].
4/ vous aimez prendre des risques et faites make MAKE=make -j, auquel cas toutes les compilations sont lancés en meme temps, et quand il y en a 200, ne vous étonnez pas que la machine freeze ...
--- notez que cela peut ralentir votre machine, normal pour des compilations, mais la c'est un peu plus violent, donc prudence !
  • # Sur quoi tu te bases ?

    Posté par  . Évalué à 0.

    J'aime bien cette astuce (ça fait longtemps que j'utilise ce genre de chose) mais j'aimerais savoir sur quelles informations tu te bases pour le 'x'. Est-ce que c'est suite à des expériences personnelles ou bien est-ce que tu l'as lu ? C'est tout je serais interéssé par cette information. Merci
    • [^] # Re: Sur quoi tu te bases ?

      Posté par  . Évalué à 1.

      perso, un 'make -j' pour compiler le noyo sur un bi-p2 450 256Mo de ram et scsi ça passait tout à fait bien. Par contre fallait pas vouloir faire autre chose en même temps, vu que même le curseur de la souris crantait sévère
  • # C'est faux...

    Posté par  (site web personnel) . Évalué à 1.

    J'ai testé ça sur ma machine (P-III 600), make -j2 prends exactement le même temps que make, sur une compil de 20mn à peu près. Si on augmente le nombre de processes, on commence même à être plus lent qu'avec un seul.

    Je crois que cette "astuce" date du temps où les HD étaient assez lents, maintenant elle n'est plus vraie. Si tu veux aller plus vite avec make -j2, prends un bi-pro. :-)
    • [^] # Re: faux mais non c'est vrai

      Posté par  . Évalué à -1.

      D'une maniere generale et statistique il est insteressant de mettre l'option -j 4 par exemple. En effet meme avec une machine momo-proc, il peux y avoir des io blocantes, des temps de latences qui font que la compilation d'un fichier ne prend pas 100% des ressources (il se peu aussi qu'il n'y ai pas d'avantage du tout, mais je n'ai jamais rencontre ce cas). pour une machine multi proc, y'a pas photo c'est mega plus rapide. Je parle en connaissance de cause, tous les jours je compile des prg sur station sun mono et multi. Maintenant il y aussi l'architecture qui rentre en compte (ide, scsi, ...)
      • [^] # poru l histoire

        Posté par  . Évalué à 1.

        moi j ai vu ca dans la doc freebsd , je l ai tester sur un quadri alpha , un bi alpha , un mono et sur un bi et mono athlon : pas de fotos possible (j ai tester avec une compile de kernel) , si on met make -jn ou n est le nombre de proc , ca va clairement plus vite ( meme plus le tps de se prendre un café :(( )
        • [^] # Re: poru l histoire

          Posté par  (site web personnel) . Évalué à 1.

          Sur les machines SMP, les meilleurs résultats sont obtenus avec n=nbcpus+1

          Concernant le -j sans arguments, il est pratique de faire :
          MAKE=make -j -l 10 dans le top Makefile, ce qui va limiter le load average de la machine à 10

          Evidemment, l'option j ne peut que ralentir la machine sur les machines monoprocesseur !
      • [^] # Re: faux mais non c'est vrai

        Posté par  . Évalué à 1.

        Bon je sais que c'est hors-sujet, mais au niveau de la notation du poste de ctof quelque chose m'intrigue:
        [+]Re: faux mais non c'est vrai (Score: -1/#0, #130031) Notez! [ - ou + ]

        Donc dès qu'il a posté il était à [-1], c'est un bug?
        • [^] # Re: faux mais non c'est vrai

          Posté par  . Évalué à 1.

          Non, à une certaine époque depuis longtemps révolue, on pouvait poster des commentaires avec une note initiale de -1.
    • [^] # Re: C'est faux...

      Posté par  . Évalué à 1.

      pas du tout. sur mes propres programmes (C et C++) qui mettent généralement 1minute en j1 à compiler sur un celeron700Mhz/256mo, passer en j4 diminue le temps par 3. l'utilisation CPU passe de 55% à 85%

      idem pour le noyau: j6 me permet de passer de 22min à 15min et l'utilisaétion CPU touche les 85%
    • [^] # Re: C'est faux...

      Posté par  (site web personnel) . Évalué à 1.

      Sur mon bi-pro (p3-866), make -j3 est 2 a 3 fois plus rapide que make tout court. Sur du C (typiquement, le noyau), chaque fichier mets moins d'une demi-seconde pour se compiler. Avec trois qui si compilent en meme temps, j'ai un scrolling continu! Mais aujourd'hui, le plus gros gain en rapidite que j'ai obtenu, c'est grace ccache!
      • [^] # Re: C'est faux...

        Posté par  (site web personnel) . Évalué à 1.

        pas d'accord sur les monopross...

        J'ai un athlon-XP 2100+ et si je balance make MAKE=make -j14, mplayer 1pre2 met une dizaine de seconde, sinon sa met 3 minutes...

        par contre la différence c'est que la charge de 10-20% passe a 99% ave n=14!!!
    • [^] # Re: C'est faux...

      Posté par  . Évalué à 1.

      J'ai un Bi-Barton 2500+ avec 1.5Go de DDR et le fait de mettre -j4 améliore le temps de compilation du kernel c'est vrai (mais de pas grand chose) mais -j4 ou -j10 ou plus ne changera strictement rien au temps de compilation...
  • # make -j nb pour les dernieres releases

    Posté par  . Évalué à 1.

    pour les dernieres releases il faut mieux mettre un espace apres le -j
  • # La même chose avec make-kpkg

    Posté par  . Évalué à 1.

    Si vous utilisez make-kpkg pour compiler des paquets noyaux sous Debian, l'option -j sera refusée (même placée dans la variable MAKE). À la place, il faut faire:
    CONCURRENCY_LEVEL=x make-kpkg [options]
    • [^] # Re: La même chose avec make-kpkg

      Posté par  . Évalué à 1.

      sur quoi tu te bases ?
      perso un MAKE = make -j passe tres bien sur ma woody; juste qlq freeze ;)
      • [^] # Re: La même chose avec make-kpkg

        Posté par  . Évalué à 1.

        Il a dit "quand tu compiles ton paquet avec make-kpkg"... En tout cas, j'ai le problème aussi, donc je pense que tu ne parles pas de la même chose que nous : pas de "make clean && make xconfig && make dep && make bzimage && make modules && make modules_install && make install", mais "make-kpkg --config x --bzimage --revision=2.4.20.3 --append-to-version maison kernel_image"

        oki ?
  • # Re: make -jx, ou comment ralentir/acceler une compilation

    Posté par  . Évalué à 1.

    "Lorsque vous compiler une application ou une librairie"

    Deux fautes qui me hérissent le poil ici :

    • vous -> compileZ et non pas compiler (conjugaison)
    • une bibliothèque et non pas une librairie
  • # Si vous avez plusieurs machines : LA solution "distcc"

    Posté par  . Évalué à 1.

    http://distcc.samba.org/(...)

    copier coller de la page principale :
    ------------
    distcc is not itself a compiler, but rather a front-end to the GNU C/C++ compiler (gcc), or another compiler of your choice. All the regular gcc options and features work as normal.

    distcc is designed to be used with GNU make's parallel-build feature (-j). Shipping files across the network takes time, but few cycles on the client machine. Any files that can be built remotely are essentially "for free" in terms of client CPU.

    distcc has been under development since early 2002. It reliably and successfully compiles large, complex free and proprietary software systems. Programs known to build correctly with distcc include the Linux kernel, rsync, KDE, GNOME (via GARNOME), Samba and Ethereal.

    distcc is nearly linearly scalable for small numbers of machines: Building Linux 2.4.19 on a single 1700MHz Pentium IV machine with distcc 0.15 takes 6 minutes, 45 seconds. Using distcc across three such machines on a 100Mbps switch takes only 2 minutes, 30 seconds: 2.6x faster. The (unreachable) theoretical maximum speedup is 3.0x, so in this case distcc scales with 89% efficiency.
    -----------
    Ca ca booste vraiement votre make !
    Guillaume
    • [^] # Re: Si vous avez plusieurs machines : LA solution

      Posté par  . Évalué à 1.

      ben t 'es gentil mais copier-coller sans même résumer en Français...
      Grumf :-/

      distcc réparti les tâches de compilation entre plusieurs
      machines d'un réseau local (ou distant, mais sans aucune sécurité).

      Il y a un serveur, distccd, sur la machine principale, qui envoie le code
      source directement sorti du préprocesseur à tous les clients distcc qui
      répondent à l'appel - lesquels compilent ce qui leur est donné et
      renvoient du code objet.

      C'est puissant, très souple, et surtout les perfs grimpent de manière
      quasi linéaire avec le nombre de processeurs disponibles.

      Pour l'installation, si on a l'intention de compiler du code C++, il faut
      que toutes les machines engagées dans le réseau aient un g++
      compatible niveau ABI (les 3.x et plus sont censées avoir une ABI stable).

      Ah oui, j'allais oublier : combiner distcc à ccache (http://ccache.samba.org(...))
      - voire utiliser ce dernier seul - donne d'excellents résultats (vitesse x10
      dans certains cas, notemment quand on recompile plusieurs fois le
      même arbre)

      Voilà voilà...
  • # Re: make -jx, ou comment ralentir/acceler une compilation

    Posté par  . Évalué à 1.

    Plus interessant si vous avez un parc de machine:

    make CC=distcc -j x

    Il faut pour cela installer distcc sur chaque machine, et y lancer distccd. Le x est à priori le nombre de machines x2.

    Ca marche top, sans souci pour la mise en place... un peu de mal avec le noyal cependant.

    http://distcc.samba.org(...)
  • # Re: make -jx, ou comment ralentir/acceler une compilation

    Posté par  . Évalué à 1.

    Il est important aussi de regarder la RAM pour savoir le nombre de process de compilation que l'on peut lancer en simultanées.

    Pasque si l'on a pas beaucoup de RAM, il n'y en a pas assez pour toutes les instances de gcc -> swap -> temps de compilation x10
  • # Pour Gentoo

    Posté par  (site web personnel) . Évalué à 2.

    L'option -j x peut se mettre dans le /etc/make.conf

    sous la forme de la ligne suivante :

    MAKEOPTS="-jx"

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.