Crie o perfil da CPU e GPU com capturas de temporização
** As capturas temporizadas combinam dados de perfilagem de CPU e GPU numa única captura para uma análise aprofundada da sua aplicação. Esses dados são coletados enquanto o jogo está em execução, e com sobrecarga mínima, para que você possa ver coisas como como o trabalho é distribuído pelos núcleos da CPU, a latência entre o trabalho gráfico que está sendo enviado pela CPU e executado pela GPU, quando ocorrem acessos de E/S de arquivos e alocações de memória, e assim por diante. Isso também inclui eventos, marcadores e contadores definidos pela aplicação através do PixEvents.
Fazer uma captura de tempo
Na visualização Conexão , inicie ou ligue-se ao processo desejado (garantindo que a opção relevante For GPU Capture esteja desmarcada).
Configure as suas opções de captura de cronometragem como necessário e, quando estiver pronto, clique no botão Iniciar Captura de Cronometragem para iniciar a gravação. Clique Parar a Captura de Tempo (ou encerre a sua aplicação) para encerrar a gravação. Após um breve período de processamento, a captura iniciará.
Opções de captura de temporização
Nome | Descrição |
---|---|
Modo de captura | Sequencial: Registre a totalidade dos eventos entre o início e a interrupção da captura. Circular: Registre eventos em um buffer de tamanho fixo, salvando apenas os últimos n segundos de dados. Consulte este post do blog Circular Timing Captures para obter mais detalhes. |
Amostras de CPU | Realizar a perfilagem de amostras para ver onde a CPU está a gastar tempo. A taxa de amostragem é configurável. |
Pilhas de chamadas em comutadores de contexto | Colete pilhas de chamadas quando um thread alterna contextos. |
Acessos a ficheiros | Rastreie acessos a arquivos. |
Temporizações da GPU | Colete informações detalhadas de tempo sobre quando o trabalho da GPU é iniciado e interrompido. |
Recursos da GPU | Colete informações detalhadas sobre objetos D3D, como pilhas e recursos. Acompanhe também a residência da GPU, as alocações rebaixadas e as migrações de alocação. |
Eventos VirtualAlloc/VirtualFree | Rastreia alocações feitas através das funções VirtualAlloc e VirtualFree. |
Eventos HeapAlloc/HeapFree | Rastreia alocações feitas através das funções HeapAlloc e HeapFree. |
Eventos de alocador de memória personalizados | Rastreia as alocações feitas por alocadores de memória personalizados que foram instrumentados com PixEvents. |
Eventos de falha de página | Colete dados sobre falhas de página que ocorrem quando a captura está em execução. As falhas de página são mostradas na linha do tempo e na visualização de detalhes do elemento. |
Pilhas de chamadas para processos sem título | Capture pilhas de chamadas para processos diferentes do processo de título (o processo iniciado ou anexado ao processo). |
Informações da imagem do kernel | Coletar informações necessárias para mostrar os callstacks para binários do kernel. |
Gerar arquivo .etl em vez de arquivo .wpix | O arquivo .etl gerado pode ser convertido posteriormente em um arquivo .wpix no Arquivo | Menu Converter. Essa opção é útil ao relatar reproduções de bugs para a equipe do PIX ou se você tiver outras ferramentas para processar dados ETW. |
Capturas programáticas
Você pode capturar programaticamente usando o WinPixEventRuntime. Para obter detalhes, consulte a postagem do blog Captura programática.
Criação de perfil da CPU
Ativar a opção Amostras de CPU ao fazer uma captura pode ajudá-lo a identificar funções lentas no caminho crítico do seu aplicativo, bem como encontrar problemas relacionados a esperas de threads e trocas de contexto. Você também poderá rastrear diferentes tipos de alocações (com a opção de captura apropriada ativada).
Há várias postagens de blog que abordam esses recursos em detalhes:
- Visão geral das capturas de temporização
- Analisando Amostras de CPU no Post de Blog Timing Captures.
- Analisando bloqueios e trocas de contexto em medições de tempo
-
Analisando o uso de memória e o desempenho em registos temporais
- Você também pode instrumentar os seus próprios alocadores personalizados. Para obter mais detalhes, consulte a postagem do blog Suporte à criação de perfil de memória para alocações feitas a partir do alocador personalizado de um título.
Criação de perfil de GPU
Seu aplicativo está enfrentando quedas de quadros intermitentes? Uso excessivo de VRAM? Operações de paginação inesperadas entre a memória do sistema e a VRAM? Os recursos de criação de perfil de GPU no PIX podem ajudá-lo a chegar ao fundo dessas situações comuns e difíceis de analisar.
Temporizações da GPU
Habilite a opção de tempos da GPU ao fazer uma captura para recolher dados de cronometragem do trabalho da GPU. Na visualização da Linha do Tempo, podes encontrar faixas para cada fila de GPU (no Seletor de Faixa, podes fixar rapidamente essas faixas com a configuração Filas de API fixadas). Essas faixas contêm várias subfaixas:
- PIX Events (GPU): regiões hierárquicas definidas por aplicativos do trabalho da GPU. Consulte PixEvents.
- Execuções GPU: As execuções correspondem a envios de trabalho no nível da API; por exemplo, via ExecuteCommandLists.
- Trabalho da GPU: Qualquer trabalho que ocorra na GPU; por exemplo, Desenhos, Despachos, Cópias.
- PIX Markers (GPU): marcadores definidos pelo aplicativo. Consulte PixEvents.
Ao selecionar um evento na pista, você verá setas mostrando onde na CPU esse evento se originou. Há também várias opções de visualização no menu de opções da pista (o ícone de engrenagem ao lado do nome da pista). Mais notavelmente, as opções Flatten Events e Flatten GPU Work estão habilitadas por padrão para preservar espaço, mas você pode querer ver a hierarquia completa de eventos PIX ou paralelização GPU Work ao mergulhar em um quadro específico.
Esses dados também estão disponíveis em forma de tabela por meio exibição Detalhes do intervalo selecionando a categoria relevante na lista suspensa Itens para mostrar.
Informações de apresentação e exibição
Os Vsyncs são exibidos como marcadores numa faixa separada do Monitor e podem ser encontrados na visualização Detalhes do intervalo na categoria Outros .
Memória GPU e objetos Direct3D
Habilite a opção de recursos da GPU ao realizar uma captura para recolher informações sobre objetos Direct3D. Para representar graficamente o uso geral da memória, pode-se encontrar vários contadores na visualização métricas. Você pode configurar várias linhas de orçamento para ter uma ideia rápida se está atingindo suas metas de uso de memória. Quando encontrar uma área de interesse, poderá querer investigá-la mais a fundo ao selecionar o intervalo de tempo, clicando em Visualização de Zoom da Linha do Tempo para Selecionar Intervalo no menu de contexto com o botão direito do rato e configurando a lista suspensa Intervalo de Tempo Selecionado para Selecionar Intervalo Visível.
Dica
Definir o Estilo de Linha como Quadrado torna mais fácil ver onde as alocações são feitas.
Na exibição Detalhes do Intervalo, você pode exibir várias informações sobre objetos de API do Direct3D, como heaps, recursos e objetos de estado de pipeline. Para facilitar a identificação de objetos suspeitos, essas informações são agrupadas por quando foram alocadas e liberadas.
Residência
Para questões relacionadas com a residência, consulte as categorias de Operações de Residência , Alocações Rebaixadas , e Migrações de Alocação na vista de Detalhes do Intervalo . Esses marcadores e eventos também são mostrados na pista Residence Operations.
As operações de residência incluem as operações MakeResident e Evict (iniciadas através da API Direct3D 12), bem como quaisquer operações PageIn e PageOut (Para obter mais detalhes, consulte Residency). As alocações rebaixadas ocorrem quando o kernel gráfico (DXGK) não consegue alocar um recurso na VRAM da GPU (devido à pressão ou fragmentação da memória). Se isso acontecer, o DXGK também tentará executar migrações de alocação para essas alocações rebaixadas. Observe que essas migrações são operações caras, porque exigem a suspensão da GPU.
Utilização da GPU e contadores de apresentação
Habilite a opção Capture SysMon contadores quando estiver a fazer uma captura para recolher contadores presentes no Monitor do Sistema (também conhecido como SysMon), que inclui vários contadores relacionados com o desempenho da GPU. Importa referir que existem contadores para:
- A utilização da GPU é detalhada por mecanismo de GPU, tanto para o processo-alvo como para todos os processos.
- Dados de apresentação, como fotogramas por segundo (e o inverso, em milissegundos, MsBetweenPresents) e MsUntilRenderComplete (tempo entre o início de uma apresentação e a conclusão do trabalho da GPU).
- Informações de memória GPU, incluindo uso de memória local e não local, residência e orçamentos.
Dica
Passe o cursor sobre os nomes dos contadores no Monitor do Sistema para obter uma descrição.
Esses contadores também podem ser monitorizados em tempo real, seja durante a captura de temporização ou ao clicar no botão Iniciar Recolha de Contadores na vista do Monitor do Sistema. Os gráficos podem ser reorganizados e os contadores podem ser adicionados ou removidos dinamicamente. Clique em Contadores para ver todos os contadores disponíveis.
E/S de arquivo Win32
Consulte a postagem do blog Analisando o desempenho de E/S do arquivo Win32 em Capturas de temporização.
Outras características de análise
- As comparações estatísticas ajudam a determinar quais partes de uma hierarquia de eventos PIX têm durações estatisticamente diferentes para o conjunto de pontos que estão sendo comparados. Para obter detalhes, consulte a postagem do blog Timing Capture Statistical Comparison Features.
- Definir orçamentos de desempenho pode ajudá-lo a identificar rapidamente áreas problemáticas da captura. Para obter mais detalhes, consulte a postagem do blog Usando orçamentos de desempenho na visualização de métricas de captura de tempo.
- Veja também a postagem do blog Análise de caminho crítico em Capturas de tempo.