Accélérer l’exécution de Makepkg sous Arch Linux, Manjaro et dérivés

makepkg.conf (-etc) - gedit_002

Si vous aimez les tips et plus particulièrement ceux qui vous font gagner du temps, la petite manipulation dont je vais vous parler va peut-être vous intéresser si vous tournez sur une distribution utilisant Pacman comme gestionnaire de paquets. C’est le cas pour Archlinux, Chakra, Manjaro et j’en passe… En effet et aussi étrange que cela puisse paraître ce bon vieux Pacman bosse très bien, mais même si votre CPU dispose de plusieurs cœurs Makepkg n’en utilise qu’un. Si vous voulez remédier à cela et forcer Makepkg à utiliser tous les cœurs disponibles sur votre architecture, ouvrez votre terminal et suivez le guide. Rassurez-vous c’est très simple.

La première chose à faire va être de vérifier le nombre de cœurs dont dispose votre CPU, ce que vous pouvez faire à l’aide de la commande suivante :

lscpu

Chez moi par exemple j’ai un retour de ce type :

[lavachelibre@lavachelibre ~]$ lscpu
Architecture : i686
Mode(s) opératoire(s) des processeurs : 32-bit, 64-bit
Boutisme : Little Endian
Processeur(s) : 2
Liste de processeur(s) en ligne : 0,1
Thread(s) par cœur : 1
Cœur(s) par socket : 2
Socket(s) : 1
Identifiant constructeur : GenuineIntel
Famille de processeur : 6
Modèle : 23
Nom de modèle : Intel(R) Core(TM)2 Duo CPU P8400 @ 2.26GHz
Révision : 6
Vitesse du processeur en MHz : 800.000
Vitesse maximale du processeur en MHz : 2267,0000
Vitesse minimale du processeur en MHz : 800,0000
BogoMIPS : 4523.98
Virtualisation : VT-x
Cache L1d : 32K
Cache L1i : 32K
Cache L2 : 3072K
[lavachelibre@lavachelibre ~]$

et donc 2 cœurs…

Vous voilà donc rencardés sur votre CPU et maintenant, il va falloir éditer le fichier makepkg.conf pour en décommenter une ligne. Entrez la commande suivante dans votre terminal, en remplaçant « gedit » par l’éditeur de texte que vous utilisez :

sudo gedit /etc/makepkg.conf

Vous devriez trouver une ligne semblable à celle-ci (voir aussi l’image d’illustration) :

#MAKEFLAGS="-j2"

où vous pouvez voir qu’il y a bien 2 CPU (-j2) et où le « # » indique que la ligne n’est pas prise en compte par le système. Pour que ce soit le cas il faut tout d’abord la décommenter en supprimant simplement le « # » présent au début de la ligne.

Une fois que c’est fait ajoutez 1 à la valeur indiquée par l’argument -J2, ce qui dans mon cas donnera -J3. Si votre CPU dispose de 4 cœurs indiquez -j5 etc etc…

Il ne vous reste plus qu’à valider les changements en enregistrant le fichier et le tour est joué. Si tout s’est bien passé Makepkg devrait avoir le feu aux fesses et travailler désormais en utilisant tous les cœurs disponibles.

Je n’ai pas fait de bench pour vérifier, mais si ça vous tente vous pouvez jeter un œil à cette vidéo pour voir ce que ça donne à l’usage :

Bon, ça ne casse pas trois pattes à un canard, mais c’est toujours ça de pris si vous ne connaissiez pas le truc.

Amusez-vous bien et bonnes mises à jour :)

via yoyo308.com | vidéo blog.desdelinux.net


17 Responses

  1. Loubrix 7 août 2014 / 1 h 21 min

    Bonsoir,

    Je voudrais corriger un truc assez inexact: Pacman ne compile rien, Pacman se contente d’installer ou désinstaller des paquets contenant des binaires (donc déjà compilés); il ne sait faire que ça, et rien d’autre.

    on pourrait à la limite dire que Yaourt compile, mais en fait, comme les autres AUR-helpers, Yaourt appelle Makepkg pour faire le boulot. et dans cet article, c’est la configuration de makepkg qu’on modifie (via /etc/makepkg.conf).
    ça n’aura aucune influence sur la vitesse de travail de Pacman, mais ça en aura sur la vitesse de travail de Makepkg, et donc de Yaourt, ou des gestionnaires de paquets graphiques utilisant AUR (Octopi et Pamac).

    voilà, je sais que je pinaille sur les termes, mais c’est dommage d’induire les gens en erreur, surtout si des gens qui débutent et ont déjà du mal à comprendre lisent ceci; l’article source aurait aussi besoin d’être corrigé, mais mon espagnol est trop mauvais…

    amicalement

    • Noireaude 7 août 2014 / 11 h 31 min

      Merci pour ces précisions, j’avoue que j’ai pris un drôle de raccourci dans le titre, où le (si j’ose dire) vient quand même tempérer le truc. Cela dit ça ne change rien et sur le fond tu as raison.

      Amicalement ;)

    • x11tete11x 11 août 2014 / 18 h 15 min

      hi, the spanish post is mine :D, i know the difference but, the post in DesdeLinux, first an « admin » sees your post and modify if is necesary, my original title was « Acelerar la compilacion en distros que usan pacman » cause makepkg is used to generate binary packages in pacman based distros

      • Noireaude 11 août 2014 / 18 h 37 min

        Salut X11TETE11X et bravo pour ton blog. Il est super.

        Je n’ai pas modifié le titre car comme je l’ai dit dans une réponse sur un forum, cette modification peut (peut-être) améliorer Pacman en agissant en amont, via Makepkg justement. Et parce que je suis têtu aussi :)

        Si j’ai bien saisi ton commentaire j’avais peut-être raison et toi aussi par la même occasion ;)

        Cordialement.

        • x11tete11x 11 août 2014 / 20 h 09 min

          thx!, but is not my blog :D, it’s a very intresting blog, the main idea of DesdeLinux it’s that you (a normal user) can upload an article, and the moderators verify it (and do changes) and finally the post it for all, BTW i upload a request for DesdeLinux to change the title of mine article to the previous one, cause pacman do not compile anything, it’s makepkg and it’s used for distros that use pacman as package manager

          cheers :D

          • Noireaude 11 août 2014 / 20 h 24 min

            Arf j’ai encore lu trop vite :D

    • Noireaude 6 août 2014 / 10 h 35 min

      En général quand une fonction de ce type est commentée par défaut, c’est que ça peut plantouiller un peu. Mais bon, je pars (peut-être un peu naïvement) du principe que les Archers ou les Manjaro boys/girls sont des bidouilleur(euse)s. Même pas peur :D

  2. Azamor 6 août 2014 / 7 h 01 min

    Bonjour,

    À mon humble avis, le MAKEFLAG désigne le nombre de cœurs utilisés lors de la compilation en utilisant make et non le nombre de cœurs utilisés par pacman, cela devrait donc fonctionner lorsqu’on utilise yaourt sur les paquets aur par exemple (à condition que ces derniers utilisent make dans le pkgfile). Tu pourras le vérifier en effectuant un benchmark d’ailleurs, les performances sur les paquets pré-compilés ne devraient pas changer.
    On peut d’ailleurs obtenir le même résultat que ce tips en rajoutant -j3 après chaque make se trouvant dans pkgfile.

  3. HS-157 6 août 2014 / 1 h 45 min

    Salut,
    Pour le nombre c’est « le nombre de coeur + 1 » et non le nombre de coeur.
    Donc si on a 2 coeurs, c’est « -j3 » et non « -j2 ».

    il le dit sur blog.desdelinux.net et sur sa vidéo, il a mit « -j9 » pour ses 8 coeurs,

    C’est la même chose pour compiler un noyau avec tout ses coeurs ;)

    • Waitnsea 6 août 2014 / 9 h 00 min

      pour un i7 :
      lscpu :
      Processeur(s) : 8
      on compte 7 ou 8 coeurs , -j7 8 ou 9 ?

      • Noireaude 6 août 2014 / 9 h 14 min

        Il faut ajouter 1 à ton nombre de coeur apparemment.

      • Philippe 6 août 2014 / 19 h 52 min

        Bonjour,

        C’est -j5 au maximum.
        car tu as un quad-core avec hyperthreading :
        Processeur(s) : 8
        Liste de processeur(s) en ligne : 0-7
        Thread(s) par coeur : 2
        Coeur(s) par socket : 4
        Socket(s) : 1

        • ChuangTseu 7 août 2014 / 15 h 28 min

          A noter que -j c’est juste le nombre maximal de jobs (tâches de compilation) pouvant tourner en parallèle, et qu’il est en réalité inutile de d’ajouter +1.
          Donc j == nombre de threads disponibles sur la machine.

          2 coeurs (2 threads) ? -j2
          4 coeurs (4 threads) ? -j4
          4 coeurs avec Hyperthreading (8 threads) ? -j8
          etc…

          Au passage un petit lien pour le myth busting du -j(cpu+1) : http://www.timocharis.com/help/jn.html

    • Noireaude 6 août 2014 / 9 h 26 min

      J’avais vu ça mais je croyais que ce n’était pas systématique et lié à la technologie de son proc (hyperthreading). J’ai édité le post et précisé ;)

Comments are closed.