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 responsabilité de la plateforme et, par conséquent, ils ne sont pas imputés au budget mémoire du titre. Toutefois, les éléments suivants illustrent les cas où 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
  • Mise en 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 « fractionnables » de la même manière que l’utilisation de la plateforme et celle du titre sont réparties pour les binaires et les tas. Un mécanisme différent est donc utilisé pour permettre aux développeurs de fournir la mémoire nécessaire de manière déterministe. Le système d’exploitation alloue presque toute la mémoire du noyau qu’il consomme lors 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 habituelles de l’utilisation par 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. Cette valeur est établie de sorte que, lorsque la limite est dépassée, cela résulte directement du comportement du titre plutôt que d’une variation normale du système d’exploitation. La surveillance est mise en œuvre en instrumentant les API suivantes, 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 via XError et le 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() égale à ERROR\_NOT\_ENOUGH\_MEMORY. La sortie de diagnostic est visible dans un débogueur attaché, xbwatson.exe et xbdbgmon.exe.

Avertissement (à 14 Mo)

La sortie suivante s’affiche lorsqu’un avertissement se déclenche à 14 Mo.

Erreur (à 16 Mo)

La sortie suivante s’affiche lorsqu’une erreur se déclenche à 16 Mo.
Le tableau suivant présente le format des balises de pool (Pool Tag). L’erreur suivante s’affiche également.
Toutes les allocations de mémoire du noyau sont associées à une balise (de manière similaire 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 considérées comme synonymes.

Coûts courants en mémoire du noyau

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

Augmentation de la limite

L’utilisation de la mémoire des titres de petite taille peut tenir dans les limites existantes. Toutefois, les titres plus volumineux doivent recevoir de la mémoire pour prendre en charge leur utilisation de la mémoire du noyau. L’API XMemTransferMemory permet de fournir la mémoire nécessaire.

Profilage de l’utilisation du pool du noyau

PIX ne prend pas en charge la surveillance de l’utilisation du pool du noyau. Il est possible de surveiller la consommation à l’aide de xperf et de Windows Performance Analyzer (WPA). Suivez les étapes suivantes 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é dans 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