Nach fast vier Jahren Pause (siehe „jemalloc wurde„) die Version 5.3.1 des Allocators veröffentlicht, jemalloc – einer Implementierung von malloc(3), die besonderes Augenmerk auf die Vermeidung von Fragmentierung und die 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 doppeltem Freigeben von Speicher in der Debug-Version;
- eine Compiler-Option —enable-pageid hinzugefügt, um die Annotation des zugewiesenen Speichers zu aktivieren.
- Ein runtime-Parameter prof_bt_max wurde hinzugefügt, um die maximale Stapeltiefe für das Profiling zu steuern;
- eine Compiler-Option —enable-force-getenv hinzugefügt, um getenv anstelle von secure_getenv zu verwenden;
- eine Compiler-Option —disable-dss hinzugefügt, um die Verwendung von sbrk(2) zu deaktivieren;
- Eine Compiler-Option tcache_ncached_max wurde hinzugefügt, um die Anzahl der Elemente im Thread-Cache zu steuern.
- Ein runtime-Parameter calloc_madvise_threshold wurde hinzugefügt, um zu bestimmen, ob der Kernel oder memset zum Nullsetzen der zugewiesenen Speicherblöcke bei einem calloc-Aufruf verwendet wird;
- Die Option --disable-user-config wurde hinzugefügt, um das Lesen von Konfigurationen zur Laufzeit aus der Datei /etc/malloc.conf oder der Umgebungsvariable MALLOC_CONF zu deaktivieren.
- Ein Laufzeitparameter disable_large_size_classes wurde hinzugefügt, um den neuen Algorithmus zur Berechnung der verfügbaren Größe zu unterstützen, der den Speicheraufwand bei der Zuteilung großer Speicherblöcke, d.h. mit einer Größe >= 4 * PAGE, minimiert.
- Die Verwendung von process_madvise wurde aktiviert und der Laufzeitparameter process_madvise_max_batch hinzugefügt, um die maximale Anzahl von Speicherregionen in jedem 'Batch' von 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 zum Zurückgeben der verwendeten Größe von hugepage, die ebenfalls in die malloc-Statistik exportiert wird;
- approximate_stats.active zur Abfrage eines ungefähren Wertes der aktuellen aktiven Bytes, der nicht mit anderen erhaltenen statistischen Daten verglichen werden sollte.
- Außerdem wurden viele Fehler behoben und die Dokumentation verbessert.
Quelle: linux.org.ru
