Partilhar via


Criar o perfil da CPU e da GPU com capturas de tempo

As capturas de tempo combinam dados de criação de perfil de CPU e GPU em uma única captura para uma análise mais profunda do seu aplicativo. Esses dados são coletados enquanto o jogo está em execução e com sobrecarga mínima, para que você possa ver como o trabalho é distribuído entre os núcleos da CPU, a latência entre o trabalho gráfico que é enviado pela CPU e executado pela GPU, quando ocorrem acessos de E/S de arquivo e alocações de memória e assim por diante. Também inclui eventos, marcadores e contadores definidos pelo aplicativo por meio do PixEvents.

Realizar uma captura de tempo

Na visualização Conexão, inicie ou anexe o processo desejado (garantindo que a opção Para captura de GPU não esteja marcada).

Configure suas opções de captura de tempo conforme necessário e, quando estiver pronto, clique no botão Iniciar captura de tempo para iniciar a gravação. Clique em Parar captura de tempo (ou encerrar seu aplicativo) para encerrar a gravação. Após um breve período de processamento, a captura será aberta.

Opções de captura de tempo

Nome Descrição
Modo de captura Sequencial: registra a totalidade dos eventos entre o início e a interrupção da captura.
Circular: registra eventos em um buffer de tamanho fixo e salva apenas os últimos n segundos de dados. Consulte esta postagem do blog Captura de tempo circular para obter mais detalhes.
Amostras da CPU Execute a criação de perfil de exemplo para ver onde a CPU está gastando tempo. A taxa de exemplo é configurável.
Pilhas de chamadas em alternâncias de contexto Colete pilhas de chamadas quando um thread alternar contextos.
Acessos de arquivos Rastreie os acessos de arquivos.
Tempos da GPU Colete informações detalhadas de tempo sobre quando o trabalho da GPU começa e termina.
Recursos do GPU Colete informações detalhadas sobre objetos D3D, como heaps 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 as alocações feitas por meio das funções VirtualAlloc e VirtualFree.
Eventos HeapAlloc/HeapFree Rastreia alocações feitas por meio das funções HeapAlloc e HeapFree.
Eventos de alocador personalizados Rastreia alocações feitas por alocadores de memória personalizados 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 que não sejam o processo do título (o processo iniciado ou anexado ao processo).
Informações de imagem do kernel As informações coletadas precisam mostrar pilhas de chamadas para os binários do kernel.
Gere arquivo .etl em vez de arquivo .wpix O arquivo .etl gerado pode ser convertido posteriormente em um arquivo .wpix no menu Arquivo | 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 fazer uma captura de forma programática usando o WinPixEventRuntime. Para obter detalhes, consulte a postagem do blog Captura programática.

Criação de perfil da CPU

Habilitar a opção Exemplos de CPU ao fazer uma captura, pode ajudá-lo a identificar funções lentas no hot path do aplicativo, além de encontrar problemas relacionados a esperas de thread e trocas de contexto. Você também poderá rastrear diferentes tipos de alocações (com a opção de captura apropriada habilitada).

Existem muitas postagens do blog que cobrem esses recursos em detalhes:

Criação de perfil de GPU

Seu aplicativo está enfrentando quedas intermitentes de quadros? 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 frequentes e difíceis de analisar.

Tempos da GPU

Habilite a opção Tempos da GPU ao fazer uma captura para coletar dados de tempo para o trabalho de GPU. Na visualização Linha do tempo você pode encontrar faixas para cada fila de GPU (no Selecionador de faixa, você pode fixar rapidamente essas faixas com a configuração Filas de API fixadas). Essas faixas contêm várias subfaixas:

  • Eventos PIX (GPU): regiões hierárquicas definidas pelo aplicativo do trabalho da GPU. Consulte PixEvents.
  • Execuções de GPU: as execuções correspondem a envios de trabalho no nível da API, por exemplo, por meio de ExecuteCommandLists.
  • Trabalho da GPU: qualquer trabalho que ocorra na GPU, por exemplo, desenhos, despachos e cópias.
  • Marcadores PIX (GPU): marcadores definidos pelo aplicativo. Consulte PixEvents.

Ao selecionar um evento na faixa, você verá setas mostrando onde esse evento se originou na CPU. Há também várias opções de visualização no menu de opções de faixa (o ícone de engrenagem ao lado do nome da faixa). De forma notável, as opções Nivelar eventos e Nivelar o trabalho da GPU são habilitadas por padrão para preservar espaço, mas recomenda-se ver a hierarquia completa de eventos PIX ou a paralização do trabalho da GPU ao se aprofundar em um quadro específico.

Esses dados também estão disponíveis em formato tabular por meio da visualização Detalhes do intervalo ao selecionar a categoria relevante no menu suspenso Itens a serem exibidos.

Visualização de eventos de GPU PIX não nivelados e trabalho de GPU na fila de APIs, com uma seta mostrando qual thread de CPU enviou o trabalho de GPU

Informações de apresentação e exibição

Os Vsyncs são exibidos como marcadores em uma faixa separada do Monitor e pode ser encontrada na visualização Detalhes do intervalo na categoria Outro.

Memória da GPU e objetos Direct3D

Habilite a opção Recursos de GPU ao fazer uma captura para coletar informações sobre objetos Direct3D. Para representar graficamente o uso geral da memória, você pode 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á cumprindo suas metas de uso de memória. Ao encontrar uma área de interesse, recomenda-se investigar mais, selecionando o intervalo de tempo. Para isso, clique em Ampliar a visualização da linha do tempo para selecionar o intervalo no menu contexto do botão direito do mouse e defina a opção Intervalo de tempo selecionado como Selecionar intervalo visível.

Visualização do uso de memória de objeto da API D3D na visualização de métricas

Dica

Definir o Estilo de linha como Quadrado facilita a visualização de onde as alocações são feitas.

Na visualização Detalhes do intervalo, você pode exibir várias informações sobre objetos da 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 de acordo com a data em que foram alocadas e liberadas.

Visualizar objetos da API D3D na visualização de detalhes do intervalo

Residência

Para problemas relacionados à residência, consulte as categorias Operações de residência, Alocações rebaixadas e Migrações de alocação da visualização Detalhes do intervalo. Esses marcadores e eventos também são mostrados na faixa Operações de residência.

As operações de residência incluem as operações MakeResident e Evict (iniciadas por meio da API do Direct3D 12), assim como quaisquer operações PageIn e PageOut (para obter mais detalhes, consulte Residência). As alocações rebaixadas ocorrem quando o kernel gráfico (DXGK) não pode alocar um recurso na VRAM da GPU (devido à pressão de memória ou fragmentação). 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, pois exigem a suspensão da GPU.

Visualizar migrações de alocação

Contadores de utilização e de apresentação de GPU

Habilite a opção Capturar contadores SysMon ao fazer uma captura para coletar contadores presentes no monitor do sistema (também conhecido como SysMon), que inclui vários contadores relacionados ao desempenho da GPU. Particularmente, existem contadores para:

  • Utilização de GPU dividida por mecanismo de GPU para o processo de destino e todos os processos.
  • Dados de apresentação, como quadros por segundo (e o inverso, em milissegundos, MsBetweenPresents) e MsUntilRenderComplete (tempo entre o início da apresentação e a conclusão do trabalho da GPU).
  • Informações de memória da GPU, incluindo uso de memória local e não local, residência e orçamentos.

Visualização de quadros por segundo e utilização de GPU na visualização Métricas

Dica

Passe o mouse sobre os nomes dos contadores no Monitor do sistema para obter uma descrição.

Esses contadores também podem ser monitorados em tempo real, durante uma captura de tempo ou clicando no botão Iniciar coleta de contadores na exibição Monitor do sistema do . Os gráficos podem ser reorganizados e os contadores podem ser adicionados ou removidos dinamicamente. Clique em Contadores para exibir todos os contadores disponíveis.

Exibindo gráficos e contadores do Monitor do sistema

Win32 file-I/O

Consulte no blog a postagem no blog Analisar o desempenho de E/S de arquivo Win32 em capturas de tempo.

Outros recursos de análise