Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

usages recommand

8 réponses
Avatar
Christophe PEREZ
Bonjour,

De longue date, sous Gentoo, j'ai par habitude de configurer portage pour
que emerge utilise ccache ET distcc pour chacune de mes machines.

Mais je viens de réaliser que ce n'est le cas qu'en local. En effet, la
compilation distance par distcc elle, n'utilise pas le cache de ccache,
tout au moins pour ce que je vois et ce que j'en comprends.

En plus clair, j'ai une machine A et une machine B, toutes les 2 avec
gentoo à jour, donc même gcc, distcc et ccache.

Si je lance une première compilation par emerge de firefox (une nouvelle
version jamais compilée sur aucune des machines) sur la machine A, le
ccache de la machine A va se "remplir", mais comme (à priori) le distcc
de la machine B ne fait pas appel à ccache, celui de B ne bougera pas.

Si ensuite, je lance cette même compilation de firefox sur la machine B,
je vais avoir le ccache de la machine B qui va se "remplir", mais celui
de la machine A ne sera pas utilisé puisque son distcc ne fait pas appel
à ccache.

Du coup, aucun des 2 ccaches n'aura été utile, et ne le sera jamais, sauf
si je recompile la même version de firefox.

Bon, je ne suis sûr de rien de ce que j'avance là, c'est juste pour
lancer la discussion et faire comprendre ou m'amène mon raisonnement.
Qu'en pensent les vrais connaisseurs ?
Ai-je raison ?
Est-ce un fonctionnement normal parce que pour une raison qui m'échappe
ça doit fonctionner comme ça ?
Et dans le cas contraire, que faut-il changer à la configuration de distcc
pour qu'il exploite ccache, si possible à la méthode gentoo ?
Parce que je lis bien un truc sur le sujet dans le man de distcc, mais
déjà je n'y comprends pas grand chose, mais en plus, je ne vois pas
comment ça s'adapterait à la sauce gentoo. Et mes recherches sur le net
sur le sujet ne donnent pas grand chose.

NB : je ne cherche pas à faire l'usine à gaz qui consisterait à avoir un
ccache commun à toutes les machines dans lequel taperaient toutes les
compilations. Je voudrais juste que lorsque distcc délègue une tache N à
une machine, celle-ci exploite son ccache.

8 réponses

Avatar
Emmanuel Florac
Le Tue, 20 Aug 2013 01:56:13 +0000, Christophe PEREZ a écrit:

Et dans le cas contraire, que faut-il changer à la configuration de
distcc pour qu'il exploite ccache, si possible à la méthode gentoo ?



Logiquement, le mieux serait de déclarer "ccache gcc" comme compilateur
dans la config de distcc sur les deux machines. Ainsi les compilations
locales seraient systématiquement cachées de part et d'autre. Bon, je
pense que ça ne coûte rien d'essayer :)

Par contre, dans l'autre sens, si tu utilises ccache pour piloter distcc,
alors le cache de la machine initiant la compilation contient le résultat
de la compilation pour tous les hôtes distcc. Il me semble délicat de
cumuler les deux modes, à moins de stocker le cache dans un partage NFS.

--
Question: How does a large software project get to be one year late?
Answer: One day at a time!
Fred Brooks
Avatar
Christophe PEREZ
Le Tue, 20 Aug 2013 11:30:18 +0000, Emmanuel Florac a écrit :

Logiquement, le mieux serait de déclarer "ccache gcc" comme compilateur
dans la config de distcc sur les deux machines. Ainsi les compilations
locales seraient systématiquement cachées de part et d'autre. Bon, je
pense que ça ne coûte rien d'essayer :)



C'est ce qu'il faudrait que je trouve...
Effectivement, le man parle de quelque chose du genre, mais comme je
l'avais dit, je n'avais pas bien capté le sens. Je vais revoir ça.

Par contre, dans l'autre sens, si tu utilises ccache pour piloter
distcc, alors le cache de la machine initiant la compilation contient le
résultat de la compilation pour tous les hôtes distcc. Il me semble
délicat de cumuler les deux modes, à moins de stocker le cache dans un
partage NFS.



A priori ce n'était pas le but. Et c'est justement la partie dans le man
qui me laisse(ait) perplexe.

Sinon, personne n'a d'à-priori contre cette solution ? Pas de
ralentissement/effet inverse à l'effet souhaité à craindre ? Hors tests
spécifiques, ce n'est pas souvent facile de se rendre compte de
l'efficacité de ce type de montage.
Avatar
Christophe PEREZ
Le Tue, 20 Aug 2013 13:44:33 +0000, Christophe PEREZ a écrit :

Je vais revoir ça.



J'ai donc tenté de rajouter (machine B)
DISTCC_CC="ccache gcc"
dans /etc/env.d/02distcc
qui est bien pris en compte puisque
# distcc-config --get-env CC
CCÌache gcc

Sur la machine A, je lance :
FEATURES="-ccache" emerge subversion
(le FEATURES me permet d'enlever la fonctionnalité ccache en local sans
quoi il n'est jamais fait appel à distcc puisque tout est en cache).

Je constate bien les appels à distcc sur la machine B, mais le ccache -s
ne montre aucune modification. J'en déduis que ça ne fait pas appel à
ccache distant.
Avatar
Nicolas George
Emmanuel Florac , dans le message
<5213534a$0$2097$, a écrit :
Logiquement, le mieux serait de déclarer "ccache gcc" comme compilateur
dans la config de distcc sur les deux machines.



Ça ne me semble pas évident.

Si on utilise ccache à l'intérieur de distcc, ccache va cacher sur chaque
machine les fichiers qui y sont compilés. Comme il n'y a pas de garanties
que ce soient les mêmes d'une compilation à l'autre, l'efficacité du cache
s'en trouve amoindrie.

Au contraire, si on utilise distcc à l'intérieur de ccache, au contraire, le
cache garde toute son efficacité, mais seule la compilation est distribuée,
pas le travail de ccache lui-même. L'un dans l'autre je soupçonne que c'est
plus efficace.

Si ce n'est pas indiscret, quel genre de tâche demande des compilations
répétées ainsi ?
Avatar
Christophe PEREZ
Le Tue, 20 Aug 2013 14:14:59 +0000, Nicolas George a écrit :

L'un dans l'autre je soupçonne que c'est plus efficace.



C'est un peu l'orientation de discussion que je cherchais.

Si ce n'est pas indiscret, quel genre de tâche demande des compilations
répétées ainsi ?



Oh non, rien de particulier. Juste Gentoo qui compile tout (pour mon
bonheur). Et donc quand je mets à jour 5 machines avec chacune firefox,
j'aurais préféré que ça aille un peu plus vite sur chacune en mutualisant
un peu plus (si rentable) le travail de chacune pour les autres.

C'est pour ça que je ne cherche cette solution QUE dans le cadre de
l'utilisation de portage/emerge.
Avatar
Nicolas George
Christophe PEREZ , dans le message <kv00s5$qad$, a
écrit :
Oh non, rien de particulier. Juste Gentoo qui compile tout (pour mon
bonheur). Et donc quand je mets à jour 5 machines avec chacune firefox,
j'aurais préféré que ça aille un peu plus vite sur chacune en mutualisant
un peu plus (si rentable) le travail de chacune pour les autres.



Si les machines utilisent les mêmes options de compilation, autant copier
les binaires résultant de la compilation. Si elles n'utilisent pas les mêmes
options, le cache ne servira à rien. Je pense que tu perds un peu ton temps
sur ce point.
Avatar
Benoit Izac
Bonjour,

le 20/08/2013 à 17:32, Nicolas George a écrit dans le message
<52138c1d$0$2299$ :

Oh non, rien de particulier. Juste Gentoo qui compile tout (pour mon
bonheur). Et donc quand je mets à jour 5 machines avec chacune firefox,
j'aurais préféré que ça aille un peu plus vite sur chacune en mutualisant
un peu plus (si rentable) le travail de chacune pour les autres.



Si les machines utilisent les mêmes options de compilation, autant copier
les binaires résultant de la compilation. Si elles n'utilisent pas les mêmes
options, le cache ne servira à rien. Je pense que tu perds un peu ton temps
sur ce point.



+1

À l'époque où j'utilisais Gentoo, j'utilisais uniquement la machine la plus
puissante pour compiler et distribuer les binaires ; voir
<http://wiki.gentoo.org/wiki/Binary_package_guide>.

--
Benoit Izac
Avatar
Trinine
Le Tue, 20 Aug 2013 15:32:46 +0000, Nicolas George a écrit :

Si les machines utilisent les mêmes options de compilation, autant
copier les binaires résultant de la compilation. Si elles n'utilisent
pas les mêmes options, le cache ne servira à rien. Je pense que tu perds
un peu ton temps sur ce point.



Je suis aussi de cet avis. ccache n'accélèrera que certaines
_re_compilations (genre sans doute après un 'revdep-rebuild' ou un
'emerge @preserved-rebuild'), et sera donc souvent inutile (il provoque
même parfois des problèmes de compilation). Un peu de lecture (en
anglais) d'un dev gentoo :
https://blog.flameeyes.eu/2008/06/debunking-ccache-myths

D'ailleurs, la doc officielle avait été modifiée notamment suite à cette
discussion : https://bugs.gentoo.org/show_bug.cgi?id27945

Désormais, elle parle de ccache comme d'une fonctionnalité s'adressant
surtout aux développeurs :
http://www.gentoo.org/doc/fr/handbook/handbook-x86.xml?part=2&chap=3#doc_chap3

T.