Memory Manager e cache di sistema di Windows: paging, page combining e lazy write
In questa pagina
Risposta breve
Sezione intitolata “Risposta breve”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.
Cosa è stato verificato
Sezione intitolata “Cosa è stato verificato”Per ogni valore sono stati verificati:
- il percorso esatto nel Registry e il tipo;
- il valore predefinito definito dal codice di Windows 11 25H2;
- i valori correlati dello stesso sottosistema;
- il codice di sistema che esegue la lettura e il momento della sua esecuzione;
- i limiti di intervallo, la conversione dei valori e le unità di misura;
- 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.
Ambito della ricerca e prove
Sezione intitolata “Ambito della ricerca e prove”- Windows 11 25H2 x64, build
26200.9168. - I parametri del kernel sono stati confrontati con la tabella di configurazione principale
ntoskrnl.exee 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. PerHeapDeCommitFreeBlockThresholdin 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.
Parametri canonici
Sezione intitolata “Parametri canonici”| 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 |
DisablePagingExecutive
Sezione intitolata “DisablePagingExecutive”Cosa fa
Sezione intitolata “Cosa fa”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.
Valori e limiti
Sezione intitolata “Valori e limiti”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.
Utilità
Sezione intitolata “Utilità”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.
DisablePageCombining
Sezione intitolata “DisablePageCombining”Cosa fa
Sezione intitolata “Cosa fa”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.
Valori e limiti
Sezione intitolata “Valori e limiti”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.
Utilità
Sezione intitolata “Utilità”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.
HeapDeCommitFreeBlockThreshold
Sezione intitolata “HeapDeCommitFreeBlockThreshold”Cosa fa
Sezione intitolata “Cosa fa”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.
Valori e limiti
Sezione intitolata “Valori e limiti”- 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.
Utilità
Sezione intitolata “Utilità”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.
ModifiedWriteMaximum
Sezione intitolata “ModifiedWriteMaximum”Cosa fa
Sezione intitolata “Cosa fa”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:
0viene convertito in1unità, cioè 1 MB;- i valori maggiori di
0x40vengono limitati a0x40; - 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.
Utilità
Sezione intitolata “Utilità”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 e valori correlati
Sezione intitolata “EnableAsyncLazywrite e valori correlati”Cosa fa
Sezione intitolata “Cosa fa”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.
Utilità
Sezione intitolata “Utilità”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.
CacheUnmapBehindLengthInMB
Sezione intitolata “CacheUnmapBehindLengthInMB”Cosa fa
Sezione intitolata “Cosa fa”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.
Valori e clamp
Sezione intitolata “Valori e clamp”0o un valore maggiore di128viene sostituito dal codice con8.- Intervallo operativo:
1..128MB. - Default nel codice:
8MB. - Le unità del Registry value sono proprio MB, non byte.
Utilità
Sezione intitolata “Utilità”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.
SplitLargeCaches
Sezione intitolata “SplitLargeCaches”Cosa fa
Sezione intitolata “Cosa fa”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.
Valori e limiti
Sezione intitolata “Valori e limiti”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.
Utilità
Sezione intitolata “Utilità”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.
Utilità complessiva
Sezione intitolata “Utilità complessiva”| 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 |
Cosa è confermato e cosa non è stato misurato
Sezione intitolata “Cosa è confermato e cosa non è stato misurato”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.
Ripristino dello stato
Sezione intitolata “Ripristino dello stato”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.
Fonti pubbliche
Sezione intitolata “Fonti pubbliche”- Memory combining, Microsoft Learn: scopo del page combining e trade-off CPU/RAM, verificato 2026-09-01.
- Registry key that controls device driver and system code pagination to disk, Microsoft archive: semantica di
DisablePagingExecutive, verificato 2026-09-01. - HeapDeCommitFreeBlockThreshold, KB315407, documentazione storica di Microsoft: vecchio scenario user-mode e soglia di 256 KB, verificato 2026-09-01.
- Windows system configuration descriptions, descrizione RE pubblica di
SplitLargeCaches, verificato 2026-09-01.
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.
Cronologia delle modifiche
Sezione intitolata “Cronologia delle modifiche”- 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.
