- Visão geral
- Processo de captura
- Layouts do rastreamento de instruções
- Práticas recomendadas e limitações
Visão geral
As Instruction Trace Captures ajudam você a otimizar o uso que o seu título faz dos caches de memória e de instruções do console. O PIX registra dados sobre cada instrução da CPU executada enquanto a captura estava em execução. Todas as instruções de carregamento e armazenamento de memória são então analisadas usando uma simulação de cache. Os resultados da simulação são usados para:- Identificar quais funções causaram mais falhas de cache e carregaram mais dados nos caches. As linhas de código-fonte C++ específicas e as instruções de assembly que resultaram em uma falha de cache também são identificadas.
- Ver estatísticas sobre os acertos e as falhas de cache de cada núcleo da CPU e módulo.
- Visualizar a eficiência com que cada linha de cache está sendo usada. As Instruction Trace Captures mostram quais bytes de uma linha de cache foram acessados, junto com o código que acessou cada byte. Também são fornecidas informações de estruturas de dados para ajudar a otimizar seus layouts de dados e fazer o melhor uso dos caches de memória.
Fazer uma captura
Os rastreamentos de instruções registram dados de um número especificado de instruções da CPU a partir do momento em que a captura foi iniciada. O número de instruções a capturar é especificado usando o campo Instructions per thread to capture no painel CPU Instruction Trace Options antes de iniciar uma captura. Observe que o número de instruções que você especificar será capturado para cada thread em execução no processo do título. O PIX também pode, opcionalmente, registrar informações sobre os tipos de dados acessados por cada linha de código-fonte e instrução de assembly. Marque a caixa de seleção Track Data Types para adicionar informações de tipos de dados à captura. Depois de especificar um número de instruções e a opção de rastreamento de tipos, selecione o botão Capture para iniciar a captura.
Layouts do Instruction Trace
- Summary. Fornece um resumo de como o título está interagindo com os caches de dados e de instruções do console.
- Instruction Table. Exibe as instruções da CPU que foram executadas para uma determinada função. Também são fornecidas informações sobre os tipos de dados acessados e quais instruções de assembly causaram falhas de cache de dados.
- Source. Exibe o código-fonte C++ de uma determinada função. Também são fornecidas informações sobre os tipos de dados acessados e quais linhas de código-fonte causaram falhas de cache de dados.
- Callgraph. Exibe o gráfico de chamadas de todas as funções executadas durante a captura. A exibição pode ser usada para examinar várias estatísticas sobre cada chamada, incluindo o número de falhas de cache, um detalhamento por tipo de instrução e assim por diante. Também é fornecida uma exibição butterfly de funções para navegar pelos chamadores e chamados de uma função especificada.
- Memory Regions. Fornece detalhes sobre os padrões de acesso à memória para um conjunto de intervalos de endereços.
- Memory Region Details. Fornece um nível adicional de análise de linhas de cache, exibindo as linhas de código-fonte C++ e as instruções de assembly que estão acessando a memória na região selecionada no momento.
Capture Summary
As Instruction Trace Captures abrem em um layout de resumo que fornece uma análise de como o título está interagindo com os caches de memória e de instruções do sistema. Também são fornecidos avisos, como leituras de memória de combinação de gravação. A seção Execution Summary da página de resumo exibe algumas estatísticas básicas sobre a captura, incluindo um detalhamento das instruções por tipo e a quantidade de dados carregados e armazenados.




Instruction Table
O layout Instruction Table é usado para examinar o conjunto de instruções da CPU que foram executadas para uma determinada função. São fornecidas contagens de execução e de falhas de cache para cada instrução executada. Os tipos de dados acessados por cada instrução também são mostrados se a opção Track Data Types tiver sido selecionada antes de iniciar a captura. Com frequência, chega-se ao layout Instruction Table clicando em um hiperlink ao lado de uma função no layout Summary.



Source
O layout Source é usado para examinar o código-fonte C++ de uma determinada função. Com frequência, chega-se a esse layout clicando em um hiperlink ao lado de uma função no layout Summary ou selecionando o item de menu de contexto Goto Source no layout Summary ou no layout Instruction Table.


Callgraph
Os rastreamentos de instruções incluem um layout que mostra o gráfico de chamadas de todas as funções executadas durante a captura. Cada thread em que o código foi executado é um nó de nível superior na árvore. O conjunto de colunas da exibição pode ser usado para examinar várias estatísticas sobre cada chamada, incluindo o número de falhas de cache, um detalhamento por tipo de instrução e assim por diante. O conjunto de colunas a serem exibidas pode ser personalizado usando o painel Event List Counters.





Memory Regions
O layout Memory Regions fornece detalhes sobre os padrões de acesso à memória para um conjunto de intervalos de endereços. Esses detalhes incluem o conjunto de bytes individuais que foram acessados em cada linha de cache, junto com o conjunto de funções e tipos de dados associados a cada acesso à memória. O layout Memory Regions é mais útil quando os dados que exibe têm como escopo uma função específica. Um fluxo de trabalho comum é identificar uma função que está causando falhas de cache de dados usando o layout Summary ou o layout Callgraph e, em seguida, usar o menu de contexto do layout Callgraph para navegar até o layout Memory Regions. Na figura a seguir, uma função chamada UpdateCommonObjects foi identificada como uma função de interesse, devido às altas contagens de falhas de cache exibidas no layout Callgraph. O item de menu de contexto Scope Memory Analysis to only this node é usado para navegar até o layout Memory Regions.



Memory Region Details
O layout Memory Region Details fornece um nível adicional de análise de linhas de cache por meio da exibição Source Memory Access. Essa exibição fornece o código-fonte C++, intercalado com instruções de assembly e informações de tipos de dados, que mostra exatamente quais linhas da função estão afetando a região de memória. As linhas de código-fonte e de assembly realçadas em verde estão acessando dados na região de memória. Selecionar outra função na exibição Accessing Functions atualiza o Byte Access Map e a exibição Source Memory Access com informações específicas da função selecionada.
Práticas recomendadas e limitações
O rastreamento de instruções mostra as falhas de cache de dados do L1 e do L2. As falhas de L3 também são fornecidas quando a captura é feita em um XBOX Series X Dev Kit ou XBOX Series S Test Kit. Essas contagens aparecem nos vários layouts da captura. As contagens de falhas de cache se baseiam em uma simulação dos caches, e não em contadores ou eventos reais de hardware. A simulação é usada porque o rastreamento de instruções gera processamento adicional por instrução executada, o que distorceria quaisquer contadores reais de hardware. No entanto, há vários fatores a considerar ao analisar os dados produzidos pela simulação de cache.- Presume-se que os caches estejam frios, portanto as falhas iniciais podem não ser precisas.
- A latência para carregar linhas não é modelada.
- Tipos de memória diferentes de write-back (a memória em cache padrão) não são modelados.
- Os prefetchers de hardware não são modelados.
- Nenhum acesso especulativo à memória é modelado, porque a execução fora de ordem não é totalmente modelada.
