mi-malloc 1.8/2.1
 
Lade...
Suche...
Keine Treffer
Umgebungsoptionen

Sie können weitere Optionen entweder programmatisch (mit mi_option_set) oder über Umgebungsvariablen festlegen

  • MIMALLOC_SHOW_STATS=1: Statistiken beim Beenden des Programms anzeigen.
  • MIMALLOC_VERBOSE=1: Ausführliche Meldungen anzeigen.
  • MIMALLOC_SHOW_ERRORS=1: Fehler- und Warnmeldungen anzeigen.

Erweiterte Optionen

  • MIMALLOC_ARENA_EAGER_COMMIT=2: Aktiviert "eager commit" für die großen Arenen (normalerweise 1GiB), aus denen mimalloc Segmente und Seiten zuweist. Setzen Sie dies auf 2 (Standard), um dies nur auf Systemen mit Überbuchung (z. B. Linux) zu aktivieren. Setzen Sie dies auf 1, um es auch auf anderen Systemen (wie Windows oder macOS) explizit zu aktivieren, was die Leistung verbessern kann (da die gesamte Arena auf einmal committet wird). Beachten Sie, dass "eager commit" nur das Commit erhöht, nicht aber den tatsächlichen Spitzenwert des belegten Arbeitsspeichers (RSS), sodass es im Allgemeinen unbedenklich ist, dies zu aktivieren.
  • MIMALLOC_PURGE_DELAY=N: Die Verzögerung in N Millisekunden (standardmäßig 10), nach der mimalloc ungenutzte OS-Seiten leert ("purgen"). Dies signalisiert dem Betriebssystem, dass der zugrunde liegende physische Speicher wiederverwendet werden kann, was die Speicherfragmentierung insbesondere in langlebigen (Server-)Programmen reduzieren kann. Das Setzen von N auf 0 leert Seiten sofort, wenn sie ungenutzt werden, was den Speicherverbrauch verbessern kann, aber auch die Leistung verringert. Das Setzen von N auf einen höheren Wert wie 100 kann die Leistung verbessern (manchmal erheblich) auf Kosten eines potenziell höheren Speicherverbrauchs zu bestimmten Zeiten. Das Setzen auf -1 deaktiviert das Leeren vollständig.
  • MIMALLOC_PURGE_DECOMMITS=1: Standardmäßig bedeutet das "Leeren" von Speicher, dass ungenutzter Speicher decommittet wird (MEM_DECOMMIT unter Windows, MADV_DONTNEED (was den RSS sofort reduziert) auf mmap-Systemen). Setzen Sie dies auf 0, um stattdessen ungenutzten Speicher bei einem Leervorgang "zurückzusetzen" (MEM_RESET unter Windows, im Allgemeinen MADV_FREE (was den RSS nicht sofort reduziert) auf mmap-Systemen). Mimalloc gibt den OS-Speicher im Allgemeinen nicht "frei", sondern leert ihn nur, d. h. er versucht, virtuelle Adressbereiche beizubehalten und diese innerhalb dieser Bereiche zu decommitten (um den zugrunde liegenden physischen Speicher für andere Prozesse verfügbar zu machen).

Weitere Optionen für große Arbeitslasten und Dienste

  • MIMALLOC_USE_NUMA_NODES=N: Gibt vor, dass es höchstens N NUMA-Knoten gibt. Wenn nicht gesetzt, werden die tatsächlichen NUMA-Knoten zur Laufzeit erkannt. Das Setzen von N auf 1 kann Probleme in einigen virtuellen Umgebungen vermeiden. Außerdem ist das Setzen auf eine geringere Zahl als die tatsächlichen NUMA-Knoten in Ordnung und führt nur dazu, dass Threads potenziell mehr Speicher über tatsächliche NUMA-Knoten hinweg zuweisen (dies kann jedoch ohnehin geschehen, da die NUMA-lokale Zuweisung immer ein Best-Effort-Verfahren ist, aber nicht garantiert).
  • MIMALLOC_ALLOW_LARGE_OS_PAGES=1: Verwendet große OS-Seiten (2 oder 4MiB), wenn verfügbar; für einige Arbeitslasten kann dies die Leistung erheblich verbessern. Wenn diese Option deaktiviert ist, deaktiviert sie auch transparente riesige Seiten (THP) für den Prozess (unter Linux und Android). Verwenden Sie MIMALLOC_VERBOSE, um zu überprüfen, ob die großen OS-Seiten aktiviert sind – normalerweise muss man explizit Berechtigungen für große OS-Seiten erteilen (wie unter Windows und Linux). Manchmal ist das Betriebssystem jedoch sehr langsam, um zusammenhängenden physischen Speicher für große OS-Seiten zu reservieren, daher mit Vorsicht auf Systemen verwenden, die fragmentierten Speicher aufweisen können (aus diesem Grund empfehlen wir im Allgemeinen, stattdessen MIMALLOC_RESERVE_HUGE_OS_PAGES zu verwenden, wann immer möglich).
  • MIMALLOC_RESERVE_HUGE_OS_PAGES=N: wobei N die Anzahl der 1GiB großen riesigen OS-Seiten ist. Dies reserviert die riesigen Seiten beim Start und kann manchmal eine große (Latenz-)Leistungssteigerung bei großen Arbeitslasten erzielen. Normalerweise ist es besser, MIMALLOC_ALLOW_LARGE_OS_PAGES=1 nicht in Kombination mit dieser Einstellung zu verwenden. Genau wie bei großen OS-Seiten ist Vorsicht geboten, da die Reservierung von zusammenhängendem physischem Speicher bei fragmentiertem Speicher lange dauern kann (aber die Reservierung der riesigen Seiten erfolgt nur einmal beim Start). Beachten Sie, dass wir normalerweise explizit die Berechtigung für riesige OS-Seiten erteilen müssen (wie unter Windows und Linux)). Bei riesigen OS-Seiten kann es vorteilhaft sein, die Einstellung MIMALLOC_EAGER_COMMIT_DELAY=N (N ist standardmäßig 1) zu setzen, um die ersten N Segmente (von 4MiB) eines Threads zu verzögern, damit diese nicht in den riesigen OS-Seiten zugewiesen werden; dies verhindert, dass kurzlebige Threads, die nur wenig zuweisen, Platz im Bereich der riesigen OS-Seiten belegen (der nicht geleert werden kann, da riesige OS-Seiten an den physischen Speicher gebunden sind). Die riesigen Seiten werden normalerweise gleichmäßig auf die NUMA-Knoten verteilt. Wir können MIMALLOC_RESERVE_HUGE_OS_PAGES_AT=N verwenden, wobei N der NUMA-Knoten ist (beginnend bei 0), um alle riesigen Seiten stattdessen an einem bestimmten NUMA-Knoten zuzuweisen.

Seien Sie vorsichtig, wenn Sie fork in Kombination mit großen oder riesigen OS-Seiten verwenden: Bei einem Fork verwendet das Betriebssystem Copy-on-Write für alle Seiten im ursprünglichen Prozess, einschließlich der riesigen OS-Seiten. Wenn in diesem Bereich nun Speicher geschrieben wird, kopiert das Betriebssystem die gesamte 1GiB riesige Seite (oder 2MiB große Seite), was dazu führen kann, dass die Speichernutzung in großen Schritten ansteigt.