Frage

Firefox 3 kam mit einem neuen Allocator. jemalloc

Ich habe an mehreren Stellen gehört, dass dieses neue allocator besser ist. Die Top-Google-Ergebnisse keine weiteren Informationen allerdings gab und ich bin daran interessiert, wie das genau funktioniert.

War es hilfreich?

Lösung

jemalloc erschien zuerst für FreeBSD, die Idee von einem "Jason Evans", also die "je". Ich würde ihn für Spott egoistisch hatte ich nicht einmal ein Betriebssystem geschrieben paxos genannt: -)

diese PDF für weitere Informationen. Es ist ein weißes Papier im Detail beschrieben wird, wie die Algorithmen arbeiten.

Der Hauptvorteil ist die Skalierbarkeit in Multi-Prozessor und Multi-Threaded-Systeme erreicht, die teilweise von mehreren Arenen (die Stücke von rohem Speicher, aus der Zuteilung gemacht wird) verwendet wird.

In Single-Threaded-Situationen gibt es keinen wirklichen Nutzen für mehrere Arenen so dass eine einzelne Arena verwendet wird.

jedoch in Multi-Threaded-Situationen sind viele Arenen erstellt (viermal so viele Arenen wie es Prozessoren sind), und Threads auf diese Arenen in einer Round-Robin-Weise zugewiesen sind.

Das bedeutet, dass Sperr-Konflikt seit reduziert werden kann, während mehrere Threads malloc oder free gleichzeitig aufrufen können, werden sie nur behaupten, wenn sie die gleiche Arena teilen. Zwei Threads mit verschiedenen Arenen nicht gegenseitig beeinflussen.

Darüber hinaus versucht jemalloc für Cache-Ort zu optimieren, da der Akt der Daten aus dem RAM zu holen ist viel langsamer als Daten, die bereits in dem CPU-Caches mit (nicht anders im Konzept des Unterschied zwischen schnellem Abrufen von RAM im Vergleich zu langsamem Abrufen von der Festplatte ). Zu diesem Zweck versucht es ersten Speicherverbrauch insgesamt zu minimieren, da die wahrscheinlicher ist, die Anwendung der gesamte Arbeits Satz im Cache, um sicherzustellen, ist.

Und, wenn dies nicht erreicht werden kann, wird versucht, um sicherzustellen, dass Zuweisungen angrenzen, da zusammen zugewiesenen Speicher neigen dazu, zusammen verwendet werden.

Von dem weißen Papier scheinen diese Strategien eine ähnliche Leistung zu aktuellen besten Algorithmen für Single-Threaded-Anwendung zu geben, während Verbesserungen für Multi-Threaded-Nutzung an.

Andere Tipps

Es gibt eine Quelle wenig Interessantes: die C-Quelle selbst: http://mxr.mozilla.org/mozilla-central/source /memory/mozjemalloc/jemalloc.c

Am Anfang eine kurze Zusammenfassung beschreibt, wie es ungefähr funktioniert. Obwohl, eine Tiefe Algorithmus Analyse fehlt.

Wie für welche Vorteile jemalloc zu mozilla gebracht, pro http : //blog.pavlov.net/2008/03/11/firefox-3-memory-usage/ (auch zuerst für mozilla + jemalloc führen google):

[...] zu dem Schluss, dass jemalloc gab uns die kleinste Menge an Fragmentierung nach einem langen Zeitraum ausgeführt wird. [...] Unsere automatisierten Tests auf Windows Vista zeigte ein 22% Rückgang der Speicherverbrauch , wenn wir gedreht jemalloc auf.

Aerospike jemalloc zurück in einem privaten Zweig im Jahr 2013 Im Jahr 2014 umgesetzt wurde es in 3.3 eingebaut Aerospike. Psi Mankoski schrieb gerade über Aerospike-Implementierung sowie wann und wie effektiv jemalloc zu verwenden, Hohe Skalierbarkeit .

jemalloc wirklich geholfen Aerospike nutzen moderne multithreaded, Multi-CPU, Multi-Core-Computer-Architekturen. Es gibt auch einige sehr wichtige Debugging-Funktionen zu jemalloc gebaut in Arenen zu verwalten. Das Debugging erlaubte Psi der Lage sein zu sagen, zum Beispiel, was ein echtes Speicherleck, im Vergleich zu, was das Ergebnis der Speicherfragmentierung war. Psi auch diskutiert, wie Thread-Cache und pro Thread Zuweisung boten eine Gesamtleistung (Geschwindigkeit) verbessert werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top