Mon collègue Stuart 'Pavlov' Parmenter vient de publier un très long billet sur la consommation de mémoire des navigateurs, et de Firefox 2 et 3 en particulier. Il explique comment Mozilla a travaillé pour réduire la consommation de mémoire de Firefox. Je vous fait grâce des détails, et je résume les points clés en fin de billet.
Le plus intéressant, c'est que la consommation de mémoire de Firefox 3 (Beta 4) est bien meilleure que celle de Firefox 2 (laquelle était déjà considérablement meilleure que celle d'un navigateur connu dont je tairais le nom parce que j'ai dit que je ne dirais plus de mal d'Internet Explorer 7 aujourd'hui
La méthode utilisée est la suivante (traduction par mes soins) :
Nous avons chargé 29 pages Web différentes dans 30 fenêtres sur 11 cycles (soit un total de 319 chargements). Nous ouvrons une nouvelle fenêtre à chaque chargement de page, en fermant la fenêtre la plus ancienne quand on atteint le nombre de 30 fenêtres. A la fin, nous fermons toutes les fenêtres sauf une, on laisse le navigateur quelques minutes pour voir si la mémoire est récupérée et les caches à court terme vidés, etc. Il y a une attente de 3 secondes entre chaque chargement de page de façon à ce que chaque navigateur prenne la même durée de test. Nous avons utilisé le serveur proxy intégré dans standalone Talos pour que ça soit toujours le même contenu qui est servi.
Pavlov donne les liens pour que chacun puisse tester ceci sur sa propre machine.
La conclusion de Pavlov est la suivante :
- Tous les navigateurs augmentent leur consommation de mémoire au fil du temps, mais pour Firefox 3, c'est quasiment plat.
- Le sommet (consommation maximale) pour Firefox 3 est plus bas que quand Firefox 2 revient au repos !
- A la fin, Firefox 3 occupe 140 Mo de moins que Firefox 2, soit 60% de moins.
Firefox 3 finit àpar charité pour Bill (qui vient d'être recalé à la 3eme place au classement des gens les plus riches du monde) je ne vais pas traduire cette phrase, le "pauvre" a déjà eu assez de mauvaises nouvelles comme cela ce mois-ci
Comment est-on arrivé à ce résultat ?
Pavlov rentre dans beaucoup de détails, et tout est documenté dans bugzilla, mais voici les grandes lignes, pour ceux qui veulent en savoir plus, sans pour autant plonger dans les explications complètes en anglais :
- Réduction de la fragmentation mémoire. Pour Windows et Linux, nous utilisons maintenant jemalloc, de Jason Evans, auquel nous avons contribué, ce qui devrait profiter à FreeBSD.
- Suppression de cycles avec le "Cycle Collector". Les cycles, c'est quand deux objets en mémoire, qui ne sont plus utilisés (parce qu'on a fermé la page à laquelle ils appartiennent) se référencent mutuellement, ce qui fait que le logiciel pense qu'ils sont encore utilisés. Le "Cycle Collector" a pour objectif de détecter de telles situations et d'y remédier.
- Réglage des caches, avec des caches qui sont maintenant associés à des timers. Si vous n'accédez pas à une page pendant plus de 30 minutes, cela signifie probablement que vous n'allez pas y revenir avant quelque temps. On libère donc la mémoire cache.
- changements dans la façon de stocker les données des images, avec un timer sur le cache des images JPEG, et un stockage différent des GIF animés
- La chasse aux fuites (leaks). 400 bogues de fuite mémoire ont été corrigés, et création d'outils pour détecter les fuites.
Pavlov explique ensuite à quel point il est difficile de mesurer la quantité de mémoire effectivement utilisée. En gros : Linux et Vista font du bon boulot, là ou OS X et XP sont beaucoup moins précis (et surestiment la consommation)
19 réactions
1 De Riri - 12/03/2008, 16:38
Un logiciel qui propose plus de choses, tout en consommant moins !
L'inverse de Vista quoi...
2 De Moktoipas - 12/03/2008, 16:39
Je suis tombé sur cet article tout a l'heure et je l'ai adoré
Bien écrit simple a comprendre et hyper interressant !
3 De EsKuel - 12/03/2008, 16:41
J'ai remarqué aussi une réduction de la consommation de mémoire dans la dernière beta 4 sous Ubuntu, je suis impatient de voir les résultats avec la version finale de Firefox 3
4 De gros_bidule - 12/03/2008, 18:57
Ce travail était vraiment devenu necessaire, et je suis content que FF soit sur la voie de la guérison.
Et ce n'est pas parce que c'est Firefox qu'il faut chanter ses louanges, danser sur les tables en hurlant "Firefox consomme moins, c'est le seul, il tue pas les ours polaires" (je ne dis pas ça pour vous hein, mais bon nombre de geeks sautent sur l'occasion en pensant que le travail sur la gestion mémoire - qui en réalité n'est rien d'autre qu'un gage de qualité, les bases quoi - est une super-ultra-fonctionnalité unique à Firefox, montrant à quel points "ils sont géniaux ces développeurs libres"). Opera ne consomme presque rien et est très stable (davantage que FF), et pourtant on ne le dit pas.
Bref, FF a fait le ménage, est c'est bien, épuicétou
En espérant que FF3 ne soit pas aussi gadget qu'annoncé (tous ces p'tits machins additionnels inutiles à 90% des gens, et qui feraient mieux de rester tels qu'aujourd'hui, c.a.d. au stade de plugins), sinon je sens que ça va rester sous FF2.
5 De Manu - 12/03/2008, 18:59
Pas d'échelle en abscisse, ça réduit de beaucoup la valeur de ce graphique.
6 De Tristan - 12/03/2008, 20:19
@Gros_Bidule : si vous avez les chiffres de consommation pour Opera, je suis preneur. Parce que si j'en crois mon collègue Schrep, Opera ne sort pas grandi de ce test...
> Since folks asked I ran the latest Opera 9.5b in the exact same environment. It peaks around 240MB and doesn’t free up any memory at the end (so ends at 240MB). Performance during the run is similar to Firefox 2.0.0.12 but higher than Firefox 2.0.0.12 at the end. It is significantly higher than Firefox 3 - which peaks around 220MB and ends at 85MB.
Bref, Opera bouffe plus de mémoire que Firefox 2, et ça non plus, on ne le disait pas, jusqu'à ce que vous abordiez le sujet
7 De MrBlue - 12/03/2008, 20:29
De la bien belle ouvrage, bravo et merci à tous les développeurs de Mozilla !
8 De loufoque - 12/03/2008, 20:41
La suppression de cycle dans XPCOM est nécessaire parce que XPCOM utilise un système de comptage de référence pour gérer la durée de vie de ses objets, qui est le ramasse-miettes du pauvre. (un vrai ramasse-miettes serait d'ailleurs éventuellement bien plus performant, mais plus dur à réaliser)
Et les fuites mémoires n'existeraient pas si le code était codé en C++ moderne (RAII, exceptions...) ou, autre possibilité, si toute la mémoire était gérée par ramasse-miettes.
Bref, des fautes graves de conception nécessitent de partir à la chasse, d'analyser au cas par cas etc. pour tenter de résoudre un problème qui ne serait jamais apparu si les bonnes décisions techniques avaient été prises dès le début.
9 De gros_bidule - 12/03/2008, 21:09
@Tristan, "si vous avez les chiffres de consommation pour Opera, je suis preneur"
Pour sûr, tout simplement mon expérience personnelle, comme tout le monde. Je constate deux choses à la faveur d'Opera :
- Alors que FF atteint facilement les 50 MB en RAM - avec les réglages par défaut (sinon on peut configurer les caches, et ça change pas mal de choses) et sans extensions, je n'ai jamais vu Opera dépasser les 25-30 MB - aussi avec les réglages par défaut et sans extensions (parce que là aussi on peut en régler des choses ^^); en ajoutant qu'Opera embarque davantage de choses, comme un excellent client de Mail, un client Bitorrent, un vrai gestionnaire de téléchargements, etc.
- Lors de surf intensif (visionnage de vidéos genre sur Youtube, images, téléchargements importants, beaucoup de pages vues à la minute comme sur des forums), FF plante environ toutes les heures, voire toutes les 30 minutes : plus rien ne se charge, et il faut killer le process de Firefox (gênant non ? gros bug connu sous FF 1.5.x à FF 2.0.x, pour FF 3 je n'en sais rien car pas essayé, mais j'avoue avoir un peu peur).
Côté Opera : JAMAIS de plantage, stable, sans soucis, on peut surfer des heures sans la crainte du gros blocage.
Bref, sur ces points, Firefox a encore du progrès à faire. Pour le reste, autre débat.
Cela ne l'empêche pas d'être une véritable merveille, mais pas le seule
Cordialement.
10 De Laurentj - 12/03/2008, 21:32
@loufoque :
>pour tenter de résoudre un problème qui ne serait jamais apparu si les bonnes décisions techniques avaient été prises dès le début.
Cher loufoque, tu sembles avoir totalement oublié nos discussions sur mon blog. Toujours aussi trolleur hein, et à prendre les developpeurs de Mozilla pour des newbies en C++. Ta prose est vraiment insultante.
Si de tels choix techniques ont été fait à l'époque, c'est parce qu'ils ne pouvaient pas faire autrement ! L'une des contraintes de Netscape/Mozilla, et non des moindres, était, et reste toujours, de pouvoir compiler sur une multitude de plateforme. Or en 1998/2000, les compilateurs C++ disponible sur chacune de ces plateformes étaient loin d'être égaux devant le respect de la norme C++, comme par exemple le support des exceptions, des templates et cie. Bref, les choix techniques ont été fait en prenant la base commune de ces compilateurs. http://developer.mozilla.org/en/doc...
Il y a aussi le fait que certaines technologies, en particulier XPCOM/Xpconnect, ne permettent pas aisément de faire passer des exceptions C++ en équivalent dans d'autres langages, (puisque je rappel qu' XPCOM permet d'utiliser le langage que l'on veut et donc permet d'appeler un XPCOM fait dans un langage A à partir d'un XPCOM fait dans un langage B).
Alors certes depuis, les compilateurs se sont améliorés, mais va donc maintenant adapter les millions de lignes de code de Gecko avec du C++ moderne. C'est pas une mince affaire, et ça fait plus d'un an que des mozilliens sont en train de mettre au point une moulinette qui permettra de transformer le code source actuel an C++ plus "moderne", et d'utiliser un nouveau gestionnaire de mémoire. http://wiki.mozilla.org/XPCOMGC, http://wiki.mozilla.org/Mozilla_2, (et les billets qui passent régulièrement sur planet.mozilla.org sur ce sujet)
Pour ce qui est des fuites mémoires, même en programmant en C++ moderne, on peut en faire, y a pas de problème pour ça.
11 De http://titlap.Free.fr - 13/03/2008, 00:18
Moué enfin ... quand je vois les fuites mémoires de mon FIrefox 2.0..... je me dis qu'on a pas la meme façon de tester tout ça !
12 De meushi - 13/03/2008, 00:58
Billet très instructif, merci !
Par contre, firefox, opera, ie... et konqueror dans tout ca ? é_è
13 De firefox_user - 13/03/2008, 01:03
@gros_bidule
j'aime beaucoup opera mais d'apres mon expérience, vu que tu parles de la tienne... opera n'est pas aussi bon que tu peux le dire...
certes il est bon et embarque en natif beaucoup de choses (ce qui permet de les optimiser plus que les extensions maintenues par la communauté de firefox) simplement, le principe n'est pas le même... et firefox est beaucoup plus léger qu'opera niveau interface (je ne parle pas de performance)... je m'explique:
faisant tester à tous mes amis des alternatives à IE, je fait tester bien entendu entre autres, opera et firefox... et franchement ya franchement pas photo! les retours d'expériences m'indique clairement que firefox est plus adapté ou mieux pensé (je n'en sais rien!) qu'opera... qu'ils soient novices, ou surfers confirmés!
sur la 30aine de personnes à qui j'ai fait découvrir ces alternatives 2 seulement ont choisi opera et encore, en jonglant avec firefox
concernant la stabilité... permet moi de te contredire, que ce soit niveau vitesse (déjà avec firefox2) ou de la stabilité, firefox m'apparait souvent plus performant et plus compatibles avec les sites mal codés! (avec les pieds?) et ce, sur plusieurs config et os différents (ubuntu, vista et xp, quelques mac)
bravo à l'équipe de développeurs, ça faisait un moment qu'on attendait un firefox largement devant comme la version 1.0!
14 De smich - 13/03/2008, 04:26
Ca serait sympa de faire un comparatif avec la dernière beta d'IE8!
15 De dytryh - 13/03/2008, 10:49
Je suis assez surpris des chiffre de Firefox vs IE. Je pensais que Firefox pompait plus de mémoire sur le long terme qu'IE.
Concernant Opera, un ami que j'ai converti à Firefox il y a quelques années, l'utilise actuellement avec beaucoup de satisfaction. La consommation mémoire de Firefox le gênait, Opera est beaucoup plus stable en utilisation mémoire que Firefox d'après lui.
Après cela dépend très certainement de l'utilisation qui en est faite, je me demande si la différence ne pourrait pas aussi se faire au niveau des plugins : flash entre autres.
Cela dit, tant que c'est un choix de navigateur il n'y a pas de meilleur ou de mauvais navigateur, il n'y a qu'une opinion personnelle sur une utilisation personnelle du navigateur et si cela peut contribuer à rétablir un équilibre et une saine concurrence pour l'avancée du web c'est l'essentiel.
16 De yosh - 13/03/2008, 11:55
Je suis utilisateur quotidien de firefox, j'en ai oublié jusqu'au nom de internet ex.. quoi déjà :D ? mais ne nous leurrons pas: firefox 2 met 3 plombes à démarrer et il plombe considérablement la mémoire, l'utilisation de la ram est bien plus importante que celle d'IE, et ça peut atteindre des sommets quand plusieurs onglets sont ouverts en même temps, que ce soit sous win ou ubuntu. Alors OK, les extensions jouent, mais même sans, le temps de démarrage est plus long et la mémoire bien plus remplie.
Ces graphiques sont donc bien jolis, mais dans la vraie vie et une utilisation lambda de FF on ne ressent pas la même chose ! J'attends beaucoup de cette version 3 et j'espère que l'énorme consommation de mémoire sera réglée, ainsi qu'un contrôle drastique des fuites de mémoires, y compris celle créées par les extensions (parceque firefox sans les extensions... j'en ai trop besoin :D)
D'ailleurs une des critiques les plus courantes que j'entends quand je veux installer FF chez qqun qui utilise IE c'est "eh ben pour un navigateur il est long à s'ouvrir !!" (et pourtant pas d'extensions installées !)
Donc bon courage à toute l'équipe, pour un meilleure firefox et un internet plus ouvert !! (et je suis conscient que d'énormes efforts sont fait dans ce sens)
17 De Benjamin - 13/03/2008, 13:05
Je cherchais des stats sur opera (qui me semble le navigateur le plus lég' du marché) et je suis tombé sur ca :
http://www.flickr.com/photos/stuart...
Apparemment, Opera se trouve entre Firefox 2 et Firefox 3 ...
Ca me fait plaisir que les devs de firefox se penchent sur les problèmes de leak memory aussi sérieusement.
18 De Turtle Crazy - 13/03/2008, 18:40
Yosh et consorts,
le fait que Firefox soit lent à démarrer ne signifie pas qu'il consomme excessivement de la RAM, mais du temps processeur.
Certes Windows (ctmetcdc) a la facheuse tendance à swapper dans tous les sens à n'importe quel moment, ce qui pourrait ralentir le démarrage en cas de consommation 'excessive'.
Mais, AMHA, les problème de lenteur ne sont pas là; les développeurs n'ont peut être pas accès à des technologies 'intéressantes' de l'API Windows.
Dans un même genre, Konqueror démarre plus vite que Firefox...sous KDE et seulement sous KDE.
Sinon, je n'ai pas saisi ce qui devrait contribuer à FreeBSD ? jemalloc ? Et pourquoi?
19 De Laurentj - 14/03/2008, 10:06
@turtle Crazy : jemalloc est utilisé dans FreeBSD. Stuart (de mozilla) a travaillé avec l'auteur de jemalloc pour l'améliorer. Ces améliorations vont donc profiter à FreeBSD.