Aller au contenu

Gestionnaire de mémoire et cache système Windows : paging, page combining et lazy write

Sur cette page

Dans cette série, sept paramètres de pagination, de fusion de pages identiques, de tas du noyau et de cache de fichiers ont été vérifiés. Dans Windows 11 25H2, le code de lecture de chacun d’eux a été trouvé. L’utilité pratique dépend du paramètre et des conditions d’exploitation.

DisablePageCombining désactive la fusion de pages en arrière-plan : le gestionnaire de mémoire cesse d’effectuer ce travail, mais la consommation de RAM peut augmenter. DisablePagingExecutive retient le code de pilotes paginable en mémoire physique ; l’utilité est généralement faible. Les autres paramètres ne s’appliquent qu’à des tâches spécifiques du noyau ou des unités de stockage, ou ont déjà des valeurs par défaut appropriées dans 25H2.

Pour chaque valeur, les éléments suivants ont été vérifiés :

  1. le chemin exact dans le registre et le type ;
  2. la valeur par défaut définie par le code de Windows 11 25H2 ;
  3. les valeurs associées de la même sous-système ;
  4. le code système de lecture et le moment de son exécution ;
  5. les limites de plage, la conversion des valeurs et les unités de mesure ;
  6. l’effet direct et les limites d’applicabilité.

Outre le code de lecture, nous avons vérifié où le paramètre est appliqué, quelles conséquences a sa modification et dans quels scénarios elle peut être utile. La simple présence d’un paramètre ne suffit pas pour une recommandation.

  • Windows 11 25H2 x64, build 26200.9168.
  • Les paramètres du noyau ont été mis en correspondance avec la table de configuration principale ntoskrnl.exe et le code de leur application dans Memory Manager et Cache Manager.
  • Les accès en cours d’exécution ont été vérifiés par traçage système du registre. Les lectures à la phase 0 et au début de la phase 1 peuvent être absentes d’une trace de démarrage ordinaire : le pilote de traçage commence l’enregistrement plus tard.
  • Pour les processus utilisateur, la lecture de la valeur a été vérifiée séparément dans ntdll.dll. Pour HeapDeCommitFreeBlockThreshold dans 25H2, une lecture dans le noyau a été trouvée, mais les tas des processus utilisateur n’utilisent pas ce paramètre.
  • L’analyse statique des composants système ne remplace pas une répétition sur un PC physique, un autre build ou un autre type d’unité de stockage.
Registry path Value Type Default Windows 11 25H2 Application
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management DisablePagingExecutive REG_DWORD 0 Pagination du code paginable des pilotes système
тот же путь DisablePageCombining REG_DWORD 0 Fusion en arrière-plan des pages physiques identiques
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager HeapDeCommitFreeBlockThreshold REG_DWORD 0x1000 (4 KB) для kernel heap Seuil de decommit des blocs libres du kernel-mode heap
тот же путь ModifiedWriteMaximum REG_DWORD 1 единица = 1 MB Limite supérieure du modified page writer après clamp
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management EnableAsyncLazywrite REG_DWORD 2 Mode asynchrone de Cache Manager
тот же путь CacheUnmapBehindLengthInMB REG_DWORD 8 MB Fenêtre unmap derrière la lecture séquentielle
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Kernel SplitLargeCaches REG_DWORD 0 Représentation de la cache topology entre processor groups

Avec 0, le gestionnaire de mémoire de Windows peut décharger vers le stockage de secours les sections de code système et de pilotes qui le permettent. Avec 1, le code paginable des pilotes système est retenu en mémoire physique.

Le code de lecture a été trouvé dans ntoskrnl.exe à un stade précoce de l’initialisation du noyau. La valeur est utilisée dans MmResetDriverPaging, MmPageEntireDriver et lors du chargement des images système. Elle est appliquée avant que ne commence le traçage ordinaire du registre par l’utilisateur. Un redémarrage est nécessaire pour appliquer le nouvel état.

  • 0 : état standard de Windows, pagination autorisée.
  • 1 : les sections paginables des pilotes système sont retenues en RAM.
  • Le réglage consomme de la RAM pour réduire les chargements ultérieurs du code système en mémoire ; le disque lui-même ne devient pas plus rapide.

Le réglage empêche le déchargement et le chargement ultérieurs de ces sections de pilotes. Il ne désactive pas de thread CPU de vérification permanent distinct. Sur un système moderne avec suffisamment de RAM, l’utilité est généralement très faible : le code peut rester longtemps en mémoire même sans le réglage. En cas de manque de RAM, son maintien forcé aggrave la pénurie de mémoire.

La lecture du paramètre et le sens de l’effet système sont confirmés par le code ntoskrnl.exe.

Avec 0, le gestionnaire de mémoire lance une tâche en arrière-plan qui recherche et fusionne les pages physiques identiques. Avec 1, cette tâche n’effectue pas la fusion.

Dans ntoskrnl.exe, le code de fusion de pages en arrière-plan a été trouvé avec le pool tag MmCb, ce qui confirme la présence du mécanisme.

  • 0 : fusion de pages autorisée, état standard de Windows.
  • 1 : fusion désactivée.
  • La désactivation réduit le travail en arrière-plan du gestionnaire de mémoire, mais peut augmenter la consommation de RAM.

La désactivation est utile si la fusion de pages crée une charge en arrière-plan notable et que le système dispose de RAM libre. Généralement, cette tâche est peu active, l’effet est donc très faible. Avec un volume de mémoire limité, l’économie de RAM apportée par la fusion est plus utile que le temps processeur économisé.

Le code de lecture et de la tâche en arrière-plan est confirmé dans ntoskrnl.exe. Microsoft décrit la fusion de pages et le compromis entre travail processeur et économie de RAM.

La valeur définit le seuil de libération de la mémoire allouée (decommit) pour un bloc libre du tas du noyau. Avec un seuil plus élevé, ces opérations pour les grands blocs libres se produisent moins souvent.

Dans Windows 11 25H2, le code de lecture se trouve dans ntoskrnl.exe, et l’application du paramètre est liée à la fonction du noyau RtlCreateHeap. Dans ntdll.dll, aucun code de lecture correspondant pour les tas des processus ordinaires n’a été trouvé.

  • Valeur par défaut dans le code pour le tas du noyau : 0x1000 (4 KB).
  • 0x40000 (256 KB) est un seuil admissible pour le tas du noyau.
  • Des documents historiques de Microsoft décrivaient un scénario user-mode du même nom pour les anciennes versions de Windows, il ne faut donc pas le transposer automatiquement à Windows 11 25H2.

Pour les applications ordinaires, l’utilité est pratiquement nulle : leurs tas n’utilisent pas cette valeur. Le paramètre ne peut modifier la fréquence de libération de la mémoire que dans le tas du noyau. Sans problème mesuré précisément à ce niveau, l’effet attendu est très faible.

La lecture en mode noyau est confirmée dans ntoskrnl.exe. L’effet pour les processus utilisateur dans 25H2 n’est pas confirmé.

Le paramètre définit la limite supérieure du mécanisme d’écriture des pages modifiées (modified page writer). Le code utilise des unités de 256 pages, c’est-à-dire qu’une unité équivaut à 1 MB.

Normalisation dans Windows 11 25H2 :

  • 0 est converti en 1 unité, soit 1 MB ;
  • les valeurs supérieures à 0x40 sont limitées à 0x40 ;
  • la limite effective maximale est de 64 MB, soit 16 384 pages.

Le mécanisme commence l’écriture active approximativement lorsqu’un quart de la limite définie est atteint. L’augmentation de la limite modifie le moment du déclenchement de l’écriture et le volume de pages modifiées accumulées. La vitesse du disque lui-même n’augmente pas pour autant.

Avec une limite plus élevée, davantage de pages modifiées s’accumulent avant le début de l’écriture active. L’écriture peut se déclencher moins souvent, mais le volume de données non encore enregistrées et la taille du prochain lot d’écriture augmentent. S’il n’y a pas de problème d’écriture spécifique, laissez la valeur par défaut. La limite effective est plafonnée à 64 MB.

Le code de lecture, les unités de mesure et la limitation de plage sont confirmés dans ntoskrnl.exe. Le paramètre du même nom issu des anciens documents Microsoft sur BitLocker concerne un autre sous-système ; ces documents ne sont pas utilisés ici comme source.

EnableAsyncLazywrite contrôle l’écriture différée asynchrone de Cache Manager. Dans le code de 25H2, la valeur par défaut est 2 : ce mode est déjà activé.

Valeurs associées du même sous-système :

Value Default 25H2 Rôle
EnableAsyncLazywrite 2 Mode async lazy-write général
EnableAsyncLazywriteMulti 2 Mode multi-volume voisin
EnablePerVolumeLazyWriter 2 Per-volume lazy writer

0 désactive l’écriture différée asynchrone. Pour 1, le mode d’un gestionnaire d’écriture différée distinct sur chaque volume est requis. 2 active le mode asynchrone sans cette exigence. Cache Manager relit les valeurs lors du traitement de la configuration des volumes.

L’écriture explicite de 2 reproduit la configuration standard de Windows 11 25H2 et n’apporte aucune amélioration supplémentaire. Le réglage convient avant tout pour le diagnostic : la valeur 0 permet de désactiver le mécanisme activé par défaut.

La lecture a été observée dans le traçage système et confirmée dans ntoskrnl.exe. La valeur par défaut 2 est confirmée par le code et par une description indépendante des paramètres du registre établie à partir de résultats de rétro-ingénierie.

Le paramètre définit la distance en mégaoctets après laquelle Cache Manager libère les vues mises en cache restées en arrière de la position actuelle de lecture séquentielle.

Le code de lecture et d’application du paramètre se trouve dans ntoskrnl.exe et est appelé lors du mappage et de la lecture du cache. Le paramètre concerne la lecture séquentielle de grands fichiers ; il ne désactive pas tout le cache de fichiers.

  • 0 ou une valeur supérieure à 128 est remplacé par le code par 8.
  • Plage de fonctionnement : 1..128 MB.
  • Default du code : 8 MB.
  • Les unités de la valeur de registre sont bien des MB, et non des octets.

Le paramètre n’a de sens que pour des tâches spécialisées de lecture séquentielle de grands fichiers. Avec une fenêtre plus grande, le mappage du cache en arrière de la position actuelle est conservé plus longtemps ; avec une fenêtre plus petite, il est libéré plus tôt. Pour un usage ordinaire, la valeur standard 8 MB convient ; l’utilité d’un réglage manuel est généralement faible.

Le code de lecture, d’application et de limitation de plage est confirmé dans ntoskrnl.exe. Aucune documentation publique moderne de Microsoft pour ce paramètre interne n’a été trouvée.

Avec 0, l’API de description de la topologie du cache renvoie une entrée unique pour la structure correspondante couvrant plusieurs groupes de processeurs. Avec 1, les entrées sont séparées par groupes de processeurs.

Le code de lecture se trouve dans ntoskrnl.exe. Le paramètre est utilisé lors du traitement de la relation RelationCache dans KeQueryLogicalProcessorRelationship.

Seule la description de la topologie renvoyée par l’API système change. Les blocs de mémoire physiques alloués ne sont pas séparés, et la probabilité de manque de bloc contigu ne diminue pas en soi.

  • 0 : valeur par défaut.
  • 1 : séparer les entrées de topologie par groupes de processeurs.
  • L’effet pratique n’est possible avant tout que sur les systèmes à plusieurs groupes de processeurs, généralement au-delà de 64 processeurs logiques.
  • Sur un système ordinaire à un seul groupe, l’effet est absent.

Le paramètre n’est nécessaire qu’aux programmes qui interrogent la topologie du cache sur une machine à plusieurs groupes de processeurs. Il ne modifie ni le fonctionnement du cache ni l’allocation de mémoire. Pour un ordinateur de bureau ordinaire, il n’y a aucun intérêt.

Le code de lecture et d’application est confirmé dans ntoskrnl.exe. La valeur et la destination ont été vérifiées avec la description publique de la rétro-ingénierie KiSplitLargeCaches.

Paramètre Évaluation pratique
DisablePagingExecutive Généralement très peu utile, en retenant davantage de code en RAM
DisablePageCombining Utile en cas de charge confirmée de fusion de pages en arrière-plan et de grande réserve de RAM
HeapDeCommitFreeBlockThreshold Agit uniquement dans le noyau ; aucune utilité pratique pour les applications ordinaires
ModifiedWriteMaximum Modifie les conditions d’écriture des pages modifiées ; sans problème identifié, laissez la valeur standard
EnableAsyncLazywrite La valeur standard 2 active déjà le mécanisme ; une écriture répétée n’améliore rien
CacheUnmapBehindLengthInMB Réglage de lecture séquentielle ; les valeurs standard 8 MB conviennent à un usage ordinaire
SplitLargeCaches Modifie la description de la topologie pour plusieurs groupes de processeurs ; aucun effet sur un système ordinaire

Ce qui est confirmé et ce qui n’a pas été mesuré

Section intitulée « Ce qui est confirmé et ce qui n’a pas été mesuré »

Les chemins, types, valeurs par défaut, code et moment de lecture des paramètres indiqués ci-dessus, ainsi que les limitations de plages, sont confirmés. Les résultats concernent Windows 11 25H2 build 26200.9168. Le comportement peut différer avec une autre mise à jour de Windows, un autre volume de RAM, un autre type d’unité de stockage ou une autre topologie de CPU.

Pour savoir comment reproduire la partie dynamique des observations, voir Comment vérifier soi-même.

Pour revenir en arrière, rétablissez les valeurs standard des paramètres ou supprimez les entrées facultatives. Une partie des valeurs est appliquée au prochain démarrage de Windows.

L’étude et les outils utilisés dans celle-ci appartiennent au développeur de BoosterX, le développeur a donc un intérêt direct aux résultats. La méthodologie et les limites d’applicabilité sont décrites dans cet article ; les conclusions peuvent être vérifiées à partir des données ouvertes et des sources publiques énumérées ci-dessous.

Les affirmations sur le code ont été vérifiées par analyse statique des composants système de Windows 11 25H2. Le code décompilé, les offsets, les traces d’origine et les documents internes ne sont pas publiés.

Sources publiques vérifiées : 2026-09-02.

  • 2026-09-20 : ajout d’un avertissement sur le conflit d’intérêts et d’un lien vers la vérification autonome des observations dynamiques dans la méthodologie.
  • 2026-09-02 : première publication ; chemins, defaults, clamps et code de lecture des paramètres confirmés, limites d’utilité pratique ajoutées.