CPU und memory die Nutzung von jemalloc, im Vergleich zu glibc malloc
Hatte ich vor kurzem gelernt über jemalloc, es ist der memory-allocator verwendet, die von firefox. Ich habe versucht, die Integration von jemalloc in meinem system durch überschreiben von new und delete operator und ruft die jemalloc-äquivalente von malloc und free, ich.e je_malloc und je_free.Ich habe geschrieben eine test-Anwendung, die 100-Millionen-Zuweisungen.Ich habe die Anwendung laufen beide mit der glibc malloc und jemalloc, während der Ausführung mit jemalloc dauert weniger Zeit für diese Zuweisungen ist die CPU-Auslastung ist ziemlich hoch, außerdem ist das der memory foot print ist auch größer als im Vergleich zu malloc. Nach der Lektüre dieses Dokuments auf jemalloc-Analyse
es schien, dass jemalloc könnte Fußabdrücke größer als malloc, wie es beschäftigt Verfahren zur Optimierung von Geschwindigkeit als Speicher. Allerdings habe ich keine Hinweise auf die CPU-Auslastung mit Jemalloc. Ich möchte behaupten, dass ich das arbeiten auf einer Multiprozessor-Maschine, die details sind unten angegeben.
Prozessor : 11
vendor_id : GenuineIntel
cpu-Familie : 6
Modell : 44
model name : Intel(R) Xeon(R) CPU X5680 @ 3.33 GHz
stepping : 2
cpu MHz : 3325.117
cache size : 12288 KB
physische id : 1
Geschwister : 12
Kern id : 10
cpu-Kerne : 6
apicid : 53
fpu : yes
fpu_exception : yes
cpuid level : 11
wp : ja
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx pdpe1gb rdtscp lm constant_tsc-ida nonstop_tsc arat pni monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr sse4_1 sse4_2 popcnt lahf_lm
bogomips : 6649.91
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power-management: [8]
Ich bin mit top -c -b -d 1.10 -p 24670 | awk -v Zeit=$ZEIT '{print Zeit,",",$9}' zum verfolgen der CPU-Auslastung.
Hat jemand ähnliche Erfahrungen haben, während die Integration Jemlloc?
Dank!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ein weiser Mann sagte auf CppCon, dass Sie nie zu erraten, um die Leistung. Sie haben, um Sie zu Messen, statt.
Habe ich versucht zu verwenden
jemalloc
mit Linux Multithread-Anwendung. Es war custom application-level-Protokoll-server (über TCP/IP). Diese C++ - Anwendung verwendet eine Reihe von Java-code über JNI (nahe 5% der Zeit, die es verwendet Java, und 95% der Zeit, die es verwendet C++ - code) ich Laufe 2-Anwendung Instanzen im produktiven Betrieb. Jeder hatte sein 150-threads.Nach 72 Stunden ausgeführt
glibc
verwendet 900 M von Speicher, undjemalloc
verwendet man 2,2 G Speicher. Ich wollte nicht sehen, signifikante CPU-Auslastung Unterschied. Die tatsächliche Leistung (Durchschnitt client-Anforderung portion Zeit) nahezu die gleichen für beide Instanzen.So, in meinem test
glibc
war viel besser alsjemalloc
. Natürlich, es ist meine Anwendung spezifisch.Abschluss: Wenn Sie Gründe haben zu glauben, dass Ihre Anwendung-Speicher-management ist nicht effektiv, weil der Fragmentierung, müssen Sie den test ähnlich jener, die ich beschrieben. Es ist die einzige zuverlässige Informationsquelle, die für Ihre spezifischen Bedürfnisse. Wenn
jemalloc
ist immer besser, dassglibc
,glibc
machenjemalloc
seine offizielle Zuweisung. Wennglibc
ist immer besser,jemalloc
wird aufhören zu existieren. Wenn die Konkurrenten es gibt lange Zeit parallel, bedeutet das, dass jeder hat seine eigene Verwendung Nische.Diese Frage vielleicht nicht hierher gehören, da für die real-world-Lösungen, sollte es egal sein, was andere Personen auf Ihren verschiedenen hardware/- Umgebungen/Nutzungs-Szenarien. Sollten Sie einen test auf dem Zielsystem und sehen, was zu Ihnen passt.
Als für die höhere Arbeitsspeicher, einer der am meisten klassischen performance-Optimierungen in der informatik ist die Zeit-Speicher-Kompromiss. Das heißt, das Zwischenspeichern bestimmter Ergebnisse für instant-lookup später auf und verhindern häufige Neuberechnung. Auch da ist es vermutlich viel komplexer, es wäre wahrscheinlich viel mehr interne Buchhaltung. Diese Art von Kompromiss sollte mehr oder weniger erwartet, vor allem bei der Auswahl zwischen den Varianten solcher low-level-und weit verbreitete core-Module. Sie haben zu sorgen, dass die peformance Merkmale auf Ihre Gebrauchseigenschaften, da in der Regel, es gibt keine silberne Kugel.
Möglicherweise möchten Sie auch zu suchen bei google TCMalloc, die ist ganz nah, obwohl ich glaube, dass Jemalloc ist etwas leistungsfähiger im Allgemeinen, sowie die Schaffung weniger heap-Fragmentierung über die Zeit.
Aerospike umgesetzt jemalloc auf unserer NoSQL-Datenbank und veröffentlichte die Implementierung vor etwa einem Jahr mit v3.3.x. Gerade heute Psi Mankoski veröffentlicht ein Artikel auf der Hohen Skalierbarkeit darüber, warum und wie wir es geschafft haben, und die performance-Verbesserungen gab es im Vergleich zu GlibC malloc.
Wir tatsächlich sah einen Rückgang der RAM-Auslastung, da der Weg, den wir hätten nutzen können, um jemalloc die debugging-Funktion zu minimieren RAM-Fragmentierung. In der Produktion Umwelt -, server - % Freien Speicher war oft ein "spiky Diagramm", und hatte oft gespickt mit 54% vor der Umsetzung von JEMalloc. Nach der Implementierung können Sie sehen, der Rückgang der RAM-Auslastung in den 4-Monats-Betrachtungszeitraum. RAM - % freien Speicher begann zu "flatline" und sein weit mehr vorhersehbaren, schwebt zwischen ~22-40%, abhängig von der server-Knoten.
Als Preet sagt, es gab viel weniger Fragmentierung über die Zeit, was bedeutet, dass weniger RAM-Auslastung. Bei den Psi-Artikel gibt "proof in the pudding" hinter dieser Aussage.
Ich entwickle einfache NoSQL-Datenbank.
(https://github.com/nmmmnu/HM4)
jemalloc vs standard-malloc
Wenn ich jemalloc, die Leistung verringern, aber der Speicher "Fragmentierung" sinkt. Jemalloc scheint auch weniger Speicher verwenden, auf dem Höhepunkt, aber der Unterschied ist 5-6%.
Was ich meine mit der Fragmentierung des Speichers ist wie folgt.
In standard-malloc, die Nutzung ist fast wie auf dem Gipfel. (Ich habe gerade überprüft, die mmap-Speicher und es gibt keine).
Mit jemalloc-Auslastung ist minimal.
bonus-Informationen - tcmalloc
Letztes mal habe ich überprüft, mit tcmalloc, es war wirklich sehr schnell - wahrscheinlich 10% von Verbesserungen über den standard-malloc.
Auf dem Gipfel, es verbraucht weniger Speicher als die standard-malloc, aber mehr als jemalloc.
Erinnere ich mich nicht über die Fragmentierung des Speichers, aber es war weit von jemalloc Ergebnis.