Zum Inhalt springen

Memory Manager und System-Cache in Windows: Paging, Page Combining und Lazy Write

Auf dieser Seite

In dieser Serie wurden sieben Parameter für Paging, das Zusammenführen identischer Seiten, Kernel-Heaps und den Dateicache geprüft. In Windows 11 25H2 wurde der Lesecode für jeden dieser Parameter gefunden. Der praktische Nutzen hängt vom Parameter und den Betriebsbedingungen ab.

DisablePageCombining deaktiviert das Hintergrund-Zusammenführen von Seiten: Der Speichermanager führt diese Arbeit nicht mehr aus, aber der RAM-Verbrauch kann steigen. DisablePagingExecutive hält auslagerbaren Treibercode im physischen Speicher; der Nutzen ist meist gering. Die übrigen Parameter gelten nur für einzelne Kernel- oder Datenträgeraufgaben oder haben in 25H2 bereits passende Standardwerte.

Für jeden Wert wurde geprüft:

  1. der genaue Registry-Pfad und Typ;
  2. der Standardwert, der durch den Code von Windows 11 25H2 festgelegt wird;
  3. verwandte Werte derselben Subsystem;
  4. der System-Lesecode und der Zeitpunkt seiner Ausführung;
  5. Bereichsgrenzen, Wertumwandlung und Maßeinheiten;
  6. der direkte Effekt und die Grenzen der Anwendbarkeit.

Neben dem Lesecode wurde geprüft, wo der Parameter angewendet wird, welche Folgen seine Änderung hat und in welchen Szenarien sie nützlich sein kann. Das bloße Vorhandensein eines Parameters reicht für eine Empfehlung nicht aus.

  • Windows 11 25H2 x64, build 26200.9168.
  • Die Kernel-Parameter wurden mit der Hauptkonfigurationstabelle ntoskrnl.exe und dem Code ihrer Anwendung im Memory Manager und Cache Manager abgeglichen.
  • Zugriffe zur Laufzeit wurden mit einer System-Registry-Trace geprüft. Lesevorgänge in Phase 0 und zu Beginn von Phase 1 können in einer normalen Start-Trace fehlen: Der Trace-Treiber beginnt später mit der Aufzeichnung.
  • Für Benutzerprozesse wurde das Lesen des Werts in ntdll.dll separat geprüft. Für HeapDeCommitFreeBlockThreshold wurde in 25H2 ein Lesevorgang im Kernel gefunden, aber die Heaps von Benutzerprozessen verwenden diesen Parameter nicht.
  • Die statische Analyse der Systemkomponenten ersetzt keine Wiederholung auf einem physischen PC, einem anderen build oder einem anderen Datenträgertyp.
Registry path Value Type Default Windows 11 25H2 Anwendung
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management DisablePagingExecutive REG_DWORD 0 Paging pageable-Code von Systemtreibern
derselbe Pfad DisablePageCombining REG_DWORD 0 Hintergrund-Zusammenführen identischer physischer Seiten
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager HeapDeCommitFreeBlockThreshold REG_DWORD 0x1000 (4 KB) für kernel heap Schwellenwert für decommit freier Blöcke des kernel-mode heap
derselbe Pfad ModifiedWriteMaximum REG_DWORD 1 Einheit = 1 MB Obergrenze des modified page writer nach clamp
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management EnableAsyncLazywrite REG_DWORD 2 Asynchroner Modus des Cache Manager
derselbe Pfad CacheUnmapBehindLengthInMB REG_DWORD 8 MB Unmap-Fenster hinter dem sequenziellen Lesen
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Kernel SplitLargeCaches REG_DWORD 0 Darstellung der cache topology zwischen processor groups

Bei 0 kann der Windows-Speichermanager auslagerbare Abschnitte von Systemcode und Treibern in den Auslagerungsspeicher auslagern. Bei 1 wird auslagerbarer Code von Systemtreibern im physischen Speicher gehalten.

Der Lesecode wurde in ntoskrnl.exe in einer frühen Phase der Kernel-Initialisierung gefunden. Der Wert wird in MmResetDriverPaging, MmPageEntireDriver und beim Laden von Systemabbildern verwendet. Er wird angewendet, bevor die normale Benutzer-Registry-Trace beginnt. Damit der neue Zustand wirksam wird, ist ein Neustart erforderlich.

  • 0: Standardzustand von Windows, Paging erlaubt.
  • 1: auslagerbare Abschnitte von Systemtreibern werden im RAM gehalten.
  • Die Einstellung verbraucht RAM, um spätere Ladevorgänge von Systemcode zurück in den Speicher zu verkürzen; der Datenträger selbst wird nicht schneller.

Die Einstellung verhindert das spätere Auslagern und Laden dieser Treiberabschnitte. Einen separaten permanent prüfenden CPU-Thread deaktiviert sie nicht. Auf einem modernen System mit ausreichend RAM ist der Nutzen meist sehr gering: Der Code kann auch ohne die Einstellung lange im Speicher bleiben. Bei RAM-Mangel verstärkt sein erzwungenes Halten den Speichermangel.

Das Lesen des Parameters und die Richtung des Systemeffekts wurden durch den Code von ntoskrnl.exe bestätigt.

Bei 0 startet der Speichermanager eine Hintergrundaufgabe, die identische physische Seiten sucht und zusammenführt. Bei 1 führt diese Aufgabe keine Zusammenführung aus.

In ntoskrnl.exe wurde der Code für das Hintergrund-Zusammenführen von Seiten mit dem Pool-Tag MmCb gefunden, was das Vorhandensein des Mechanismus bestätigt.

  • 0: Zusammenführen von Seiten erlaubt, Standardzustand von Windows.
  • 1: Zusammenführen deaktiviert.
  • Die Deaktivierung reduziert die Hintergrundarbeit des Speichermanagers, kann aber den RAM-Verbrauch erhöhen.

Die Deaktivierung ist nützlich, wenn das Zusammenführen von Seiten eine spürbare Hintergrundlast erzeugt und das System über freien RAM verfügt. Normalerweise ist diese Aufgabe wenig aktiv, daher ist der Effekt sehr gering. Bei begrenztem Speichervolumen ist die RAM-Einsparung durch das Zusammenführen nützlicher als die eingesparte Prozessorzeit.

Der Lesecode und die Hintergrundaufgabe wurden in ntoskrnl.exe bestätigt. Microsoft beschreibt das Zusammenführen von Seiten und den Kompromiss zwischen Prozessorarbeit und RAM-Einsparung.

Der Wert legt den Schwellenwert für die Freigabe (decommit) von zugewiesenem Speicher für einen freien Block des Kernel-Heaps fest. Bei einem größeren Schwellenwert erfolgen solche Vorgänge für große freie Blöcke seltener.

In Windows 11 25H2 befindet sich der Lesecode in ntoskrnl.exe, und die Anwendung des Parameters ist mit der Kernel-Funktion RtlCreateHeap verbunden. In ntdll.dll wurde kein entsprechender Lesecode für Heaps gewöhnlicher Prozesse gefunden.

  • Standardwert im Code für den Kernel-Heap: 0x1000 (4 KB).
  • 0x40000 (256 KB) ist ein zulässiger Schwellenwert für den Kernel-Heap.
  • Historische Microsoft-Dokumente beschrieben ein gleichnamiges User-Mode-Szenario älterer Windows-Versionen, daher kann es nicht automatisch auf Windows 11 25H2 übertragen werden.

Für gewöhnliche Anwendungen gibt es praktisch keinen Nutzen: Ihre Heaps verwenden diesen Wert nicht. Der Parameter kann die Häufigkeit der Speicherfreigabe nur im Kernel-Heap ändern. Ohne ein gemessenes Problem genau damit ist der erwartete Effekt sehr gering.

Das Lesen im Kernel-Modus wurde in ntoskrnl.exe bestätigt. Der Effekt für Benutzerprozesse in 25H2 wurde nicht bestätigt.

Der Parameter legt die Obergrenze für den Mechanismus zum Schreiben geänderter Seiten (modified page writer) fest. Im Code werden Einheiten von 256 Seiten verwendet, das heißt eine Einheit entspricht 1 MB.

Normalisierung in Windows 11 25H2:

  • 0 wird in 1 Einheit umgewandelt, das heißt 1 MB;
  • Werte größer als 0x40 werden auf 0x40 begrenzt;
  • die maximal effektive Grenze beträgt 64 MB, oder 16 384 Seiten.

Der Mechanismus beginnt mit dem aktiven Schreiben etwa beim Erreichen eines Viertels des festgelegten Limits. Eine Erhöhung des Limits ändert den Zeitpunkt des Schreibbeginns und das Volumen der angesammelten geänderten Seiten. Die Geschwindigkeit des Datenträgers selbst steigt dadurch nicht.

Bei einem größeren Limit sammeln sich vor Beginn des aktiven Schreibens mehr geänderte Seiten an. Das Schreiben kann seltener ausgelöst werden, aber das Volumen der noch nicht gespeicherten Daten und die Größe der nächsten Schreibcharge wachsen. Wenn kein konkretes Problem mit dem Schreiben vorliegt, lassen Sie den Standardwert. Die effektive Grenze ist auf 64 MB begrenzt.

Der Lesecode, die Maßeinheiten und die Bereichsbegrenzung wurden in ntoskrnl.exe bestätigt. Der gleichnamige Parameter aus alten Microsoft-Dokumenten zu BitLocker gehört zu einem anderen Subsystem; diese Dokumente werden hier nicht als Quelle verwendet.

EnableAsyncLazywrite steuert das asynchrone verzögerte Schreiben des Cache Manager. Im Code von 25H2 ist der Standardwert 2 festgelegt: Dieser Modus ist bereits aktiviert.

Verwandte Werte desselben Subsystems:

Value Default 25H2 Rolle
EnableAsyncLazywrite 2 Allgemeiner async lazy-write mode
EnableAsyncLazywriteMulti 2 Benachbarter multi-volume Modus
EnablePerVolumeLazyWriter 2 Per-volume lazy writer

0 deaktiviert das asynchrone verzögerte Schreiben. Für 1 ist der Modus eines separaten Handlers für verzögertes Schreiben auf jedem Volume erforderlich. 2 aktiviert den asynchronen Modus ohne diese Anforderung. Der Cache Manager liest die Werte bei der Arbeit mit der Volume-Konfiguration erneut.

Das explizite Setzen von 2 wiederholt die Standardkonfiguration von Windows 11 25H2 und verbessert nichts zusätzlich. Die Einstellung eignet sich vor allem zur Diagnose: Der Wert 0 ermöglicht es, den standardmäßig aktiven Mechanismus zu deaktivieren.

Das Lesen wurde in der System-Trace beobachtet und in ntoskrnl.exe bestätigt. Der Standardwert 2 wurde durch den Code und eine unabhängige Beschreibung der Registry-Parameter bestätigt, die anhand der Ergebnisse der Rückwärtsanalyse erstellt wurde.

Der Parameter legt den Abstand in Megabyte fest, nach dem der Cache Manager zwischengespeicherte Ansichten freigibt, die hinter der aktuellen Position des sequenziellen Lesens zurückgeblieben sind.

Der Code zum Lesen und Anwenden des Parameters befindet sich in ntoskrnl.exe und wird beim Abbilden und Lesen des Caches aufgerufen. Der Parameter betrifft das sequenzielle Lesen großer Dateien; den gesamten Dateicache deaktiviert er nicht.

  • 0 oder ein Wert größer als 128 wird vom Code durch 8 ersetzt.
  • Arbeitsbereich: 1..128 MB.
  • Code-Default: 8 MB.
  • Die Einheiten des Registry value sind MB, nicht Bytes.

Der Parameter ist nur für spezialisierte Aufgaben des sequenziellen Lesens großer Dateien sinnvoll. Bei einem größeren Fenster bleibt die Cache-Abbildung hinter der aktuellen Position länger erhalten, bei einem kleineren wird sie früher freigegeben. Für den normalen Betrieb passt der Standardwert 8 MB; der Nutzen manueller Anpassung ist meist gering.

Der Code zum Lesen, Anwenden und zur Bereichsbegrenzung wurde in ntoskrnl.exe bestätigt. Eine moderne öffentliche Microsoft-Dokumentation für diesen internen Parameter wurde nicht gefunden.

Bei 0 gibt die API zur Beschreibung der Cache-Topologie einen einheitlichen Eintrag für die entsprechende Struktur zurück, die mehrere Prozessorgruppen umfasst. Bei 1 werden die Einträge nach Prozessorgruppen getrennt.

Der Lesecode befindet sich in ntoskrnl.exe. Der Parameter wird bei der Verarbeitung der Beziehung RelationCache in KeQueryLogicalProcessorRelationship verwendet.

Geändert wird nur die Beschreibung der Topologie, die die System-API zurückgibt. Zugewiesene physische Speicherblöcke werden nicht getrennt, und die Wahrscheinlichkeit eines Mangels an einem zusammenhängenden Block verringert sich dadurch nicht von selbst.

  • 0: Standardwert.
  • 1: Topologie-Einträge nach Prozessorgruppen trennen.
  • Ein praktischer Effekt ist vor allem auf Systemen mit mehreren Prozessorgruppen möglich, üblicherweise bei mehr als 64 logischen Prozessoren.
  • Auf einem gewöhnlichen System mit einer Gruppe gibt es keinen Effekt.

Der Parameter wird nur von Programmen benötigt, die die Cache-Topologie auf einem Rechner mit mehreren Prozessorgruppen abfragen. Die Arbeit des Caches und die Speicherzuweisung ändert er nicht. Für einen gewöhnlichen Desktop-Computer gibt es keinen Nutzen.

Der Code zum Lesen und Anwenden wurde in ntoskrnl.exe bestätigt. Wert und Zweck wurden mit der öffentlichen Beschreibung der Rückwärtsanalyse KiSplitLargeCaches abgeglichen.

Parameter Praktische Bewertung
DisablePagingExecutive Bringt meist sehr geringen Nutzen, indem mehr Code im RAM gehalten wird
DisablePageCombining Nützlich bei bestätigter Last durch das Hintergrund-Zusammenführen von Seiten und großem RAM-Reserve
HeapDeCommitFreeBlockThreshold Wirkt nur im Kernel; für gewöhnliche Anwendungen gibt es keinen praktischen Nutzen
ModifiedWriteMaximum Ändert die Bedingungen für das Schreiben geänderter Seiten; ohne erkanntes Problem lassen Sie den Standardwert
EnableAsyncLazywrite Der Standardwert 2 aktiviert den Mechanismus bereits; erneutes Setzen verbessert nichts
CacheUnmapBehindLengthInMB Einstellung für sequenzielles Lesen; die Standardwerte 8 MB passen für den normalen Betrieb
SplitLargeCaches Ändert die Topologie-Beschreibung für mehrere Prozessorgruppen; auf einem gewöhnlichen System gibt es keinen Effekt

Bestätigt wurden die oben genannten Pfade, Typen, Standardwerte, der Code und der Zeitpunkt des Lesens der Parameter sowie die Bereichsbegrenzungen. Die Ergebnisse beziehen sich auf Windows 11 25H2 build 26200.9168. Das Verhalten kann bei einem anderen Windows-Update, RAM-Volumen, Datenträgertyp oder einer anderen CPU-Topologie abweichen.

Wie der dynamische Teil der Beobachtungen wiederholt werden kann — siehe Wie man selbst prüft.

Zur Rückkehr stellen Sie die Standardwerte der Parameter wieder her oder löschen Sie die optionalen Einträge. Ein Teil der Werte wird beim nächsten Start von Windows angewendet.

Die Untersuchung und die darin verwendeten Werkzeuge gehören dem Entwickler von BoosterX, daher hat der Entwickler ein direktes Interesse an den Ergebnissen. Die Methodik und die Grenzen der Anwendbarkeit sind in diesem Artikel beschrieben; die Schlussfolgerungen können anhand offener Daten und der unten aufgeführten öffentlichen Quellen überprüft werden.

Die Aussagen zum Code wurden durch statische Analyse der Systemkomponenten von Windows 11 25H2 geprüft. Dekompilierter Code, Offsets, ursprüngliche Traces und interne Materialien werden nicht veröffentlicht.

Öffentliche Quellen geprüft: 2026-09-02.

  • 2026-09-20: Disclaimer zum Interessenkonflikt und Link zur Selbstprüfung der dynamischen Beobachtungen in der Methodik hinzugefügt.
  • 2026-09-02: erste Veröffentlichung; Pfade, defaults, clamps und Lesecode der Parameter bestätigt, Grenzen des praktischen Nutzens hinzugefügt.