View previous topic :: View next topic |
Author |
Message |
letoff Apprentice
Joined: 04 Mar 2004 Posts: 163 Location: root in Paris, windsurfer in Brest
|
Posted: Sat Dec 03, 2005 2:29 pm Post subject: [ccache] Vraiment utile? (concl: des fois oui, des fois non) |
|
|
Bonjour,
Aujourd'hui en voulant voir un peu où en était la taille de mon ccache suite à la compil de gcc-3.4.4, j'ai donc regardé ça d'un peu plus près:
Marge ~ # ccache -s
cache hit 50518
cache miss 237498
called for link 25166
multiple source files 315
compile failed 7504
preprocessor error 4558
not a C/C++ file 15039
autoconf compile/link 71025
unsupported compiler option 10463
no input file 25285
files in cache 424703
cache size 2.7 Gbytes
max files 1000000
max cache size 3.0 Gbytes
Bon de prime abord je trouve que le nombre de cache miss est un peu élevé pour cette machine qui me sert de serveur, et où je n'installe donc que très peu de choses nouvelles. J'ai effectué le test sur un emerge de gcc avec le ccache d'activé et un autre sans. Le résultat me parait stupéfiant, qu'en dites vous?
Marge ~ # genlop -t gcc
* sys-devel/gcc
Sun May 2 22:25:55 2004 >>> sys-devel/gcc-3.3.2-r5
merge time: 34 minutes and 42 seconds.
Wed Jun 9 23:24:56 2004 >>> sys-devel/gcc-3.3.3-r6
merge time: 34 minutes and 10 seconds.
Sat Aug 28 13:20:40 2004 >>> sys-devel/gcc-3.3.4-r1
merge time: 29 minutes and 46 seconds.
Fri Sep 10 16:26:57 2004 >>> sys-devel/gcc-3.3.4-r1
merge time: 1 hour, 6 minutes and 16 seconds.
Sun Jan 16 23:38:35 2005 >>> sys-devel/gcc-3.3.5-r1
merge time: 1 hour, 36 minutes and 13 seconds.
Mon Apr 11 18:14:05 2005 >>> sys-devel/gcc-3.3.5.20050130-r1
merge time: 1 hour, 14 minutes and 41 seconds.
Tue Sep 6 16:27:09 2005 >>> sys-devel/gcc-3.3.6
merge time: 1 hour, 15 minutes.
Sat Dec 3 14:13:41 2005 >>> sys-devel/gcc-3.4.4-r1
merge time: 38 minutes and 17 seconds.
Sat Dec 3 14:59:26 2005 >>> sys-devel/gcc-3.4.4-r1
merge time: 38 minutes and 31 seconds.
[edit]
Le passage d'une demi-heure à 1h15 de compil correspond à l'ajout de gcj et ne fait pas partie du test. Seules les 2 dernières valeurs correspondent à mon emerge d'aujourd'hui (à nouveau sans gcj qui fait planter l'emerge). La 1ère compil est fait avec le ccache et la deuxième sans: 14sec d'écart à l'arrivée seulement... _________________ Gentoo won't be suitable for server's use until GLEP 19 is alive.
Last edited by letoff on Sun Dec 04, 2005 4:01 pm; edited 1 time in total |
|
Back to top |
|
|
nevro Tux's lil' helper
Joined: 13 Nov 2004 Posts: 149 Location: France
|
Posted: Sat Dec 03, 2005 2:52 pm Post subject: |
|
|
en effet 14 sec ce n'est pas enorme,mais les caches ne font jamais gagné des heures complete,compte 14 sec par ci,14 sec par là..le chiffre grimpe vite.On retrouve la meme chose avec les processeurs,tout depend vraiment ce que l'on veut faire avec apres,mais le but du cache ne permet pas que d'aller plus vite,il permet des corrections d'erreurs..etc |
|
Back to top |
|
|
netfab Veteran
Joined: 03 Mar 2005 Posts: 1964 Location: 127.0.0.1
|
Posted: Sat Dec 03, 2005 3:03 pm Post subject: |
|
|
Salut,
La toute première fois que j'ai compilé openoffice (pas le 2, la version précédente), la compil a planté au bout de 4h30 environ, par manque de place sur la partition /var, et était quasiment terminée.
J'ai relancé juste derrière, en ayant fait un peu de ménage sur le /var : compilation et installation terminée en 3 heures.
Donc çà doit bien servir à quelque chose |
|
Back to top |
|
|
guilc Bodhisattva
Joined: 15 Nov 2003 Posts: 3326 Location: Paris - France
|
Posted: Sat Dec 03, 2005 3:18 pm Post subject: |
|
|
Code: | Thu Oct 13 23:42:34 2005 >>> kde-base/kdelibs-3.4.3
merge time: 57 minutes and 42 seconds.
Mon Oct 31 15:18:38 2005 >>> kde-base/kdelibs-3.4.3
merge time: 25 minutes and 11 seconds.
|
Tu es convaincu ?
ccache fonctionne seulement si les lignes de commande et les sources sont absolument identiques.
En pratique, ccache activé, la première compilation stocke ses résultats dans le cache, et a la recompilation, il va piocher les résultats dasn le cache, issus de la première compilation.
Donc si entre les deux compilations tu as changé un cflags, un USE, ou ce genre de chose, tu ne verras pas de gain...
Mais bon, pour mon kdelibs, c'est plutot convainquant non ? environ moitié moins de temps ! _________________ Merci de respecter les règles du forum.
Mon site perso : https://www.xwing.info
Mon PORTDIR_OVERLAY : https://gentoo.xwing.info ou layman -a xwing |
|
Back to top |
|
|
mic006fr Tux's lil' helper
Joined: 16 Sep 2004 Posts: 135 Location: FRANCE - Toulouse
|
Posted: Sat Dec 03, 2005 6:30 pm Post subject: |
|
|
A condition de compiler deux fois de suite la même chose...
En pratique, si on recompile, c'est justement que l'on a changé un USE flags, que la version a changé, ...
Le gain est nul dans ces cas là ?
Pour le noyau, le gain est peut-être plus important (quoique si la version apprait dans la ligne de commande, alors le cache sert également à rien)?
Je m'interroge vraiment sur l'utilité de ccache pour quelqu'un qui ne fait pas du dev / compile des cvs très souvent... |
|
Back to top |
|
|
letoff Apprentice
Joined: 04 Mar 2004 Posts: 163 Location: root in Paris, windsurfer in Brest
|
Posted: Sat Dec 03, 2005 6:35 pm Post subject: |
|
|
guilc wrote: |
Tu es convaincu ?
|
Justement non, c'est le sujet de mon post !
guilc wrote: |
Donc si entre les deux compilations tu as changé un cflags, un USE, ou ce genre de chose, tu ne verras pas de gain...
|
Et bien je n'ai justement rien changé du tout entre ces 2 compils! Il faut savoir comment travaille ccache en profondeur pour savoir si un cache de grande taille est vraiment utile. D'après ce que j'ai compris, ccache utilise un hash pour reconnaitre les fichiers sources. Or quand on en a environ 450000 comme moi je me demande comment fait ccahe pour parcourir tout ça en allant plus vite que la compil d'un simple fichier. Bon, je viens de vider mon cache et de réemerger gcc avec le ccache d'activé, on va bien voir.
Marge ~ # ccache -s
cache hit 16
cache miss 449
called for link 45
multiple source files 1
compile failed 22
preprocessor error 2
not a C/C++ file 3
autoconf compile/link 171
no input file 20
files in cache 898
cache size 9.1 Mbytes
max files 1000000
max cache size 3.0 Gbytes
Marge ~ # genlop -t gcc
* sys-devel/gcc
[snip]
Sat Dec 3 17:14:49 2005 >>> sys-devel/gcc-3.4.4-r1
merge time: 1 hour, 14 minutes and 41 seconds.
Là je le relance à nouveau et je vous tiendrais au courant demain car je dois y aller. _________________ Gentoo won't be suitable for server's use until GLEP 19 is alive. |
|
Back to top |
|
|
NiLuJe Guru
Joined: 06 Nov 2004 Posts: 303 Location: Paris, France
|
Posted: Sat Dec 03, 2005 7:37 pm Post subject: |
|
|
Tapez moi si je me trompe, mais certains paquets n'utilisent explicitement _PAS_ ccache, dont gcc ... Me trompe-je?
(Puis de toute façon y'a la moitié de la compil qui se fait avec le 'nouveau' gcc fraîchement compilé appelé directement, si j'ai bien compris, donc bye ccache...)
Bref, c'est peut-être pas l'exemple à retenir gcc ^^ |
|
Back to top |
|
|
netfab Veteran
Joined: 03 Mar 2005 Posts: 1964 Location: 127.0.0.1
|
Posted: Sat Dec 03, 2005 8:07 pm Post subject: |
|
|
mic006fr wrote: | Pour le noyau, le gain est peut-être plus important (quoique si la version apprait dans la ligne de commande, alors le cache sert également à rien)? |
Euh, à mon avis, le noyau n'étant pas compilé par emerge, ccache n'est pas utilisé du tout.
Voir le handbook : Utiliser Gentoo --> Portage et ses fonctionnalités --> 3.c. Utiliser un cache pour la compilation --> Utilisation de ccache en dehors de Portage
letoff wrote: | D'après ce que j'ai compris, ccache utilise un hash pour reconnaitre les fichiers sources. Or quand on en a environ 450000 comme moi je me demande comment fait ccahe pour parcourir tout ça en allant plus vite que la compil d'un simple fichier. |
Et bien justement : je ne connais pas les subtilités du compilateur, ni sa vitesse d'analyse du code source, sa vitesse d'éxécution, etc.. etc.. ni même le fonctionnement interne de ccache, mais il est peut être plus rapide de vérifier si le fichier 1fc590a0b9c99b1f546f6e7a8349bb-45543 existe dans le répertoire de ccache, plutôt que de se taper (pour le compilateur) l'analyse syntaxique du code source et tout ce qui en découle non ? |
|
Back to top |
|
|
kopp Advocate
Joined: 09 Apr 2004 Posts: 2885 Location: Grenoble, France
|
Posted: Sun Dec 04, 2005 10:56 am Post subject: |
|
|
Au passage, quand on change un useflag, en général, ça change pas tous les fichiers compilés, mais seulement certain, donc sur ceux qui ne sont pas influencé par le flag, on y gagne... |
|
Back to top |
|
|
guilc Bodhisattva
Joined: 15 Nov 2003 Posts: 3326 Location: Paris - France
|
Posted: Sun Dec 04, 2005 11:00 am Post subject: |
|
|
kopp wrote: | Au passage, quand on change un useflag, en général, ça change pas tous les fichiers compilés, mais seulement certain, donc sur ceux qui ne sont pas influencé par le flag, on y gagne... |
Sauf que changer un USE == changer une option de configuration == changer le fichier config.h généré par le configure
OR, ce fichier est inclu dans a peu près toutes les sources en général
Conclusion, tous les fichiers source (une fois inclusion faites, ce qui nous interesse ici en fait) sont modifiés
CQFD _________________ Merci de respecter les règles du forum.
Mon site perso : https://www.xwing.info
Mon PORTDIR_OVERLAY : https://gentoo.xwing.info ou layman -a xwing |
|
Back to top |
|
|
kopp Advocate
Joined: 09 Apr 2004 Posts: 2885 Location: Grenoble, France
|
Posted: Sun Dec 04, 2005 11:23 am Post subject: |
|
|
ah zut! bon ben j'ai rien dit
je pensais que c'était le makefile qui passait les differentes options de compilations nécessaires
Bon, je me tais alors!
(n'empèche y en a peut-être qui n'incluent pas ce config.h) |
|
Back to top |
|
|
anigel Bodhisattva
Joined: 14 Apr 2003 Posts: 1894 Location: Un petit bled pas loin de Limoges ;-)
|
Posted: Sun Dec 04, 2005 11:44 am Post subject: |
|
|
Bonjour,
Je ne maîtrise pas totalement les arcanes de ccache, mais je l'utilise depuis longtemps, en conjonction avec distcc. Ce que j'ai pu déduire des stats que j'ai fait avec, c'est que si ça accélère effectivement les compilations, ça ne marche pas dans tous les cas. En gros, les requêtes sur ccache se vautrent environ 80% du temps chez moi (. Mais quand ça fonctionne, ça accélère effectivement considérablement les choses.
C'est très utile :
- quand on compile une nouvelle révision d'un logiciel (très souvent, correction de sécurité, bug mineur, 99% du code reste inchangé, et donc directement piochable dans ccache
- pour la phase de .configure de quasiment toutes les compilations, car les tests de compilation sont presque toujours les mêmes.
Mais effectivement, ce n'est pas une solution miraculeuse : certains logiciels n'en tirent pas du tout parti (tout comme certains sont ne sont pas "distcc-ables", genre xorg-x11).
On peut donc en attendre certains avantages, mais on ne peut pas en espérer un gain de 50%. Comme je le disais plus haut, je suis à environ 20% de hits sur le total (y compris les "called for link")... _________________ Il y a 10 sortes d'individus en ce bas-monde : ceux qui causent binaire, et les autres. |
|
Back to top |
|
|
letoff Apprentice
Joined: 04 Mar 2004 Posts: 163 Location: root in Paris, windsurfer in Brest
|
Posted: Sun Dec 04, 2005 3:52 pm Post subject: |
|
|
NiLuJe wrote: | Tapez moi si je me trompe, mais certains paquets n'utilisent explicitement _PAS_ ccache, dont gcc ... Me trompe-je?
(Puis de toute façon y'a la moitié de la compil qui se fait avec le 'nouveau' gcc fraîchement compilé appelé directement, si j'ai bien compris, donc bye ccache...)
Bref, c'est peut-être pas l'exemple à retenir gcc ^^ |
Effectivement, celà me semble la réponse la plus plausible. Voici le résultat de mes 2 dernières compils avec le ccache d'activé, la 1ère ayant un cache vide:
Code: |
Marge ~ # genlop -t gcc
* sys-devel/gcc
[snip]
Sat Dec 3 17:14:49 2005 >>> sys-devel/gcc-3.4.4-r1
merge time: 1 hour, 14 minutes and 41 seconds.
Sat Dec 3 20:46:58 2005 >>> sys-devel/gcc-3.4.4-r1
merge time: 1 hour, 10 minutes and 48 seconds.
|
Ceci étant, je n'ai rien compilé depuis ces 2 gcc et voici les stats de ccache:
Code: |
Marge ~ # ccache -s
cache hit 482
cache miss 449
called for link 90
multiple source files 2
compile failed 44
preprocessor error 4
not a C/C++ file 6
autoconf compile/link 342
no input file 40
files in cache 898
cache size 9.1 Mbytes
max files 1000000
max cache size 3.0 Gbytes
|
Il y a donc bien eu une utilisation de ccache pendant la compil de gcc!
NetFab wrote: |
mais il est peut être plus rapide de vérifier si le fichier 1fc590a0b9c99b1f546f6e7a8349bb-45543 existe dans le répertoire de ccache, plutôt que de se taper (pour le compilateur) l'analyse syntaxique du code source et tout ce qui en découle non ? |
C'est bien là tout le sens de mon interrogation. Il doit bien y avoir un seuil au delà duquel cette recherche prend plus de temps que la compil, surtout si c'est pour un petit fichier. Enfin ce n'est que mon avis et comme toi je ne connais pas suffisament les arcanes de ccache pour l'affirmer.
Merci à tous en tout cas pour cette discussion.
Bonne fin de w-e. _________________ Gentoo won't be suitable for server's use until GLEP 19 is alive. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|