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
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
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 ;)
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
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.
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
Arf j’ai encore lu trop vite :D
A noter que le -j peut provoquer des erreurs de compilation. ( http://answers.ros.org/question/70240/catkin_make-only-working-with-j1-option-giving-compile-error-ot par exemple)
Mais en général c’est très bien :)
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
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.
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 ;)
pour un i7 :
lscpu :
Processeur(s) : 8
on compte 7 ou 8 coeurs , -j7 8 ou 9 ?
Il faut ajouter 1 à ton nombre de coeur apparemment.
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
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
Merci pour la précision. Nous avons une fois de plus la preuve que bien souvent, les commentaires sont plus instructifs que le billet :)
Salut,
Autre référence sur gnu.org
http://www.gnu.org/software/make/manual/make.html#Parallel
(Merci Christian)
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é ;)