Gå til indhold

Memory Manager og Windows-systemcache: paging, page combining og lazy write

På denne side

I denne serie er syv parametre for paging, sammenlægning af identiske sider, kernel-heaps og filcache undersøgt. I Windows 11 25H2 er der fundet læsekode for hver af dem. Den praktiske nytte afhænger af parameteren og driftsforholdene.

DisablePageCombining deaktiverer baggrundssammenlægning af sider: hukommelsesadministratoren holder op med at udføre dette arbejde, men RAM-forbruget kan stige. DisablePagingExecutive holder driveres sidebare kode i fysisk hukommelse; nytten er normalt lille. De øvrige parametre gælder kun for specifikke kernel- eller lageropgaver eller har allerede passende standardværdier i 25H2.

For hver værdi blev følgende undersøgt:

  1. den præcise sti i registreringsdatabasen og typen;
  2. standardværdien fastsat af koden i Windows 11 25H2;
  3. relaterede værdier i samme undersystem;
  4. systemets læsekode og tidspunktet for dens udførelse;
  5. grænser for værdiområdet, konvertering af værdier og måleenheder;
  6. den direkte effekt og grænserne for anvendelighed.

Ud over læsekoden undersøgte vi, hvor parameteren anvendes, hvilke konsekvenser en ændring har, og i hvilke scenarier den kan være nyttig. Det er ikke tilstrækkeligt, at parameteren blot eksisterer, for at anbefale den.

  • Windows 11 25H2 x64, build 26200.9168.
  • Kernel-parametre er sammenholdt med hovedkonfigurationstabellen ntoskrnl.exe og koden for deres anvendelse i Memory Manager og Cache Manager.
  • Adgange under kørsel blev verificeret med systemets registreringssporing. Læsninger i fase 0 og i begyndelsen af fase 1 kan mangle i en almindelig opstartssporing: sporingsdriveren begynder først at registrere senere.
  • For brugerprocesser blev læsning af værdien undersøgt separat i ntdll.dll. For HeapDeCommitFreeBlockThreshold er der i 25H2 fundet læsning i kernen, men heaps i brugerprocesser bruger ikke denne parameter.
  • Statisk analyse af systemkomponenter erstatter ikke en gentagelse på en fysisk pc, et andet build eller en anden type lagerenhed.
Registry path Value Type Default Windows 11 25H2 Применение
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management DisablePagingExecutive REG_DWORD 0 Paging af pageable kode i systemdrivere
samme sti DisablePageCombining REG_DWORD 0 Baggrundssammenlægning af identiske fysiske sider
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager HeapDeCommitFreeBlockThreshold REG_DWORD 0x1000 (4 KB) for kernel heap Tærskel for decommit af frie blokke i kernel-mode heap
samme sti ModifiedWriteMaximum REG_DWORD 1 enhed = 1 MB Øvre grænse for modified page writer efter clamp
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management EnableAsyncLazywrite REG_DWORD 2 Asynkron tilstand i Cache Manager
samme sti CacheUnmapBehindLengthInMB REG_DWORD 8 MB Unmap-vindue bag sekventiel læsning
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Kernel SplitLargeCaches REG_DWORD 0 Gengivelse af cache-topologi mellem processor groups

Ved 0 kan Windows’ hukommelsesadministrator skrive sektioner af systemkode og drivere, der tillader det, ud til backup-lager. Ved 1 holdes sidebar kode i systemdrivere i fysisk hukommelse.

Læsekoden er fundet i ntoskrnl.exe på et tidligt tidspunkt i kernel-initialiseringen. Værdien bruges i MmResetDriverPaging, MmPageEntireDriver og ved indlæsning af systembilleder. Den anvendes tidligere, end den almindelige brugersporing af registreringsdatabasen begynder. Der kræves en genstart for at anvende den nye tilstand.

  • 0: standardtilstanden i Windows, paging er tilladt.
  • 1: sidebare sektioner i systemdrivere holdes i RAM.
  • Indstillingen bruger RAM for at reducere efterfølgende indlæsning af systemkode tilbage i hukommelsen; selve disken bliver ikke hurtigere.

Indstillingen forhindrer efterfølgende udskrivning og indlæsning af disse driversektioner. Den deaktiverer ikke en separat konstant CPU-kontroltråd. På et moderne system med tilstrækkelig RAM er nytten normalt meget lille: koden kan blive i hukommelsen længe selv uden indstillingen. Ved RAM-mangel forstærker den tvungne tilbageholdelse manglen på hukommelse.

Læsningen af parameteren og retningen af systemeffekten er bekræftet af koden i ntoskrnl.exe.

Ved 0 starter hukommelsesadministratoren en baggrundsopgave, der søger efter og sammenlægger identiske fysiske sider. Ved 1 udfører denne opgave ikke sammenlægningen.

I ntoskrnl.exe er der fundet kode til baggrundssammenlægning af sider med pool-tag MmCb, hvilket bekræfter, at mekanismen findes.

  • 0: sammenlægning af sider er tilladt, standardtilstanden i Windows.
  • 1: sammenlægning er deaktiveret.
  • Deaktivering reducerer hukommelsesadministratorens baggrundsarbejde, men kan øge RAM-forbruget.

Deaktivering er nyttig, hvis sammenlægning af sider skaber en mærkbar baggrundsbelastning, og systemet har ledig RAM. Normalt er denne opgave ikke særlig aktiv, så effekten er meget lille. Ved begrænset hukommelse er RAM-besparelsen fra sammenlægning mere værd end den sparede processortid.

Læsekoden og baggrundsopgaven er bekræftet i ntoskrnl.exe. Microsoft beskriver sammenlægning af sider og afvejningen mellem processorarbejde og RAM-besparelse.

Værdien angiver tærsklen for frigivelse af allokeret hukommelse (decommit) for en fri blok i kernel-heapen. Ved en højere tærskel forekommer sådanne operationer sjældnere for store frie blokke.

I Windows 11 25H2 findes læsekoden i ntoskrnl.exe, og anvendelsen af parameteren er knyttet til kernel-funktionen RtlCreateHeap. I ntdll.dll er der ikke fundet tilsvarende læsekode for heaps i almindelige processer.

  • Standardværdien i koden for kernel-heapen: 0x1000 (4 KB).
  • 0x40000 (256 KB) er en gyldig tærskel for kernel-heapen.
  • Historiske Microsoft-dokumenter beskrev et user-mode-scenarie med samme navn fra ældre Windows-versioner, så det kan ikke automatisk overføres til Windows 11 25H2.

For almindelige programmer er der praktisk taget ingen nytte: deres heaps bruger ikke denne værdi. Parameteren kan kun ændre hyppigheden af hukommelsesfrigivelse i kernel-heapen. Uden et målt problem netop med denne er den forventede effekt meget lille.

Læsningen i kernel-mode er bekræftet i ntoskrnl.exe. Effekten for brugerprocesser i 25H2 er ikke bekræftet.

Parameteren angiver den øvre grænse for mekanismen til at skrive ændrede sider (modified page writer). I koden bruges enheder på 256 sider, det vil sige, at en enhed er lig med 1 MB.

Normalisering i Windows 11 25H2:

  • 0 konverteres til 1 enhed, det vil sige 1 MB;
  • værdier større end 0x40 begrænses til 0x40;
  • den maksimale effektive grænse er 64 MB, eller 16 384 sider.

Mekanismen begynder aktiv skrivning omtrent, når en fjerdedel af den angivne grænse nås. En forøgelse af grænsen ændrer tidspunktet for, hvornår skrivningen starter, og mængden af akkumulerede ændrede sider. Selve diskens hastighed øges ikke af dette.

Ved en højere grænse akkumuleres flere ændrede sider, før den aktive skrivning begynder. Skrivningen kan starte sjældnere, men mængden af endnu ikke gemte data og størrelsen af den næste skriveportion vokser. Hvis der ikke er et konkret problem med skrivning, så behold standardværdien. Den effektive grænse er begrænset til 64 MB.

Læsekoden, måleenhederne og begrænsningen af værdiområdet er bekræftet i ntoskrnl.exe. Parameteren med samme navn fra ældre Microsoft-dokumenter om BitLocker tilhører et andet undersystem; disse dokumenter bruges ikke som kilde her.

EnableAsyncLazywrite og relaterede værdier

Sektion kaldt “EnableAsyncLazywrite og relaterede værdier”

EnableAsyncLazywrite styrer Cache Managers asynkrone forsinkede skrivning. I koden for 25H2 er standardværdien 2: denne tilstand er allerede aktiveret.

Relaterede værdier i samme undersystem:

Value Default 25H2 Rolle
EnableAsyncLazywrite 2 Generel async lazy-write mode
EnableAsyncLazywriteMulti 2 Tilgrænsende multi-volume-tilstand
EnablePerVolumeLazyWriter 2 Per-volume lazy writer

0 deaktiverer asynkron forsinket skrivning. For 1 kræves tilstanden med en separat handler for forsinket skrivning på hver volume. 2 aktiverer asynkron tilstand uden dette krav. Cache Manager genlæser værdierne, når den arbejder med volume-konfigurationen.

En eksplicit angivelse af 2 gentager standardkonfigurationen i Windows 11 25H2 og forbedrer ikke noget yderligere. Indstillingen er først og fremmest egnet til diagnosticering: værdien 0 gør det muligt at deaktivere den mekanisme, der er aktiv som standard.

Læsningen blev observeret i systemets sporing og bekræftet i ntoskrnl.exe. Standardværdien 2 er bekræftet af koden og af en uafhængig beskrivelse af registreringsparametre udarbejdet på grundlag af reverse engineering.

Parameteren angiver afstanden i megabyte, hvorefter Cache Manager frigiver cachede visninger, der er efterladt bag den aktuelle position for sekventiel læsning.

Koden til læsning og anvendelse af parameteren findes i ntoskrnl.exe og kaldes ved visning og læsning af cachen. Parameteren vedrører sekventiel læsning af store filer; den deaktiverer ikke hele filcachen.

  • 0 eller en værdi større end 128 erstattes af koden med 8.
  • Arbejdsområde: 1..128 MB.
  • Kode-default: 8 MB.
  • Registry value-enhederne er netop MB, ikke bytes.

Parameteren giver kun mening for specialiserede opgaver med sekventiel læsning af store filer. Ved et større vindue bevares cachevisningen bag den aktuelle position længere, ved et mindre frigives den tidligere. Til almindeligt arbejde passer standardværdien 8 MB; nytten af manuel indstilling er normalt lille.

Koden til læsning, anvendelse og begrænsning af værdiområdet er bekræftet i ntoskrnl.exe. Der er ikke fundet moderne offentlig Microsoft-dokumentation for denne interne parameter.

Ved 0 returnerer API’en til beskrivelse af cache-topologi en samlet post for den pågældende struktur, der omfatter flere processor groups. Ved 1 opdeles posterne efter processor groups.

Læsekoden findes i ntoskrnl.exe. Parameteren bruges ved behandling af relationen RelationCache i KeQueryLogicalProcessorRelationship.

Kun den topologibeskrivelse, som system-API’en returnerer, ændres. Tildelte fysiske hukommelsesblokke opdeles ikke, og sandsynligheden for mangel på en sammenhængende blok reduceres ikke i sig selv.

  • 0: standardværdien.
  • 1: opdel topologiposter efter processor groups.
  • En praktisk effekt er først og fremmest mulig på systemer med flere processor groups, normalt ved mere end 64 logiske processorer.
  • På et almindeligt system med én gruppe er der ingen effekt.

Parameteren er kun nødvendig for programmer, der anmoder om cache-topologien på en maskine med flere processor groups. Den ændrer ikke cache-driften eller hukommelsestildelingen. For en almindelig stationær computer er der ingen nytte.

Koden til læsning og anvendelse er bekræftet i ntoskrnl.exe. Værdien og formålet er sammenholdt med den offentlige beskrivelse af reverse engineering KiSplitLargeCaches.

Parameter Praktisk vurdering
DisablePagingExecutive Giver normalt meget lille nytte ved at holde mere kode i RAM
DisablePageCombining Nyttig ved bekræftet belastning fra baggrundssammenlægning af sider og rigelig ledig RAM
HeapDeCommitFreeBlockThreshold Virker kun i kernen; for almindelige programmer er der ingen praktisk nytte
ModifiedWriteMaximum Ændrer betingelserne for skrivning af ændrede sider; behold standardværdien uden et konstateret problem
EnableAsyncLazywrite Standardværdien 2 aktiverer allerede mekanismen; gentagen angivelse forbedrer intet
CacheUnmapBehindLengthInMB Indstilling for sekventiel læsning; standardværdien 8 MB passer til almindeligt arbejde
SplitLargeCaches Ændrer topologibeskrivelsen for flere processor groups; på et almindeligt system er der ingen effekt

Hvad er bekræftet, og hvad er ikke målt

Sektion kaldt “Hvad er bekræftet, og hvad er ikke målt”

De ovennævnte stier, typer, standardværdier, kode og tidspunkt for parametrenes læsning samt begrænsningerne af værdiområderne er bekræftet. Resultaterne gælder for Windows 11 25H2 build 26200.9168. Adfærden kan afvige ved en anden Windows-opdatering, RAM-mængde, type lagerenhed eller CPU-topologi.

Hvordan den dynamiske del af observationerne gentages — se Sådan kontrollerer du selv.

For at gendanne skal du angive parametrenes standardværdier igen eller slette de valgfrie poster. Nogle af værdierne anvendes ved næste opstart af Windows.

Undersøgelsen og de anvendte værktøjer tilhører udvikleren af BoosterX, så udvikleren har en direkte interesse i resultaterne. Metoden og grænserne for anvendelighed er beskrevet i denne artikel; konklusionerne kan kontrolleres ud fra åbne data og de offentlige kilder, der er anført nedenfor.

Udsagn om koden er verificeret ved statisk analyse af systemkomponenter i Windows 11 25H2. Dekompileret kode, offsets, rå sporinger og interne materialer offentliggøres ikke.

Offentlige kilder er kontrolleret: 2026-09-02.

  • 2026-09-20: tilføjet ansvarsfraskrivelse om interessekonflikt og link til selvstændig kontrol af dynamiske observationer i metoden.
  • 2026-09-02: første offentliggørelse; stier, defaults, clamps og læsekode for parametrene er bekræftet, grænserne for praktisk nytte er tilføjet.