La version de la bibliothèque de gestion de la mémoire jemalloc 5.4.0 est présentée, offrant une implementation alternative des fonctions malloc, optimisée pour réduire la fragmentation et fonctionner sur des systèmes multiprocesseurs. Pour résoudre les problèmes de verrouillage sur les systèmes multicœurs, jemalloc utilise une zone d'allocation de mémoire isolée pour chaque cœur de CPU, permettant ainsi d'atteindre une évolutivité linéaire à mesure que le nombre de threads augmente.
En juin 2025, l'auteur du projet a arrêté la maintenance et a déplacé le dépôt jemalloc en mode archivage, mais en mars de cette année, le développement a été repris par l'entreprise Meta, qui utilise jemalloc dans son infrastructure. À l'origine, la bibliothèque a été développée pour FreeBSD et est utilisée par défaut dans ce système d'exploitation depuis 2005. Le code de la bibliothèque est écrit en C et est distribué sous la licence BSD.
Parmi les changements :
- La logique de remplissage et de réinitialisation du tcache (Thread Local Cache) a été simplifiée, ainsi que la gestion de l'allocation de mémoire.
- Les allocateurs de pages mémoire PAC (Page Allocator Classic) et HPA (Huge Page Allocator) ont été unifiés. Le mécanisme complexe des appels indirects à travers vtable (PAI vtable) a été supprimé.
- Pour simplifier la maintenance et l'extension des plateformes, toutes les opérations dépendantes de la plateforme ont été déplacées vers des fichiers d'en-tête séparés.
- La gestion des commandes mallctl a été simplifiée, de même que l'infrastructure de génération et de sortie des statistiques.
- Un drapeau EXTENT_ALLOC_FLAG_PINNED a été ajouté pour marquer les zones de mappage de mémoire non évincées, telles que les pages HugeTLB, pour leur réutilisation prioritaire. De nouvelles interfaces mallctl ont été ajoutées pour obtenir des statistiques sur l'utilisation de la mémoire fixée : stats.pinned, stats.arenas.<i>.pinned, stats.arenas.<i>.extents.<j>.npinned, stats.arenas.<i>.extents..pinned_bytes et stats.arenas.<i>.mutexes.extents_pinned.{counter}.
- Le contenu des statistiques malloc a été synchronisé dans des formats lisibles et JSON.
- Les paramètres obsolètes lg_tcache_nslots_mul, tcache_nslots_small_min, tcache_nslots_small_max, tcache_nslots_large, tcache_gc_delay_bytes, lg_tcache_flush_small_div et lg_tcache_flush_large_div ont été supprimés.
Source : opennet.ru
