Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Un jeu de références est le moyen recommandé de comprendre les effets réels d’un processus sur la disponibilité de la mémoire du système dans son ensemble.
Traditionnellement, l’utilisation de la mémoire a été mesurée par l’ensemble de travail du processus à un moment donné. L’ensemble de travail d’un processus est l’ensemble de pages dans l’espace d’adressage virtuel du processus qui résident actuellement dans la mémoire physique. (Pour plus d’informations sur les ensembles de travail, consultez Ensemble de travail sur le Centre de développement Windows.)
Limitations d’un ensemble de travail
Un jeu de travail fournit des informations limitées, car il n’affiche pas toute la mémoire utilisée pour prendre en charge le processus, comme les fichiers mis en cache et la mémoire utilisée par les services système que le processus utilise. En outre, un ensemble de travail dépend fortement de l’état de la machine, de sa quantité de RAM et du niveau d’activité requis du sous-système de mémoire pour fournir à tous les processus sur le système la mémoire qu’ils demandent (le niveau de pression de mémoire). En outre, un ensemble de travail est fortement affecté par les stratégies de découpage du système d’exploitation. Par conséquent, un ensemble de travail est une mesure momentanée uniquement, et omet les effets en dehors du processus ciblé.
Avantages d’un jeu de références
En revanche, un jeu de références est une mesure de l’ensemble de pages mémoire à l’échelle du système auquel tout processus ou activité sur le système a accédé au cours d’un scénario donné. Il inclut toutes les pages consultées pour le compte du composant en cours d’examen, quel que soit le processus qui a accédé à la page. L’ensemble de références ne varie pas en fonction de la taille de la RAM, de la pression de la mémoire ou des stratégies de découpage du système d’exploitation. La mesure d’un jeu de références est un moyen extrêmement précis d’évaluer l’utilisation de la mémoire dans le système pour n’importe quelle charge de travail, car les pages qui se trouvent actuellement dans l’ensemble de travail de n’importe quel processus, ou auxquelles les processus système ou les pilotes accèdent, sont incluses dans le jeu de références. Un jeu de références est spécifique à un scénario, et non à un moment : il n’est pas valide de demander , Quel est l’ensemble de références de mon processus à ce stade ? Toutefois, il est valide de demander quel est l’ensemble de références du système dans ce scénario ? ou quel est l’ensemble de références de mon processus dans ce scénario ?
L’idée d’un jeu de références est simple : pour donner une image précise de la mémoire référencée à l’échelle du système au cours du scénario, les pages sont comptées lorsqu’elles sont consultées et lorsqu’elles sont libérées. Cette méthode fournit une vue complète des pics d’utilisation de la mémoire, ainsi que de ce qui est en suspens à la fin du scénario ( c’est-à-dire, l’utilisation à l’état stable).
Notes
Seule la première référence d’une page est capturée.
Un jeu de références peut être considéré à peu près comme une mesure de la quantité de mémoire qui peut être retirée du reste du système pendant l’exécution du scénario ou, de manière équivalente, comme la quantité de mémoire qui doit être défaillante et lue à partir du disque pour exécuter le scénario (si d’autres parties du système ont provoqué le pagination de la mémoire). Par conséquent, un jeu de références est utile pour déterminer l’impact sur les performances de l’utilisation de la mémoire.
Comment collecter des données de jeu de références
Vous pouvez utiliser deux outils en ligne de commande différents pour collecter des données de jeu de références : Windows Performance Recorder (WPR) et Xperf. Vous pouvez également utiliser l’interface graphique graphique de WPR.
WPR et Xperf font partie de Windows Performance Tookit, qui est inclus dans le Kit d’évaluation et de déploiement Windows (ADK). Vous pouvez télécharger le kit ADK pour Windows 10 à partir du lien suivant : Kit de déploiement et d’évaluation Windows.
Notes
Utilisez une invite de commandes avec élévation de privilèges lors de la collecte de données de jeu de références.
Collecter des données avec WPR
Pour collecter des données avec WPR, entrez :
wpr -start referenceset -filemode
Exécutez votre scénario, puis arrêtez la collecte de données en entrant :
wpr -stopfile-name.etl
Collecter des données avec Xperf
Lorsque vous utilisez Xperf pour collecter des traces de mémoire, spécifiez la même taille pour les mémoires tampons minimales et maximales afin de garantir qu’une quantité cohérente de mémoire système est réservée au suivi d’événements pour Windows (ETW). Cette cohérence facilite la comparaison entre les exécutions en raison d’une diminution de la variabilité. (Ces mémoires tampons sont automatiquement définies sur la même taille lors de l’utilisation de WPR.)
Pour collecter des données avec Xperf, entrez :
xperf -on referenceset -minbuffers 50 -maxbuffers 50 -buffersize 1024 -stackwalk PageAccess+PageRelease+PageRangeAccess+PageRangeRelease+PagefileMappedSectionCreate+VirtualFree+PagefileMappedSectionDelete -start user -on Win32HeapRanges -minbuffers 10 -maxbuffers 10 -buffersize 10 -buffersize 10
Exécutez votre scénario, puis arrêtez la collecte de données en entrant :
xperf -stop user -stop -dfile-name.etl
Collecter des données avec l’application de bureau WPR
Vous pouvez également collecter des données à l’aide de l’application de bureau WPR, wprui.exe. Dans l’interface graphique graphique, sous Analyse des ressources, sélectionnez Analyse de l’ensemble de références. (Si vous ne voyez pas cette option, vous devrez peut-être cliquer sur Autres options, puis développer Analyse des ressources.)
Pour commencer l’enregistrement, cliquez sur Démarrer, puis exécutez votre scénario.
Pour arrêter l’enregistrement et enregistrer les données de trace, cliquez sur Enregistrer.
Fonctionnement du suivi des ensembles de références
Lorsque WPR commence à collecter la trace d’un jeu de références, le système supprime immédiatement toutes les pages mémoire des ensembles de travail de tous les processus, y compris le système. En outre, toutes les pages qui restent dans les ensembles de travail d’un processus ou du système sont enregistrées pour tenir compte des pages verrouillées ou marquées comme non paginables. Après cela, lors du premier accès d’une page qui a été déplacée vers la liste de secours, le système enregistre une erreur réversible dans la trace du jeu de références, la page est ajoutée à l’ensemble de travail du processus et le processus continue de s’exécuter. Les accès ultérieurs à une page dans le jeu de travail du processus ou du système ne provoquent pas d’autre erreur de page réversible, car la page est déjà dans l’ensemble de travail. Par conséquent, l’exécution se poursuit sans enregistrer d’autres accès aux pages dans un ensemble de travail. Par conséquent, le nombre total d’accès à une page n’est pas enregistré dans la trace.
De même, le premier accès de toute autre page du même processus est enregistré dans la trace, y compris les pages nouvellement allouées. Les pages publiées (par exemple, par HeapFree) et les fichiers supprimés voient leur taille restante supprimée du jeu de références à la fin de l’intervalle de mesure, mais ils sont toujours affichés comme accessibles. Les fichiers fermés ou les exécutables supprimés de la mémoire ne sont pas supprimés de la taille restante, car ils ne sont pas vidés de la RAM lors de la fermeture ou de la suppression. Si une page est partagée entre plusieurs processus, la trace enregistre le premier accès à cette page dans chaque processus qui la touche.
Notes
L’enregistrement de la trace d’un jeu de références peut avoir un effet significatif sur les performances du système, car tous les processus doivent renvoyer un grand nombre de pages dans leurs ensembles de travail une fois que leurs ensembles de travail sont vidés.
Visualisations d’ensembles de références
WPA offre les vues suivantes des données de jeu de référence :
- Référence Set Outstanding Size by Process
- Référence Set Outstanding Size by Category
- Référence Set Outstanding Size by Dynamic/File
Référence Set Outstanding Size by Process
Cela montre la mémoire divisée par processus pour la fenêtre d’affichage. Il s’agit d’un bon point de départ si vous examinez l’effet sur la mémoire d’une application particulière.
Pour connaître la signification des colonnes de cette vue, consultez Définitions de colonnes importantes, plus loin dans cette rubrique.
Référence Set Outstanding Size by Category
Cela montre les pages de mémoire par catégorie pour la fenêtre d’affichage.
Pour obtenir une explication des catégories de pages, consultez Catégorie de page (dynamique) et Catégorie de page (fichier), plus loin dans cette rubrique.
Référence Set Outstanding Size by Dynamic/File
Cela indique la mémoire catégorisée par mémoire ou par fichier pour la fenêtre d’affichage.
Notes
Les pages sauvegardées en mémoire sont sauvegardées par le fichier de page ou, dans le cas d’un pool non paginé, ne sont jamais paginées. Les pages sauvegardées en mémoire incluent la pile, le tas, VirtualAlloc et d’autres catégories de pages qui ne sont pas mappées directement à un fichier sur disque. Les pages sauvegardées par des fichiers sont sauvegardées par des fichiers individuels sur le disque, tels que des images de module.
Présentation des données de jeu de références
Comme mentionné précédemment, le jeu de références représente la mémoire qui a été touchée pendant l’exécution du scénario intéressant. À cet égard, l’ensemble de références correspond au coût réel d’exécution de la charge de travail et représente la comptabilité la plus précise de l’empreinte mémoire de la charge de travail.
En règle générale, vous vous intéressez à l’empreinte mémoire d’un processus particulier. Vous devez donc commencer par la table Reference Set Outstanding by Process . Vous voudrez examiner les endroits où l’utilisation de la mémoire a augmenté ou diminué, ainsi que l’endroit où elle a culminé et où elle était stable.
État de pointe ou état stable
Étant donné que le jeu de références est la mesure de la quantité de mémoire référencée au cours d’un scénario, il n’est peut-être pas intuitif que sa taille puisse jamais diminuer. Lorsque la mémoire est libérée et retournée au système pour être utilisée à d’autres fins, elle est soustraite du jeu de référence pour refléter le fait qu’elle peut être réutilisée par la suite.
Cela entraîne l’utilisation de deux métriques de jeu de références principales dans un scénario : l’état stable et lepic.
| Métrique | Description |
|---|---|
| État stable | Coût de base de l’application ou du scénario. Cela peut être mesuré en exécutant un scénario (ou plusieurs scénarios), puis en attendant que le système atteigne à nouveau un état inactif. En réduisant le nombre de pages auxquelles votre application accède dans un état stable dans différents scénarios, vous pouvez voir les scénarios s’exécuter plus rapidement (par exemple, reprendre plus rapidement) et fournir une expérience qui est meilleure pour votre utilisateur, car vous réduirez la pression de la mémoire sur le système. |
| Peak | Utilisation élevée temporaire de la mémoire, ce qui peut pousser des informations plus précieuses hors de la mémoire physique. En réduisant la fréquence et l’ampleur des pics d’utilisation, votre application ou fonctionnalité sera un meilleur « citoyen du système » en réduisant le risque d’échange ou d’arrêt d’autres processus. |
Définitions de colonnes importantes
Lors de l’examen de la trace d’un jeu de références dans WPA, les colonnes suivantes dans la vue table sont particulièrement importantes :
- Type d'impact
- Taille et taille de l’impact
- Catégorie, classe
- Catégorie de page (dynamique)
- Catégorie de page (fichier)
- Pile d’allocation
- Impact sur la pile
Si l’une de ces colonnes est manquante dans votre affichage dans WPA, vous pouvez l’ajouter en cliquant avec le bouton droit sur un en-tête de colonne dans l’affichage actuel, puis en sélectionnant la colonne manquante dans la liste.
Les trois vues de jeu de références fournissent 4 colonnes différentes qui fournissent des tailles de mémoire comptées :
- Taille (vue Processus) : ensemble total de pages référencées par le processus donné
- Taille (Vue système) : ensemble de pages référencées par
- Taille de l’impact (mode Processus)
- Taille de l’impact (vue système)
Les différentes vues affichent des colonnes différentes par défaut, mais elles sont toutes disponibles dans toutes les vues refset si vous les recherchez, et elles ajoutent des tailles de la même façon, quelle que soit la vue dans laquelle vous les utilisez.
Type d'impact
La colonne Type d’impact identifie le type d’effet d’une allocation de mémoire sur la mémoire actuellement utilisée : Impacting, Temporaire et Persistent.
| Type d’impact | Description |
|---|---|
| Impact | Mémoire qui a été (A) allouée avant le début de votre fenêtre d’affichage et libérée pendant votre fenêtre d’affichage (allouée à l’extérieur et libérée à l’intérieur) ou (B) allouée pendant votre fenêtre d’affichage et libérée après la fin de votre fenêtre d’affichage (allouée à l’intérieur et libérée à l’extérieur). Une allocation impactant affecte la mémoire utilisée à la fin de la fenêtre d’affichage. |
| Temporaire | Mémoire allouée et libérée pendant votre fenêtre d’affichage (allouée à l’intérieur et libérée à l’intérieur). Une allocation temporaire est active uniquement dans la fenêtre d’affichage actuelle. Les allocations temporaires contribuent généralement à tous les pics d’utilisation au sein d’une fenêtre d’affichage. |
| Persistante | Allocations qui ont été allouées avant le début de la fenêtre d’affichage et libérées après la fin de celle-ci (allouées à l’extérieur et libérées en dehors). Une allocation persistante est active pendant la totalité de la fenêtre d’affichage. |
Taille et taille de l’impact
La colonne Taille de l’ensemble de références en suspens par processus représente l’ampleur des accès, indépendamment du type d’effet (illustré dans la colonne Type d’impact) qu’une allocation provoque, qui peut être impactant, temporaire ou persistant. Cela n’est pas très utile pour l’analyse, mais il est nécessaire pour la création de graphiques dans WPA.
La taille de l’impact représente l’effet sur la taille de l’horodatage de début à l’horodatage de fin pour le niveau de zoom actuel. Une comparaison des valeurs graphiques au début et à la fin du champ de vue, en termes simples, correspond au delta. Les accès temporaires ou persistants n’entraînent pas de modification de la valeur graphique pour la fenêtre de zoom, et ils ne comptent donc pas.
Lorsque deux processus référencent la même page de mémoire physique, la page est comptée pour chaque processus dans la colonne Taille . L’ajout des deux valeurs ne produit pas de total à l’échelle du système pour le jeu de référence, car une fois la page ajoutée au jeu de travail, l’accès suivant n’est pas compté. La page est également comptabilisée dans la colonne Taille de l’impact , une seule fois, pour le premier processus qui accède à la page. L’ajout des valeurs dans La taille d’impact d’un processus produit un total valide à l’échelle du système pour l’ensemble de référence, et cela sans manquer ni multiplier le nombre de pages. Par conséquent, les valeurs dans Impact Size représentent les effets réels à l’échelle du système sur la mémoire.
Prenons un exemple, de t_start à t_end, avec les valeurs suivantes :
Graphe au t_start : 10 Mo
Nouveaux accès (impactant) dans la fenêtre : 10 Mo
Accès temporaire dans la fenêtre : 10 Mo
Graphique à t_end : 10 (persistant) + 10 (impact) = 20
Colonne taille : 10 (persistant) + 10 (temporaire) + 10 (impact) = 30
Colonne Taille de l’impact : 10 (Impact)
Notes
Le zoom avant et arrière modifie la fenêtre d’affichage et entraîne le recalcul de ces tailles.
Catégorie, classe
Il existe deux catégories d’accès pour les pages mémoire, identifiées dans WPA dans la colonne Classe de catégorie : Dynamique ou Fichier.
| Catégorie , classe | Description |
|---|---|
| Dynamique | Il s’agit d’allocations de mémoire à la demande qui sont associées à un processus ou à un état système qui ne sont pas persistants pendant un arrêt du système. Les allocations peuvent être non paginées ou sauvegardées par le fichier de page, et elles peuvent être Tas, VirtualAlloc, etc., comme identifié dans la colonne Catégorie de page . La mémoire dynamique partageable est également identifiée dans Catégorie de page en tant que PFMappedSection. |
| Fichier | Il s’agit de fichiers référencés par traitement qui sont sauvegardés par un fichier sur le disque. Fichiers chargés en tant que données, fichiers chargés en tant qu’images (exécutables ou DLL) et fichiers mappés. |
Catégorie de page (dynamique)
Dans la colonne Catégorie de page, lorsque la classe de catégorie est Dynamique, WPA affiche une ou plusieurs des catégories décrites dans le tableau suivant.
| Catégorie de page , allocation dynamique | Description |
|---|---|
| VirtualAlloc | Cette catégorie de page inclut les allocations dynamiques volumineuses (supérieures à 512 Ko ou 1 Mo, selon le système) les allocations dynamiques effectuées par l’application (ou par l’infrastructure pour le compte de l’application) à l’aide des API d’allocation virtuelle. |
| Segment de mémoire (heap) | Cette catégorie de page inclut les petites allocations dynamiques effectuées par l’application (ou par l’infrastructure pour le compte de l’application) à l’aide des API d’allocation de tas. |
| UserStack | Pile en mode utilisateur pour un thread. |
| PFMappedSection | Mémoire dynamique partageable. Cette catégorie de page mesure souvent la quantité de mémoire consacrée aux allocations graphiques. Du point de vue de l’application, cela inclut non seulement les images, les vidéos, d’autres allocations de « pipeline multimédia » que votre application utilise, mais également les blocs de construction de base de votre interface utilisateur, tels que les surfaces utilisées pour afficher un Contrôle ListView. |
| CopyOnWriteImage | Pages de copie en écriture pour les modules chargés dans le processus. |
| LargePage | |
| AWEPage | Pages physiques allouées par un processus. |
| PageTable | |
| PagedPool | Tas de noyau. |
| Non pagedPool | Tas de noyau non paginable. |
| SessionPrivate | |
| KernelStack | Pile du mode noyau. |
| Pilote | |
| DriverLockedSystemPage | |
| PTE système |
Catégorie de page (fichier)
Dans la colonne Catégorie de page, lorsque la classe de catégorie est File, WPA affiche une ou plusieurs des catégories décrites dans le tableau suivant.
| Catégorie de page, fichier | Description |
|---|---|
| Image | Fichier chargé en tant qu’exécutable, tel qu’une DLL. |
| MapFile | Fichier chargé en tant que données. |
| Metafile | Répertoire ou journal système. |
| RegistryFile | Un fichier de Registre. |
| Prefetcher | Informations utilisées pour accélérer le lancement d’une application. |
| DriverFile | Pilote chargé en tant qu’exécutable. |
Pile d’allocations
La colonne Pile d’allocations identifie l’emplacement où la mémoire est allouée.
Impact sur la pile
La colonne Impacting Stack indique la raison pour laquelle la mémoire est accessible.
Recommandations pour la mesure et l’amélioration des performances dans un ensemble de références
Les recommandations générales suivantes sont utiles pour mesurer un ensemble de références et améliorer les effets d’une application ou d’une fonctionnalité sur le système. Utilisez ces recommandations dans l’ordre suivant :
Examiner l’utilisation à l’état stable et l’utilisation maximale de la mémoire
Concentrez-vous sur le processus qui a les plus grands effets
Note Le suivi utilise la mémoire, qui est visible en tant que pool non paginé avec la description « ETWB » pour les mémoires tampons ETW.
Examiner l’utilisation à l’état stable et l’utilisation maximale de la mémoire
Deux aspects sont importants : (1) la quantité d’utilisation de la mémoire qui est dans un état stable à la fin du scénario, et (2) où les pics d’utilisation se produisent dans le jeu de référence et pourquoi. Votre analyse doit d’abord se concentrer sur l’impact de l’état stable du scénario, puis examiner les pics spécifiques dans les graphiques du jeu de référence.
Concentrez-vous sur le processus qui a les plus grands effets
Concentrez-vous sur les processus qui ont le plus grand effet sur l’ensemble de références, y compris le processus d’intérêt ainsi que d’autres processus système.
Caractériser et catégoriser les pages de mémoire
La caractérisation doit être pour les deux classes de catégories de pages de mémoire, dynamique et de fichier, et davantage divisée en sous-catégories.
Examiner les pages de mémoire dans la catégorie Fichier
La meilleure façon d’examiner les accès aux fichiers consiste généralement à les regrouper par arborescence de chemin d’accès, puis à identifier les accès aux fichiers liés au système (comme les DLL) et les accès aux fichiers spécifiques au processus (comme les bases de données locales, les fichiers texte, les fichiers JPEG, etc.).
La réduction des accès aux fichiers spécifiques au processus réduit la taille du jeu de références. Il améliore également les performances pour démarrer le test avant le chargement de l’application ou de la fonctionnalité en cours de test ( scénario à froid).
Essentiellement, le diagnostic de la partie fichier d’un jeu de références nécessite de savoir quelles DLL sont propres à votre scénario et pourquoi elles sont chargées, ainsi que tous les fichiers auxquels votre application ou fonctionnalité accède (par exemple, les fichiers image lors du décodage d’un diaporama).
Examiner les pages de mémoire dans la catégorie Dynamique
Utilisez la séquence suivante pour analyser la trace d’un jeu de références :
Examiner les piles d’allocations qui ont une utilisation élevée
Examiner les processus système qui ont des effets significatifs
Catégoriser pour analyser les coûts et identifier les options de réduction.
Classer par catégorie de page
Classifiez par catégorie de page les éléments suivants : Win32Heap, VirtualAlloc ou PFMappedSection. La catégorie peut être directement attribuée au processus.
Les catégories spécifiques au système peuvent généralement être ignorées pour l’analyse initiale, bien que des contributions majeures (plus de 2 à 3 Mo) du pool paginé ou de la pile de noyau méritent généralement d’être examinées, car ce volume indique souvent une surutilisation de threads ou de composants, tels que le Registre.
Appliquer des balises de pile
L’application d’étiquettes de pile pour catégoriser l’utilisation de la mémoire par pile peut être très utile pour identifier d’où provient votre utilisation de la mémoire.
Effectuer un suivi spécifique au tas
Bien que les balises de pile d’un ensemble de références puissent vous donner une idée générale des processus qui utilisent le tas, vous devez souvent effectuer un suivi spécifique au tas si l’utilisation du tas a un effet significatif dans votre scénario. Un jeu de références ne fournit pas la granularité nécessaire pour analyser le tas du point de vue de l’allocation, car le jeu de références identifie uniquement les pages de mémoire référencées. Un tas fortement fragmenté peut présenter une grande empreinte à l’état stable pour l’utilisation du tas, même si les allocations de tas elles-mêmes sont petites mais dispersées dans le tas.
Examiner les piles d’allocations qui ont une utilisation élevée
VirtualAlloc : examinez les piles d’allocation spécifiques qui ont une utilisation élevée de VirtualAlloc. L’affichage des temps de vie de validation VirtualAlloc sous l’onglet Analyse affiche des détails sur l’utilisation de la validation par processus.
Examiner les processus système qui ont des effets significatifs
Existe-t-il d’autres processus système qui ont des effets plus importants sur la mémoire à la suite de ce scénario ? Parmi les exemples de candidats, citons les services, les répartiteurs d’applications et les analyseurs antivirus.
Catégoriser pour analyser les coûts et identifier les options de réduction
Une fois que vous avez suivi les recommandations précédentes, utilisez la procédure suivante pour analyser les piles qui ont le plus d’effet sur le système et explorer des moyens de réduire les coûts de mémoire.
Identifiez les piles qui ont les coûts les plus élevés.
Utilisez des annotations pour catégoriser les piles avec un nom pour ce que chacune est censée faire.
Déterminez si le coût de chaque catégorie et pile est un montant attendu pour le scénario.
Déterminez si vous pouvez réduire les pics dans le scénario actif, par exemple, en allouant de la mémoire uniquement si nécessaire.
Déterminez si vous pouvez réduire l’utilisation de la mémoire à l’état stable. Par exemple, pouvez-vous libérer des ressources à l’état stable qui sont spécifiques au scénario et qui ne sont pas obligatoires ? Les exemples peuvent inclure des caches et des ressources regroupées. La libération de ressources peut réduire l’empreinte mémoire à l’état stable.