Zum Inhalt springen

jemalloc

Die jemalloc-Erweiterung ersetzt den Speicherallokator des Systems durch jemalloc. Die jemalloc-Erweiterung ist statisch gelinkt und kann zur Laufzeit nicht installiert oder geladen werden.

Aus technischen Gründen haben wir jemalloc früher als Erweiterung ausgeliefert. Seit DuckDB v1.5.3 wird es als Drittanbieterbibliothek verteilt.

Betriebssystemunterstützung

Die Verfügbarkeit der jemalloc-Erweiterung hängt vom Betriebssystem ab.

Linux

Linux-Distributionen von DuckDB enthalten jemalloc standardmäßig. Um jemalloc zu deaktivieren, bauen Sie DuckDB aus dem Quellcode und setzen Sie das Flag SKIP_EXTENSIONS wie folgt:

Terminal window
GEN=ninja SKIP_EXTENSIONS="jemalloc" make

macOS

Die macOS-Version von DuckDB enthält jemalloc nicht, kann aber aus dem Quellcode gebaut werden, um es einzubinden:

Terminal window
GEN=ninja BUILD_JEMALLOC=1 make

Windows

Unter Windows ist diese Erweiterung nicht verfügbar.

Konfiguration

Umgebungsvariablen

Der jemalloc-Allokator in DuckDB kann über die Umgebungsvariable DUCKDB_JE_MALLOC_CONF konfiguriert werden. Das Setzen dieser Variable entspricht dem Setzen der Umgebungsvariable MALLOC_CONF für jemalloc; DuckDB verwendet jedoch einen anderen Variablennamen, um mögliche Namenskollisionen mit anderen Anwendungen zu vermeiden.

Hintergrund-Threads

Standardmäßig sind die Hintergrund-Threads von jemalloc deaktiviert. Um sie zu aktivieren, verwenden Sie die folgende Konfigurationsoption:

SET allocator_background_threads = true;

Hintergrund-Threads geben ausstehende Allokationen asynchron frei, sodass das nicht synchron durch die Vordergrund-Threads geschehen muss. Das verbessert die Allokationsleistung und sollte bei allokationslastigen Workloads spürbar sein, insbesondere auf CPUs mit vielen Kernen.