jemalloc
est apparu pour la première fois pour FreeBSD, l'idée d'un certain "Jason Evans", d'où le "je". Je me moquerais bien de son égoïsme si je n'avais pas écrit une fois un système d'exploitation appelé paxos
:-)
Voir ce PDF pour plus de détails. Il s'agit d'un livre blanc qui décrit en détail le fonctionnement des algorithmes.
Le principal avantage est l'évolutivité dans les systèmes multiprocesseurs et multithreads, obtenue en partie grâce à l'utilisation de plusieurs arènes (les morceaux de mémoire brute à partir desquels les allocations sont effectuées).
Dans les situations où il n'y a qu'un seul fil, il n'y a pas de réel avantage à avoir plusieurs arènes, donc une seule arène est utilisée.
Cependant, dans les situations multithreads, de nombreuses arènes sont créées (quatre fois plus d'arènes qu'il n'y a de processeurs), et les threads sont assignés à ces arènes de manière round-robin.
Cela signifie que la contention des verrous peut être réduite car, alors que plusieurs threads peuvent appeler malloc
o free
en même temps, ils ne s'affronteront que s'ils partagent la même arène. Deux fils avec des arènes différentes ne s'affecteront pas l'un l'autre.
En outre, jemalloc
tente d'optimiser la localité du cache, car l'extraction de données de la RAM est beaucoup plus lente que l'utilisation de données déjà présentes dans les caches du CPU (le concept n'est pas différent de la différence entre l'extraction rapide de données de la RAM et l'extraction lente de données du disque). À cette fin, il tente d'abord de minimiser l'utilisation de la mémoire dans son ensemble, car il est plus probable que l'ensemble des données de travail de l'application se trouve dans le cache.
Et, lorsque cela n'est pas possible, il essaie de s'assurer que les allocations sont contiguës, puisque 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 monofilière, tout en offrant des améliorations pour une utilisation multi-filière.