- jemalloc, un allocateur mémoire haute performance, est un composant fondamental qui joue un rôle d’infrastructure clé dans la pile logicielle de Meta, aux côtés du noyau Linux et des compilateurs
- Ces dernières années, un éloignement progressif des principes d’ingénierie fondamentaux qui guidaient le développement de jemalloc a entraîné une accumulation de dette technique, ralentissant les avancées
- Après avoir pris en compte les retours de la communauté et échangé avec ses membres, dont le fondateur du projet Jason Evans, le dépôt open source d’origine a été réactivé (unarchived)
- À l’avenir, l’accent sera mis sur la résorption de la dette technique, l’amélioration de l’allocateur Huge-Page, l’efficacité mémoire et les optimisations AArch64
- Meta réaffirme sa gestion à long terme de jemalloc et fait évoluer son approche pour développer le projet en collaboration avec la communauté
Place et importance de jemalloc
- jemalloc est un allocateur mémoire haute performance, un composant qui a constamment offert un fort effet de levier dans la pile logicielle de Meta
- Il s’est continuellement adapté aux évolutions du matériel et des couches logicielles supérieures, contribuant à la stabilité et aux performances de l’infrastructure de Meta aux côtés du noyau Linux et des compilateurs
Écart par rapport aux principes et remise en question
- Les composants logiciels fondamentaux exigent le plus haut niveau de rigueur entre pragmatisme et principes
- En raison de l’effet de levier élevé qu’apporte jemalloc, la tentation existe de rechercher des gains à court terme, ce qui exige une forte autodiscipline à l’échelle de l’organisation pour y résister
- Ces dernières années, un éloignement progressif des principes d’ingénierie fondamentaux qui guidaient le développement de jemalloc s’est produit
- Certaines décisions ont offert des bénéfices immédiats, mais la dette technique qui en a résulté a freiné les progrès
- Les retours de la communauté ont été pris au sérieux, et des échanges ont eu lieu avec ses membres, dont le fondateur du projet, Jason Evans
- Meta a profondément réfléchi à l’impact de sa gestion sur la santé de long terme de jemalloc et a partagé son changement d’approche
- Les travaux ont commencé pour éliminer la dette technique et reconstruire une feuille de route de long terme pour jemalloc
Un nouveau chapitre : désarchivage du dépôt et plans à venir
- À la suite des échanges avec la communauté, le dépôt open source jemalloc d’origine a été réactivé (unarchived)
- Meta peut ainsi continuer à assurer le rôle de steward du projet, avec une orientation centrée sur la réduction de la charge de maintenance et la modernisation de la base de code
- Résorption de la dette technique : maintenir un état efficace, fiable et simple d’utilisation pour tous les utilisateurs grâce au refactoring et aux améliorations
- Allocateur Huge-Page (HPA) : mieux exploiter les Transparent Hugepages (THP) afin d’améliorer l’efficacité CPU
- Efficacité mémoire : optimiser l’efficacité mémoire en améliorant les mécanismes de packing, de caching et de purging
- Optimisations AArch64 : garantir de bonnes performances par défaut sur les plateformes ARM64
Renforcement de la collaboration avec la communauté
- Meta met en avant la construction de la confiance par les actes et vise un développement sain de jemalloc
- Les retours et la participation de la communauté sont les bienvenus, avec l’espoir de construire ensemble l’avenir de jemalloc
- L’entreprise entend promouvoir une collaboration et un développement durables au sein de l’écosystème open source
1 commentaires
Commentaires sur Hacker News
À l’époque où je travaillais chez Facebook, je maintenais un patch du noyau pour améliorer le mécanisme de purge de jemalloc
Il n’était pas très apprécié dans les communautés du noyau ou de la sécurité, mais il était efficace dans les benchmarks
Le problème venait du fait qu’un zeroing se produisait lors de la réaffectation de la mémoire à un autre thread, ce qui affectait la localité du cache et les performances
C’était inutile lorsqu’on réutilisait la mémoire au sein du même domaine de sécurité, mais il était difficile d’obtenir un consensus sur la définition exacte d’un « domaine de sécurité »
La discussion associée se trouve sur la Linux Kernel Mailing List
Nous avons réalisé des benchmarks très larges sur HHVM avant et après l’application de ce patch, mais au niveau système il n’y avait pas de différence statistiquement significative
Il y a peut-être eu des améliorations sur certains microbenchmarks, mais comme cela n’avait pas d’effet sur les performances globales du système, le patch a été écarté du noyau
Récemment, j’ai utilisé le mimalloc de Microsoft avec
LD_PRELOADpour exploiter des huge pages de 1 GoJ’ai obtenu environ 20 % de gain de performance sur un programme intensif en mémoire
C’est une sensation étrange d’améliorer les performances sous Linux avec une bibliothèque open source de MS
J’ai l’impression qu’il faudrait plus de concurrence dans le domaine des malloc
Il s’agissait d’applications écrites en Rust, majoritairement liées statiquement
Par exemple, sur app1, tcmalloc a réduit la RSS de 35 % et le temps de traitement de 30 % par rapport à glibc
Tous les résultats ont été testés à partir du dépôt tcmalloc
Même Turbo Pascal fournissait une API permettant de définir son propre allocateur mémoire
Au final, l’approche « one size fits all » montrait déjà ses limites depuis longtemps
On créait un pool par requête, puis on libérait tout d’un coup à la fin de la requête
Je pense que malloc a encore beaucoup de marge pour évoluer dans ce sens
Si le schéma d’allocation est simple, on peut obtenir de meilleurs résultats qu’avec un malloc tiers
On considère malloc comme une boîte noire magique, mais en réalité ce n’est pas si extraordinaire
Notre équipe a migré de glibc malloc vers jemalloc il y a deux ans
L’usage mémoire a baissé de 15 à 20 % sur des services Python
En revanche, dans un environnement conteneurisé, le réglage de oversize_threshold était important — mal configuré, cela provoquait des OOM
Je me demande s’il existe des benchmarks comparant jemalloc et mimalloc sur des services de longue durée
Comme références associées, je recommande Jemalloc Postmortem et
Jemalloc Repositories Are Archived
Je me demande si ce changement est lié à une pénurie mondiale de mémoire
On pourrait très bien voir des calculs du type « remplacer l’allocateur mémoire permet d’économiser plusieurs millions de dollars par an »
Rien qu’avec 0,1 % de gain d’efficacité, il était possible d’économiser 100 000 dollars par mois
Les principales économies venaient des coûts de refroidissement (HVAC) et de la réduction des achats de serveurs
Aujourd’hui, les économies de mémoire sont aussi un gros sujet, mais ce n’était pas le cas à l’époque
Dès qu’un changement touche des milliers de serveurs, même une petite amélioration devient un gros chiffre
Cette culture de l’amélioration quantifiée est bien installée
Même 10 % de gain de vitesse peut donner un avantage dans la compétition autour des LLM
Les incitations à améliorer les performances sont très fortes
En Australie, j’ai été licencié alors que je faisais de la programmation bas niveau
J’adore vraiment résoudre ce genre de problèmes, mais le marché local est surtout centré sur du React CRUD, ce qui est frustrant
Dans un projet de startup financé par la Banque mondiale, nous avons déployé Ruby + jemalloc en production
Les améliorations en vitesse et en efficacité mémoire étaient nettes, ce qui a fortement réduit les coûts AWS
C’était il y a 8 ans, et je me demande pourquoi jemalloc ne s’est toujours pas imposé comme standard
Changer un système déjà en production n’est pas facile, même quand le bénéfice est clair
Il existe aussi un cas d’usage de jemalloc pour remonter à la cause d’une fuite mémoire
Voir le billet du blog technique de GOV.UK
Meta a fusionné en masse le travail réalisé sur son fork interne
C’est visible dans la PR #2863
Je me demande s’il existe une ressource qui récapitule la chronologie ou l’histoire de jemalloc
C’est un projet open source, alors pourquoi Meta en détient-il le contrôle de fait ?
Voir le blog Jemalloc Postmortem
Les 2 autres pourraient aussi appartenir à Meta sans l’indiquer publiquement