- Vue d’ensemble
- Processus de capture
- Dispositions des Instruction Traces
- Bonnes pratiques et limitations
Vue d’ensemble
Les Instruction Trace Captures vous aident à optimiser l’utilisation que fait votre titre de la mémoire et des caches d’instructions de la console. PIX enregistre des données sur chaque instruction du processeur exécutée pendant la capture. Toutes les instructions de chargement et de stockage en mémoire sont ensuite analysées à l’aide d’une simulation de cache. Les résultats de la simulation permettent de :- Identifier les fonctions qui ont provoqué le plus de défauts de cache et chargé le plus de données dans les caches. Les lignes de code source C++ et les instructions assembleur précises à l’origine d’un défaut de cache sont également identifiées.
- Afficher des statistiques sur les succès et défauts de cache pour chaque cœur de processeur et chaque module.
- Visualiser l’efficacité d’utilisation de chaque ligne de cache. Les Instruction Trace Captures indiquent quels octets d’une ligne de cache ont été consultés, ainsi que le code qui a accédé à chaque octet. Des informations sur les structures de données sont également fournies pour vous aider à optimiser la disposition de vos données afin d’utiliser au mieux les caches mémoire.
Effectuer une capture
Les Instruction Traces enregistrent des données pour un nombre spécifié d’instructions du processeur à partir du moment où la capture est lancée. Le nombre d’instructions à capturer est spécifié dans le champ Instructions per thread to capture du volet CPU Instruction Trace Options avant de démarrer une capture. Notez que le nombre d’instructions spécifié est capturé pour chaque thread s’exécutant dans le processus du titre. PIX peut également enregistrer, de manière facultative, des informations sur les types de données consultés par chaque ligne de code source et chaque instruction assembleur. Cochez la case Track Data Types pour ajouter les informations de type de données à la capture. Après avoir spécifié le nombre d’instructions et l’option de suivi des types, sélectionnez le bouton Capture pour démarrer la capture.
Dispositions des Instruction Traces
- Summary. Fournit un résumé de la manière dont le titre interagit avec les caches de données et d’instructions de la console.
- Instruction Table. Affiche les instructions du processeur exécutées pour une fonction donnée. Des informations sur les types de données consultés et sur les instructions assembleur ayant provoqué des défauts du cache de données sont également fournies.
- Source. Affiche le code source C++ d’une fonction donnée. Des informations sur les types de données consultés et sur les lignes de code source ayant provoqué des défauts du cache de données sont également fournies.
- Callgraph. Affiche le graphe des appels de toutes les fonctions exécutées pendant la capture. La vue permet d’examiner diverses statistiques sur chaque appel, notamment le nombre de défauts de cache, une répartition par type d’instruction, etc. Une vue papillon des fonctions est également fournie pour parcourir les appelants et les appelés d’une fonction donnée.
- Memory Regions. Fournit des détails sur les modèles d’accès mémoire pour un ensemble de plages d’adresses.
- Memory Region Details. Fournit un niveau supplémentaire d’analyse des lignes de cache en affichant les lignes de code source C++ et les instructions assembleur qui accèdent à la mémoire dans la région actuellement sélectionnée.
Résumé de la capture
Les Instruction Trace Captures s’ouvrent sur une disposition de résumé qui fournit une analyse de la manière dont le titre interagit avec la mémoire et les caches d’instructions du système. Des avertissements, par exemple sur les lectures de mémoire à écriture combinée, sont également fournis. La section Execution Summary de la page de résumé affiche des statistiques de base sur la capture, notamment une répartition des instructions par type et la quantité de données chargées et stockées.




Instruction Table
La disposition Instruction Table permet d’examiner l’ensemble des instructions du processeur exécutées pour une fonction donnée. Le nombre d’exécutions et le nombre de défauts de cache sont indiqués pour chaque instruction exécutée. Les types de données consultés par chaque instruction sont également affichés si l’option Track Data Types a été sélectionnée avant le démarrage de la capture. On accède souvent à la disposition Instruction Table en cliquant sur un lien hypertexte en regard d’une fonction dans la disposition Summary.



Source
La disposition Source permet d’examiner le code source C++ d’une fonction donnée. On accède souvent à cette disposition en cliquant sur un lien hypertexte en regard d’une fonction dans la disposition Summary ou en sélectionnant l’élément de menu contextuel Goto Source dans la disposition Summary ou dans la disposition Instruction Table.


Callgraph
Les Instruction Traces comprennent une disposition qui affiche le graphe des appels de toutes les fonctions exécutées pendant la capture. Chaque thread sur lequel du code a été exécuté est un nœud de premier niveau de l’arborescence. Les colonnes de la vue permettent d’examiner diverses statistiques sur chaque appel, notamment le nombre de défauts de cache, une répartition par type d’instruction, etc. Les colonnes à afficher peuvent être personnalisées à l’aide du panneau Event List Counters.





Memory Regions
La disposition Memory Regions fournit des détails sur les modèles d’accès mémoire pour un ensemble de plages d’adresses. Ces détails incluent l’ensemble des octets individuels consultés dans chaque ligne de cache, ainsi que l’ensemble des fonctions et des types de données associés à chaque accès mémoire. La disposition Memory Regions est surtout utile lorsque les données qu’elle affiche sont limitées à une fonction donnée. Un flux de travail courant consiste à identifier une fonction qui provoque des défauts du cache de données à l’aide de la disposition Summary ou de la disposition Callgraph, puis à utiliser le menu contextuel de la disposition Callgraph pour accéder à la disposition Memory Regions. Dans la figure suivante, une fonction nommée UpdateCommonObjects a été identifiée comme fonction intéressante compte tenu du nombre élevé de défauts de cache affiché dans la disposition Callgraph. L’élément de menu contextuel Scope Memory Analysis to only this node permet d’accéder à la disposition Memory Regions.



Memory Region Details
La disposition Memory Region Details fournit un niveau supplémentaire d’analyse des lignes de cache grâce à la vue Source Memory Access. Cette vue présente le code source C++, entrelacé avec les instructions assembleur et les informations de type de données, et indique exactement quelles lignes de la fonction affectent la région mémoire. Les lignes de code source et d’assembleur mises en surbrillance en vert accèdent à des données de la région mémoire. La sélection d’une autre fonction dans la vue Accessing Functions met à jour la Byte Access Map et la vue Source Memory Access avec des informations propres à la fonction sélectionnée.
Bonnes pratiques et limitations
L’Instruction Trace indique les défauts des caches de données L1 et L2. Les défauts L3 sont également fournis lorsque la capture a été effectuée sur un XBOX Series X Dev Kit ou un XBOX Series S Test Kit. Ces nombres apparaissent dans les différentes dispositions de la capture. Les nombres de défauts de cache sont basés sur une simulation des caches, et non sur des compteurs ou événements matériels réels. La simulation est utilisée parce que l’Instruction Trace entraîne un traitement supplémentaire pour chaque instruction exécutée, ce qui fausserait tout compteur matériel réel. Plusieurs facteurs sont toutefois à prendre en compte lors de l’analyse des données produites par la simulation de cache.- Les caches sont supposés froids ; les premiers défauts peuvent donc ne pas être exacts.
- La latence de chargement des lignes n’est pas modélisée.
- Les types de mémoire autres que l’écriture différée (la mémoire mise en cache par défaut) ne sont pas modélisés.
- Les prérécupérateurs matériels ne sont pas modélisés.
- Aucun accès mémoire spéculatif n’est modélisé, car l’exécution dans le désordre n’est pas entièrement modélisée.
