Salta ai contenuti

Memory Manager e cache di sistema di Windows: paging, page combining e lazy write

In questa pagina

In questa serie sono stati verificati sette parametri di paging, unione di pagine identiche, heap del kernel e cache del file system. In Windows 11 25H2 è stato trovato il codice di lettura di ciascuno di essi. L’utilità pratica dipende dal parametro e dalle condizioni operative.

DisablePageCombining disattiva l’unione in background delle pagine: il gestore della memoria smette di svolgere questo lavoro, ma il consumo di RAM può aumentare. DisablePagingExecutive mantiene il codice scaricabile dei driver nella memoria fisica; l’utilità è di solito scarsa. Gli altri parametri sono applicabili solo a specifiche attività del kernel o delle unità di archiviazione, oppure hanno già valori predefiniti adeguati in 25H2.

Per ogni valore sono stati verificati:

  1. il percorso esatto nel Registry e il tipo;
  2. il valore predefinito definito dal codice di Windows 11 25H2;
  3. i valori correlati dello stesso sottosistema;
  4. il codice di sistema che esegue la lettura e il momento della sua esecuzione;
  5. i limiti di intervallo, la conversione dei valori e le unità di misura;
  6. l’effetto diretto e i limiti di applicabilità.

Oltre al codice di lettura, abbiamo verificato dove viene applicato il parametro, quali conseguenze ha la sua modifica e in quali scenari può essere utile. La sola presenza del parametro non è sufficiente per una raccomandazione.

  • Windows 11 25H2 x64, build 26200.9168.
  • I parametri del kernel sono stati confrontati con la tabella di configurazione principale ntoskrnl.exe e con il codice della loro applicazione in Memory Manager e Cache Manager.
  • Gli accessi durante l’esecuzione sono stati verificati con la traccia di sistema del Registry. Le letture nella fase 0 e all’inizio della fase 1 possono mancare in una normale traccia di avvio: il driver di traccia inizia a registrare più tardi.
  • Per i processi utente è stata verificata separatamente la lettura del valore in ntdll.dll. Per HeapDeCommitFreeBlockThreshold in 25H2 è stata trovata una lettura nel kernel, ma gli heap dei processi utente non usano questo parametro.
  • L’analisi statica dei componenti di sistema non sostituisce una ripetizione su un PC fisico, un’altra build o un altro tipo di unità di archiviazione.
Registry path Value Type Default Windows 11 25H2 Applicazione
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management DisablePagingExecutive REG_DWORD 0 Paging del codice pageable dei driver di sistema
stesso percorso DisablePageCombining REG_DWORD 0 Unione in background di pagine fisiche identiche
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager HeapDeCommitFreeBlockThreshold REG_DWORD 0x1000 (4 KB) per kernel heap Soglia di decommit dei blocchi liberi del kernel-mode heap
stesso percorso ModifiedWriteMaximum REG_DWORD 1 unità = 1 MB Limite superiore del modified page writer dopo il clamp
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management EnableAsyncLazywrite REG_DWORD 2 Modalità asincrona di Cache Manager
stesso percorso CacheUnmapBehindLengthInMB REG_DWORD 8 MB Finestra di unmap dietro la lettura sequenziale
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Kernel SplitLargeCaches REG_DWORD 0 Rappresentazione della cache topology tra processor groups

Con 0 il gestore della memoria di Windows può scaricare in un archivio di riserva le sezioni di codice di sistema e dei driver che lo consentono. Con 1 il codice scaricabile dei driver di sistema viene mantenuto nella memoria fisica.

Il codice di lettura è stato trovato in ntoskrnl.exe in una fase iniziale dell’inizializzazione del kernel. Il valore viene usato in MmResetDriverPaging, MmPageEntireDriver e durante il caricamento delle immagini di sistema. Viene applicato prima che inizi la normale traccia utente del Registry. Per applicare il nuovo stato è necessario un riavvio.

  • 0: stato standard di Windows, paging consentito.
  • 1: le sezioni scaricabili dei driver di sistema vengono mantenute in RAM.
  • L’impostazione consuma RAM per ridurre i successivi caricamenti del codice di sistema di nuovo in memoria; il disco in sé non diventa più veloce.

L’impostazione impedisce il successivo scaricamento e caricamento di queste sezioni dei driver. Non disattiva un thread CPU separato che le verifica costantemente. Su un sistema moderno con RAM sufficiente l’utilità è di solito molto scarsa: il codice può restare in memoria a lungo anche senza l’impostazione. In caso di RAM insufficiente, il suo mantenimento forzato aggrava la carenza di memoria.

La lettura del parametro e la direzione dell’effetto di sistema sono confermate dal codice ntoskrnl.exe.

Con 0 il gestore della memoria avvia un’attività in background che cerca e unisce le pagine fisiche identiche. Con 1 questa attività non esegue l’unione.

In ntoskrnl.exe è stato trovato il codice dell’unione in background delle pagine con pool tag MmCb, il che conferma la presenza del meccanismo.

  • 0: unione delle pagine consentita, stato standard di Windows.
  • 1: unione disattivata.
  • La disattivazione riduce il lavoro in background del gestore della memoria, ma può aumentare il consumo di RAM.

La disattivazione è utile se l’unione delle pagine crea un carico in background percepibile e il sistema ha RAM libera. Di solito questa attività è poco attiva, quindi l’effetto è molto ridotto. Con una quantità di memoria limitata, il risparmio di RAM derivante dall’unione è più utile del tempo di CPU risparmiato.

Il codice di lettura e dell’attività in background è confermato in ntoskrnl.exe. Microsoft descrive l’unione delle pagine e il compromesso tra lavoro della CPU e risparmio di RAM.

Il valore definisce la soglia di rilascio della memoria allocata (decommit) per un blocco libero dell’heap del kernel. Con una soglia maggiore, tali operazioni per i grandi blocchi liberi avvengono meno spesso.

In Windows 11 25H2 il codice di lettura si trova in ntoskrnl.exe, e l’applicazione del parametro è legata alla funzione del kernel RtlCreateHeap. In ntdll.dll non è stato trovato il corrispondente codice di lettura per gli heap dei processi normali.

  • Valore predefinito nel codice per l’heap del kernel: 0x1000 (4 KB).
  • 0x40000 (256 KB) è una soglia ammissibile per l’heap del kernel.
  • I documenti storici di Microsoft descrivevano uno scenario user-mode con lo stesso nome delle vecchie versioni di Windows, quindi non può essere trasferito automaticamente a Windows 11 25H2.

Per le applicazioni normali non c’è praticamente alcuna utilità: i loro heap non usano questo valore. Il parametro può modificare la frequenza di rilascio della memoria solo nell’heap del kernel. Senza un problema misurato proprio con esso, l’effetto atteso è molto ridotto.

La lettura in modalità kernel è confermata in ntoskrnl.exe. L’effetto per i processi utente in 25H2 non è confermato.

Il parametro definisce il limite superiore per il meccanismo di scrittura delle pagine modificate (modified page writer). Nel codice vengono usate unità da 256 pagine, cioè un’unità equivale a 1 MB.

Normalizzazione in Windows 11 25H2:

  • 0 viene convertito in 1 unità, cioè 1 MB;
  • i valori maggiori di 0x40 vengono limitati a 0x40;
  • il limite effettivo massimo è pari a 64 MB, ovvero 16 384 pagine.

Il meccanismo inizia la scrittura attiva all’incirca al raggiungimento di un quarto del limite impostato. L’aumento del limite cambia il momento di avvio della scrittura e il volume delle pagine modificate accumulate. La velocità del disco in sé non aumenta per questo.

Con un limite maggiore, prima dell’inizio della scrittura attiva si accumulano più pagine modificate. La scrittura può avviarsi meno spesso, ma il volume dei dati non ancora salvati e la dimensione della successiva porzione di scrittura aumentano. Se non c’è un problema specifico con la scrittura, lasciare il valore predefinito. Il limite effettivo è limitato a 64 MB.

Il codice di lettura, le unità di misura e la limitazione dell’intervallo sono confermati in ntoskrnl.exe. Il parametro con lo stesso nome dei vecchi documenti Microsoft su BitLocker appartiene a un altro sottosistema; questi documenti non vengono usati qui come fonte.

EnableAsyncLazywrite controlla la scrittura asincrona differita di Cache Manager. Nel codice di 25H2 è impostato il valore predefinito 2: questa modalità è già attiva.

Valori correlati dello stesso sottosistema:

Value Default 25H2 Ruolo
EnableAsyncLazywrite 2 Modalità async lazy-write generale
EnableAsyncLazywriteMulti 2 Modalità multi-volume adiacente
EnablePerVolumeLazyWriter 2 Lazy writer per volume

0 disattiva la scrittura asincrona differita. Per 1 è necessaria la modalità di un gestore separato della scrittura differita su ogni volume. 2 attiva la modalità asincrona senza questo requisito. Cache Manager rilegge i valori quando lavora con la configurazione dei volumi.

L’impostazione esplicita di 2 ripete la configurazione standard di Windows 11 25H2 e non migliora nulla in aggiunta. L’impostazione è adatta soprattutto per la diagnostica: il valore 0 consente di disattivare il meccanismo attivo per impostazione predefinita.

La lettura è stata osservata nella traccia di sistema ed è confermata in ntoskrnl.exe. Il valore predefinito 2 è confermato dal codice e da una descrizione indipendente dei parametri del Registry redatta in base ai risultati del reverse engineering.

Il parametro definisce la distanza in megabyte dopo la quale Cache Manager rilascia le viste memorizzate nella cache rimaste dietro la posizione corrente della lettura sequenziale.

Il codice di lettura e applicazione del parametro si trova in ntoskrnl.exe e viene chiamato durante la mappatura e la lettura della cache. Il parametro riguarda la lettura sequenziale di file di grandi dimensioni; non disattiva l’intera cache del file system.

  • 0 o un valore maggiore di 128 viene sostituito dal codice con 8.
  • Intervallo operativo: 1..128 MB.
  • Default nel codice: 8 MB.
  • Le unità del Registry value sono proprio MB, non byte.

Il parametro ha senso solo per attività specializzate di lettura sequenziale di file di grandi dimensioni. Con una finestra maggiore la vista della cache dietro la posizione corrente viene mantenuta più a lungo, con una minore viene rilasciata prima. Per il lavoro normale è adatto il valore standard 8 MB; l’utilità dell’impostazione manuale è di solito scarsa.

Il codice di lettura, applicazione e limitazione dell’intervallo è confermato in ntoskrnl.exe. Non è stata trovata documentazione pubblica moderna di Microsoft per questo parametro interno.

Con 0 l’API di descrizione della cache topology restituisce una voce unica per la struttura corrispondente che comprende più gruppi di processori. Con 1 le voci vengono separate per gruppi di processori.

Il codice di lettura si trova in ntoskrnl.exe. Il parametro viene usato durante l’elaborazione della relazione RelationCache in KeQueryLogicalProcessorRelationship.

Cambia solo la descrizione della topologia restituita dall’API di sistema. I blocchi fisici di memoria allocati non vengono separati, e la probabilità di carenza di un blocco contiguo di per sé non diminuisce.

  • 0: valore predefinito.
  • 1: separare le voci della topologia per gruppi di processori.
  • Un effetto pratico è possibile soprattutto su sistemi con più gruppi di processori, di solito con più di 64 processori logici.
  • Su un normale sistema a gruppo singolo l’effetto è assente.

Il parametro serve solo ai programmi che richiedono la cache topology su una macchina con più gruppi di processori. Non cambia il funzionamento della cache né l’allocazione della memoria. Per un normale computer desktop non c’è utilità.

Il codice di lettura e applicazione è confermato in ntoskrnl.exe. Il valore e lo scopo sono stati confrontati con la descrizione pubblica del reverse engineering KiSplitLargeCaches.

Parametro Valutazione pratica
DisablePagingExecutive Di solito offre un’utilità molto scarsa, mantenendo più codice in RAM
DisablePageCombining Utile in presenza di un carico confermato di unione in background delle pagine e di una grande riserva di RAM
HeapDeCommitFreeBlockThreshold Agisce solo nel kernel; per le applicazioni normali non c’è utilità pratica
ModifiedWriteMaximum Cambia le condizioni di scrittura delle pagine modificate; senza un problema rilevato lasciare il valore standard
EnableAsyncLazywrite Il valore standard 2 attiva già il meccanismo; l’impostazione ripetuta non migliora nulla
CacheUnmapBehindLengthInMB Impostazione della lettura sequenziale; i valori standard 8 MB sono adatti al lavoro normale
SplitLargeCaches Cambia la descrizione della topologia per più gruppi di processori; su un sistema normale non c’è effetto

Sono confermati i percorsi, i tipi, i valori predefiniti, il codice e il momento di lettura dei parametri indicati sopra, nonché i limiti degli intervalli. I risultati si riferiscono a Windows 11 25H2 build 26200.9168. Il comportamento può differire con un altro aggiornamento di Windows, una diversa quantità di RAM, un altro tipo di unità di archiviazione o un’altra topologia della CPU.

Come ripetere la parte dinamica delle osservazioni — vedere Come verificare autonomamente.

Per tornare indietro, ripristinare i valori standard dei parametri o eliminare le voci opzionali. Alcuni valori vengono applicati al successivo avvio di Windows.

La ricerca e gli strumenti utilizzati in essa appartengono allo sviluppatore di BoosterX, quindi lo sviluppatore ha un interesse diretto nei risultati. La metodologia e i limiti di applicabilità sono descritti in questo articolo; le conclusioni possono essere verificate tramite i dati aperti e le fonti pubbliche elencate di seguito.

Le affermazioni sul codice sono state verificate tramite analisi statica dei componenti di sistema di Windows 11 25H2. Il codice decompilato, gli offset, le tracce originali e i materiali interni non vengono pubblicati.

Fonti pubbliche verificate: 2026-09-02.

  • 2026-09-20: aggiunto il disclaimer sul conflitto di interessi e il link alla verifica autonoma delle osservazioni dinamiche nella metodologia.
  • 2026-09-02: prima pubblicazione; confermati percorsi, defaults, clamps e codice di lettura dei parametri, aggiunti i limiti dell’utilità pratica.