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:
- Visão geral das capturas de tempo
- Postagem do blog Análise de exemplos de CPU em capturas de tempo.
- Analisar paradas e alternâncias de contexto em capturas de tempo
- Analisar o uso e desempenho da memória em capturas de tempo
- Você também pode instrumentar seus próprios alocadores personalizados. Para obter mais detalhes, consulte a postagem no 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 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.
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.
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.
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.
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.
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.
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
- 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á sendo comparado. Para obter detalhes, consulte a postagem do blog Recursos de comparação estatística de captura de tempo.
- Definir orçamentos de desempenho pode ajudar a identificar rapidamente áreas problemáticas da captura. Para obter mais detalhes, consulte a postagem no blog Usar orçamentos de desempenho na visualização de métricas de captura de tempo.
- Consulte também a postagem no blog Análise de caminho crítico em capturas de tempo.