par
Hubert Roksor » 10 mai 2007, 08:21
Bon, ben finalement mon problème s'est plus ou moins réglé à force d'acharnement. Il semblerait qu'il s'agisse d'un combinaison de variables d'environnement pas prises en compte (pas mises au bon endroit) et/ou de package qui n'utilise pas la parallélisation. En ajoutant à mon
/etc/make.conf la variable d'environnement
DISTCC_HOSTS je suis parvenu à le faire marcher.
Je recompile
dev-util/subversion en boucle depuis que je suis réveillé pour tester différents réglages, mais les gains en performance sur ce paquet sont loin d'être faramineux, même s'il peut s'agir d'un erreur de ma part au niveau de la config. Imaginez les deux machines sd1 et sd2. Ce que je remarque, c'est qu'en compilant sur sd1 avec 3 jobs à la fois (1 distcc en local, 2 distcc sur sd2) la seconde machine, sd2, reste idle pendant d'assez longues périodes (lisez "quelques secondes) apparement dû à la latence entre les jobs. Je suis passé à 2 en local et 3 sur l'autre machine avec une légère amélioration. Pour info, pour une compilation locale sans
dev-util/subversion prend à peu près 10min40 (real, d'après time). Avec 1+2 jobs on tombe à 9min20 et avec 2+3 jobs je suis tombé à 9min10. Le tout sans
ccache pour ne pas fausser les résultats bien sûr. Je vais sûrement faire quelques tests supplémentaires, mais je ne pense pas continuer dans cette voie. Ah, autre observation importante : de façon à lancer 1 job de compilation en local et 3 autre sur la seconde machine on est obligé de mettre le nombre de jobs effectués par
make à 4
C'est très bien quand on compile parce que 3 de ces jobs vont à l'extérieur, mais toutes les opérations d'installations (exécution de scripts, copier/déplacer/compresser des fichiers, etc...) sont elles aussi effectuées 4 par 4 par la machine locale, qui se retrouve surchargée (la valeur recommandée étant de 2 par CPU) ce qui explique les longues périodes d'inactivités des machines "externes". J'ai lu sur la mailing-list de distcc qu'un patch existait pour changer le nombre de jobs selon le type d'activité, mais aucun patch n'a été fusionné aux sources, qui sont apparemment dans le coma depuis plusieurs années. La bonne nouvelle c'est que Google semble intéressé (normal quand on compile des dizaines de kernels par jour, j'imagine), possède plusieurs patches qu'ils souhaitent publier et fusionner. Donc gardez un œil sur distcc au cas où.
Si tu lances la compilation sur une de tes deux machines, elle aura peut être fini avant que t'ai trouvé la solution.

Oui, sûrement

D'autant plus que les deux machines sont identiques, ça veut dire que j'emergerais sur l'une puis sur l'autre, ce qui n'a pas de sens (autant
emerger les deux individuellement mais simultanément). Je ne cherche pas juste à le "faire marcher", ce que je cherche c'est surtout à savoir
si ça marche et
comment ça marche, avec pour but d'automatiser toute cette procédure par un script. De cette façon en cas de pépin ou en cas de besoin je peux réinstaller la machine en quelques instants (si on oublie la demi journée passée à recompiler...

).
Si j'ai d'autres infos intéressantes je les posterai ici.
Bon, ben finalement mon problème s'est plus ou moins réglé à force d'acharnement. Il semblerait qu'il s'agisse d'un combinaison de variables d'environnement pas prises en compte (pas mises au bon endroit) et/ou de package qui n'utilise pas la parallélisation. En ajoutant à mon [b]/etc/make.conf[/b] la variable d'environnement [b]DISTCC_HOSTS[/b] je suis parvenu à le faire marcher.
Je recompile [b]dev-util/subversion[/b] en boucle depuis que je suis réveillé pour tester différents réglages, mais les gains en performance sur ce paquet sont loin d'être faramineux, même s'il peut s'agir d'un erreur de ma part au niveau de la config. Imaginez les deux machines sd1 et sd2. Ce que je remarque, c'est qu'en compilant sur sd1 avec 3 jobs à la fois (1 distcc en local, 2 distcc sur sd2) la seconde machine, sd2, reste idle pendant d'assez longues périodes (lisez "quelques secondes) apparement dû à la latence entre les jobs. Je suis passé à 2 en local et 3 sur l'autre machine avec une légère amélioration. Pour info, pour une compilation locale sans [b]dev-util/subversion[/b] prend à peu près 10min40 (real, d'après time). Avec 1+2 jobs on tombe à 9min20 et avec 2+3 jobs je suis tombé à 9min10. Le tout sans [b]ccache[/b] pour ne pas fausser les résultats bien sûr. Je vais sûrement faire quelques tests supplémentaires, mais je ne pense pas continuer dans cette voie. Ah, autre observation importante : de façon à lancer 1 job de compilation en local et 3 autre sur la seconde machine on est obligé de mettre le nombre de jobs effectués par [b]make[/b] à 4
[code]MAKEOPTS="-j4"[/code]
C'est très bien quand on compile parce que 3 de ces jobs vont à l'extérieur, mais toutes les opérations d'installations (exécution de scripts, copier/déplacer/compresser des fichiers, etc...) sont elles aussi effectuées 4 par 4 par la machine locale, qui se retrouve surchargée (la valeur recommandée étant de 2 par CPU) ce qui explique les longues périodes d'inactivités des machines "externes". J'ai lu sur la mailing-list de distcc qu'un patch existait pour changer le nombre de jobs selon le type d'activité, mais aucun patch n'a été fusionné aux sources, qui sont apparemment dans le coma depuis plusieurs années. La bonne nouvelle c'est que Google semble intéressé (normal quand on compile des dizaines de kernels par jour, j'imagine), possède plusieurs patches qu'ils souhaitent publier et fusionner. Donc gardez un œil sur distcc au cas où.
[quote="Sékiltoyai"]Si tu lances la compilation sur une de tes deux machines, elle aura peut être fini avant que t'ai trouvé la solution. :mrgreen:[/quote]
Oui, sûrement :lol: D'autant plus que les deux machines sont identiques, ça veut dire que j'emergerais sur l'une puis sur l'autre, ce qui n'a pas de sens (autant [i]emerge[/i]r les deux individuellement mais simultanément). Je ne cherche pas juste à le "faire marcher", ce que je cherche c'est surtout à savoir [i]si[/i] ça marche et [i]comment[/i] ça marche, avec pour but d'automatiser toute cette procédure par un script. De cette façon en cas de pépin ou en cas de besoin je peux réinstaller la machine en quelques instants (si on oublie la demi journée passée à recompiler... :lol:).
Si j'ai d'autres infos intéressantes je les posterai ici.