Question

Firefox 3 est venu avec un nouvel allocateur: jemalloc .

J'ai entendu à plusieurs endroits que ce nouvel allocateur est meilleur. Les meilleurs résultats de Google ne donnent cependant aucune information supplémentaire et je suis intéressé par son fonctionnement.

Était-ce utile?

La solution

jemalloc est apparu pour la première fois sous FreeBSD, idée originale d'un "Jason Evans", d'où le "je". Je le ridiculiserais pour son égoïsme si je n’avais pas écrit un système d’exploitation appelé paxos : -)

Voir ce PDF pour plus de détails. C'est un livre blanc décrivant en détail le fonctionnement des algorithmes.

Le principal avantage est l’évolutivité des systèmes multiprocesseurs et multi-threads, obtenue en partie grâce à l’utilisation de plusieurs arènes (les blocs de mémoire brute à partir desquels des allocations sont faites).

Dans les situations à un seul thread, il n'y a pas de réel avantage à utiliser plusieurs arènes, c'est pourquoi une seule arène est utilisée.

Toutefois, dans les situations multithreads, de nombreuses arènes sont créées (quatre fois plus d’arènes que de processeurs), et les threads sont affectés à ces arènes de manière circulaire.

Cela signifie que les conflits de verrous peuvent être réduits car, alors que plusieurs threads peuvent appeler simultanément malloc ou free , ils ne s'affronteront que s'ils partagent le même arène. Deux threads avec des arènes différentes ne s’affectent pas.

De plus, jemalloc tente d'optimiser la localisation du cache, car l'extraction de données dans la RAM est beaucoup plus lente que l'utilisation de données déjà présentes dans les caches de CPU (aucune différence de concept entre l'extraction rapide de la RAM par rapport à la récupération lente du disque). À cette fin, il essaie d’abord de minimiser l’utilisation globale de la mémoire, car il est plus probable que l’ensemble du groupe de travail de l’application soit mis en cache.

Et lorsque cela ne peut pas être réalisé, il essaie de s'assurer que les allocations sont contiguës, car la mémoire allouée ensemble tend à être utilisée ensemble.

D'après le livre blanc, ces stratégies semblent offrir des performances similaires à celles des meilleurs algorithmes actuels pour une utilisation en un seul thread, tout en offrant des améliorations pour une utilisation en multi-thread.

Autres conseils

Il existe une source intéressante: la source C elle-même: http://mxr.mozilla.org/mozilla-central/source /memory/mozjemalloc/jemalloc.c

Au début, un bref résumé décrit comment cela fonctionne approximativement. Cependant, il manque une analyse algorithmique plus approfondie.

En ce qui concerne les avantages que jemalloc a apportés à mozilla, http : //blog.pavlov.net/2008/03/11/firefox-3-memory-usage/ (premier premier résultat Google pour mozilla + jemalloc):

[...] a conclu que jemalloc nous avait généré la plus petite quantité de fragmentation après une longue période de temps. [...] Nos tests automatisés sur Windows Vista ont révélé une baisse de 22% de l'utilisation de la mémoire lorsque nous avons activé jemalloc.

Aerospike a intégré jemalloc dans une succursale privée en 2013. En 2014, il a été intégré à Aerospike 3.3. Psi Mankoski vient d’écrire au sujet de la mise en œuvre d’Aerospike, ainsi que du moment et de la manière d’utiliser efficacement jemalloc, pour une Haute évolutivité .

jemalloc a vraiment aidé Aerospike à tirer parti des architectures informatiques multithreads, multi-processeurs et multi-cœurs modernes. Il existe également des fonctionnalités de débogage très importantes intégrées à jemalloc pour gérer les arènes. Le débogage a permis à Psi de savoir, par exemple, ce qui était une véritable fuite de mémoire, par rapport à ce qui résultait de la fragmentation de la mémoire. Psi explique également comment le cache de thread et l’allocation par thread ont permis une amélioration globale des performances (vitesse).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top