Skip to main content
Dans Windows et dans le Microsoft Game Development Kit (GDK), la mémoire du noyau existe sous la forme d’un pool unique partagé par le noyau et tous les pilotes. La mémoire du noyau est toujours allouée à partir de la partition système. La majorité des besoins en mémoire du noyau relèvent de la plateforme et, par conséquent, ils ne sont pas imputés au budget de mémoire du titre. Toutefois, les éléments suivants montrent dans quels cas le code du jeu est directement responsable de l’utilisation de la mémoire du noyau.
  • Structures de suivi pour chaque réservation de mémoire virtuelle
  • Gestion des fichiers, des événements et des objets de synchronisation de threads
  • Réseau
Les titres doivent fournir la mémoire nécessaire à l’utilisation du noyau dont ils sont directement responsables. Comme la mémoire du noyau existe sous la forme d’un pool unique, les allocations ne sont pas « divisibles » de la même façon que l’utilisation de la plateforme et celle du titre sont divisées pour les binaires et les tas. Un mécanisme différent est plutôt utilisé pour permettre aux développeurs de fournir la mémoire nécessaire de façon déterministe. Le système d’exploitation alloue presque toute la mémoire du noyau qu’il consomme dans le cadre de la séquence de démarrage du système d’exploitation du Microsoft Game Development Kit (GDK). Une fois le démarrage terminé, les variations typiques de l’utilisation de la plateforme sont d’environ 1 à 2 Mo. Lorsqu’un processus de titre est lancé, la consommation actuelle de mémoire du noyau est interrogée et un « seuil de bruit » est établi à 16 Mo au-dessus de la consommation actuelle de mémoire du noyau. La valeur est établie de sorte que, lorsque la limite est dépassée, cela résulte directement du comportement du titre plutôt que de la variation normale du système d’exploitation. La surveillance est mise en œuvre en instrumentant les API suivantes, qui sont connues pour entraîner des allocations de mémoire du noyau.
  • CreateFile
  • CreateEvent
  • CreateSemaphore
Si un appel à l’une de ces API se produit alors que l’utilisation de la mémoire du noyau approche du seuil ou l’a dépassé, des informations supplémentaires sont fournies par l’intermédiaire de XError et du flux de débogage. Si l’utilisation de la mémoire du noyau a dépassé la limite, l’appel d’API échoue avec une valeur GetLastError() de ERROR\_NOT\_ENOUGH\_MEMORY. La sortie de diagnostic peut être consultée dans un débogueur attaché, xbwatson.exe et xbdbgmon.exe.

Avertissement (à 14 Mo)

La sortie suivante apparaît lorsqu’un avertissement se déclenche à 14 Mo.

Erreur (à 16 Mo)

La sortie suivante apparaît lorsqu’une erreur se déclenche à 16 Mo.
Le tableau suivant présente le format des balises de pool (Pool Tag). L’erreur suivante apparaît également.
Toutes les allocations de mémoire du noyau sont associées à une balise (de façon semblable au balisage avec XMEM\_MAKE\_TAG et XMemVirtualAlloc) pour indiquer l’utilisation de la mémoire. La balise peut aider à déterminer la source de l’utilisation de la mémoire. Le tableau suivant présente les balises de « forte utilisation » les plus courantes liées à l’utilisation par le titre. La mémoire du noyau est divisée en deux grandes catégories appelées « non paginée » et « paginée ». Dans le Microsoft Game Development Kit (GDK), il n’existe aucune différence fonctionnelle entre ces catégories, et elles peuvent être traitées comme synonymes.

Coûts courants de la mémoire du noyau

Le tableau suivant présente les coûts prévus en mémoire du noyau de chaque action répertoriée.

Augmentation de la limite

Les titres de plus petite taille peuvent avoir une utilisation de la mémoire qui respecte les limites existantes. Toutefois, les titres de plus grande taille doivent recevoir de la mémoire pour prendre en charge leur utilisation de la mémoire du noyau. L’API XMemTransferMemory est utilisée pour fournir la mémoire nécessaire.

Profilage de l’utilisation du pool du noyau

La prise en charge de la surveillance de l’utilisation du pool du noyau n’est pas disponible dans PIX. Il est possible de surveiller la consommation à l’aide de xperf et de Windows Performance Analyzer (WPA). Suivez les étapes ci-dessous pour profiler la mémoire du noyau.
  1. Entrez la commande xbrun /x/title xperf -start -on PROC_THREAD+LOADER+POOL -stackwalk PoolAlloc+PoolFree -f d:\krnl.etl
  2. Exécutez le scénario du titre.
  3. Entrez la commande xbrun /x/title xperf -stop -d d:\krnl.merged.etl
  4. Entrez la commande xbcp xd:\krnl.merged.etl %TEMP%\pool_usage.etl
  5. Ouvrez le fichier pool_usage.etl dans WPA et effectuez l’analyse comme illustré à la figure 1.
Figure 1. Analyse du pool de mémoire du noyau dans WPA. Capture d'écran de l'analyse du pool de mémoire du noyau dans WPA
Last modified on October 6, 2026