Nach fast vierjähriger Pause (siehe „jemalloc alles“) wurde die Version 5.3.1 des Allocators veröffentlicht jemalloc – einer Implementierung von malloc(3), die besonderen Wert auf die Vermeidung von Fragmentierung und Unterstützung skalierbarer Parallelität legt.
Die neue Version umfasst über 390 Commits mit Fehlerbehebungen, neuen Funktionen, Leistungsoptimierungen und Verbesserungen der Portabilität.
Das Projekt ist in C geschrieben und wird unter der BSD-Lizenz vertrieben.
Neue Funktionen:
- Unterstützung von pvalloc(3).
- Erkennung von doppelter Speicherfreigabe in der Debug-Build;
- Eine Kompilierungsoption —enable-pageid wurde hinzugefügt, um die Annotation von zugewiesenem Speicher zu aktivieren.
- Ein Laufzeiteinstellung prof_bt_max wurde hinzugefügt, um die maximale Tiefe des Profilerstellungs-Stacks zu steuern;
- Eine Kompilierungsoption —enable-force-getenv wurde hinzugefügt, um getenv statt secure_getenv zu verwenden;
- Eine Kompilierungsoption —disable-dss wurde hinzugefügt, um die Verwendung von sbrk(2) zu deaktivieren;
- Eine Kompilierungsoption tcache_ncached_max wurde hinzugefügt, um die Anzahl der Elemente im Thread-Cache zu steuern.
- Ein Laufzeiteinstellung calloc_madvise_threshold wurde hinzugefügt, um festzustellen, ob das Kernel oder memset zur Nullsetzung von zugewiesenen Speicherblöcken bei einem Aufruf von calloc verwendet wird;
- Eine Kompilierungsoption —disable-user-config wurde hinzugefügt, um das Lesen von Konfigurationen zur Laufzeit aus der Datei /etc/malloc.conf oder aus der Umgebungsvariablen MALLOC_CONF zu deaktivieren;
- Eine Laufzeiteinstellung disable_large_size_classes wurde hinzugefügt, um den Betrieb des neuen Algorithmus zur Berechnung der verfügbaren Größe zu gewährleisten, der den Speicheraufwand bei der Zuweisung großer Speicherblöcke, d. h. mit einer Größe >= 4 * PAGE, minimiert;
- Die Verwendung von process_madvise wurde aktiviert und eine Laufzeiteinstellung process_madvise_max_batch hinzugefügt, um die maximale Anzahl von Speicherbereichen in jedem „Batch“ madvise zu steuern;
- Die mallctl-Schnittstellen wurden hinzugefügt:
- opt.prof_bt_max;
- arena.<i>.name zum Ändern und Abrufen der Namen der „Arenen“;
- thread.tcache.max zum Ändern und Abrufen von tcache_max des aktuellen Threads;
- thread.tcache.ncached_max.write und thread.tcache.ncached_max.read_sizeclass zum Ändern und Abrufen von ncached_max des aktuellen Threads;
- arenas.hugepage zur Rückgabe der verwendeten Größe der hugepage, auch in die malloc-Statistik exportierend;
- approximate_stats.active zur Abfrage eines ungefähren Werts des aktuellen Volumens aktiver Bytes, der nicht mit anderen erhaltenen Statistiken verglichen werden sollte.
- Es wurden auch viele Fehler behoben und die Dokumentation verbessert.
Quelle: linux.org.ru
