jemalloc
erschien zuerst für FreeBSD, die Idee eines "Jason Evans", daher das "je". Ich würde ihn verspotten, weil er egoistisch ist, hätte ich nicht einmal ein Betriebssystem namens geschrieben paxos
:-)
In diesem PDF finden Sie alle Details. Es ist ein Whitepaper, das detailliert beschreibt, wie die Algorithmen funktionieren.
Der Hauptvorteil ist die Skalierbarkeit in Multiprozessor- und Multithread-Systemen, die teilweise durch die Verwendung mehrerer Arenen (die Teile des Rohspeichers, aus denen Zuordnungen vorgenommen werden) erreicht wird.
In Situationen mit einem Thread haben mehrere Arenen keinen wirklichen Vorteil, sodass eine einzelne Arena verwendet wird.
In Situationen mit mehreren Threads werden jedoch viele Arenen erstellt (viermal so viele Arenen wie Prozessoren), und diesen Arenen werden Threads im Round-Robin-Verfahren zugewiesen.
Dies bedeutet, dass Sperrenkonflikte reduziert werden können, da zwar mehrere Threads gleichzeitig malloc
oder free
gleichzeitig aufgerufen werden , sie jedoch nur dann miteinander konkurrieren, wenn sie dieselbe Arena gemeinsam nutzen. Zwei Threads mit unterschiedlichen Arenen beeinflussen sich nicht gegenseitig.
Darüber hinaus wird jemalloc
versucht, die Cache-Lokalität zu optimieren, da das Abrufen von Daten aus dem RAM viel langsamer ist als die Verwendung von Daten, die sich bereits in den CPU-Caches befinden (im Konzept nicht anders als der Unterschied zwischen schnellem Abrufen aus dem RAM und langsamem Abrufen von der Festplatte). Zu diesem Zweck wird zunächst versucht, die Speichernutzung insgesamt zu minimieren, da dadurch eher sichergestellt wird, dass sich der gesamte Arbeitssatz der Anwendung im Cache befindet.
Und wo dies nicht erreicht werden kann, wird versucht, sicherzustellen, dass die Zuordnungen zusammenhängend sind, da der gemeinsam zugewiesene Speicher tendenziell zusammen verwendet wird.
Aus dem Whitepaper geht hervor, dass diese Strategien den derzeit besten Algorithmen für die Verwendung mit einem Thread eine ähnliche Leistung bieten und gleichzeitig Verbesserungen für die Verwendung mit mehreren Threads bieten.