Exibição de threads (desempenho em paralelo)
Os threads são exibem a exibição mais detalhada e mais rico em características no visualizador de simultaneidade.Usando essa exibição, você pode identificar se os threads são executados no ou bloqueando devido à sincronização, a E/S, ou em algum outro motivo.
Durante a análise do perfil, o visualizador de simultaneidade examina todos os eventos de contexto opção do sistema operacional para cada thread do aplicativo.As alternâncias de contexto podem ocorrer por várias razões, como estes:
Um thread está bloqueado em um primitivo de sincronização.
O quantum de um thread expira.
Um thread faz uma solicitação de bloqueio de E/S.
Os threads exibem atribuem uma categoria para cada opção de contexto quando um thread foi interrompido executar.As categorias são mostradas na legenda na parte do inferior esquerdo da exibição.O visualizador de simultaneidade categoriza eventos alternância de contexto na pilha de chamadas de threads por APIs conhecidos de bloqueio.Se não houver nenhuma correspondência da pilha de chamadas, a razão de espera que é fornecida por Windows é usada.No entanto, a categoria de Windows pode ser baseada em um detalhes de implementação e não podem refletir a intenção do usuário.Por exemplo, Windows informa a razão de espera de bloqueio em nativo slim um bloqueio de leitor/gravador como E/S em vez de sincronização.Na maioria dos casos, você pode identificar a causa raiz de um evento de bloqueio revisando as pilhas de chamadas que correspondem eventos de contexto opção.
A exibição de threads também mostra as dependências entre threads.Por exemplo, se você identifica um thread que está bloqueado em um objeto de sincronização, você pode procurar o thread que o desbloqueou, e você pode examinar a atividade na pilha de chamadas para esse thread no ponto quando tiver desbloqueado outro.
Quando os threads estão executando o, o visualizador de simultaneidade coleta exemplos.Nos threads exibição, você pode analisar que o código é executado por um ou mais threads durante um segmento de execução.Você também pode visualizar relatórios de bloqueio, e relatórios que analisam a execução de árvore da pilha de chamadas.
Uso
Aqui estão algumas maneiras que você pode usar a exibição de threads:
Identifica motivos pelos quais a interface do usuário (UI) de um aplicativo não responda durante determinadas fases de execução.
Identifica a quantidade de tempo que é bloqueio gasto na sincronização, em E/S, nas falhas de página, e outros eventos.
Identifica o grau de interferência de outros processos que estão em execução no sistema.
Identifica problemas de balanceamento de carga para execução paralela.
Identifique as razões para escalabilidade que é inferior ou inexistente (por exemplo, porque o desempenho de um aplicativo não paralela melhora quando um mais núcleos lógicos estão disponíveis).
Entenda o grau de simultaneidade no aplicativo, para ajudar em parallelization.
Entenda as dependências entre threads de trabalho críticos e caminhos de execução.
Intervalos de tempo e threads específicos de auditoria
A exibição de threads mostra uma linha do tempo.Você pode aplicar zoom e superfície na linha de tempo para revisar os intervalos e threads específicos de seu aplicativo.No eixo x é o tempo e no eixo y são vários canais:
Dois canais de E/S para cada unidade de disco no sistema, em um canal para leituras e gravações em um para.
Um canal para cada thread no processo.
Canais de marcador, se houver eventos de marcador no rastreamento.Os canais de marcador é exibido inicialmente nos canais de thread que geraram os eventos.
Canais de GPU.
Eis uma ilustração de exibição de threads:
Exibição de threads
Inicialmente, os threads são classificados em ordem em que são criados, de modo que o thread de aplicativo principal é primeiro.Você pode usar a opção do tipo no canto superior esquerdo da exibição classificar threads por outro critério (por exemplo, a maioria de trabalho de execução executado).
Você pode ocultar os threads que não estão executando o trabalho selecionando os nomes na coluna à esquerda e escolhendo no botão de Ocultar threads selecionadas na barra de ferramentas.Recomendamos que você ocultar os threads que estão bloqueados completamente porque as estatísticas são irrelevantes e podem obstruir os relatórios.
Para identificar threads adicionais para ocultar, na legenda ativa, escolha o relatório de Por Resumo de Thread na guia de Relatório de perfil .Isso exibe o gráfico de divisão de execução, que mostra o estado de threads para o intervalo de tempo selecionado.A alguns níveis de zoom, alguns threads podem não ser exibidos.Quando isso ocorre, as reticências são exibidas à direita.
Depois de selecionar um intervalo de tempo e alguns dos threads, você pode iniciar a análise de desempenho.
Ferramentas de análise
Esta seção descreve relatórios e outras ferramentas de análise.
Detalhes de threads bloqueio
Para obter informações sobre um evento de bloqueio em uma região específica em um thread, descanse o ponteiro nessa região para exibir uma dica de ferramenta.Contém informações como a categoria, hora de início da região, bloqueando a duração, e API bloqueando se houver um.Se você selecionar a região de bloqueio, a pilha é exibida nesse momento determinado no painel inferior, junto com as mesmas informações que é exibida na dica de ferramenta.Revisando a pilha de chamadas, você pode determinar o motivo subjacente para o evento de threads bloqueio.Você pode localizar informações adicionais do processo e de thread selecionando o segmento e revisando a guia atual.
Um caminho de execução pode ter vários eventos de bloqueio.Você pode revisar esses bloqueando a categoria de forma que você pode encontrar áreas de problema mais rapidamente.Escolha apenas uma das categorias de bloqueio na legenda à esquerda.
Dependências entre threads
O visualizador de simultaneidade pode mostrar dependências entre threads no processo de modo que você possa determinar o que um thread bloqueado estava tentando fazer e saber o que o outro thread o habilitado para executar.Para determinar qual thread desbloqueie outro thread, selecione o segmento relevante de bloqueio.Se o visualizador de simultaneidade pode determinar o thread de desbloqueio, desenha uma linha entre o thread de desbloqueio e o segmento em execução que segue o segmento de bloqueio.Além disso, o guia de Desbloqueando pilha mostra a pilha de chamadas relevante.
Detalhes da execução do thread
No gráfico de linha do tempo de um thread, os buckets verde mostram quando estava executando o código.Você pode obter informações mais detalhadas sobre um segmento de execução.
Quando você seleciona um ponto em um segmento de execução, o visualizador de simultaneidade nesse ponto no tempo na pilha de chamadas relevante e exibir um sinal de intercalação preto acima do ponto selecionado no segmento de execução e exibe a pilha de chamadas própria na guia de Pilha atual .Você pode selecionar vários pontos no segmento de execução.
Observação |
---|
O visualizador de simultaneidade pode não ser capaz de resolver uma seleção em um segmento de execução.Em geral, isso ocorre quando a duração do segmento é menos de um milissegundo. |
Para obter um perfil de execução para qualquer habilitado () reexibido estiver no intervalo de tempo selecionado, o escolhe o botão de Execução na legenda ativa.
Gráfico da Linha de Tempo
O gráfico de linha de tempo mostra a atividade de todos os threads em processo e em todos os dispositivos físicos do disco no computador host.Também exibe eventos de atividade e de marcador de GPU. Você pode ampliar para exibir mais detalhes ou menos zoom para exibir um intervalo mais longo de tempo.Você também pode selecionar pontos no gráfico para obter detalhes sobre as categorias, hora de início, durações, e os estados da pilha de chamadas.
No gráfico de linha do tempo, uma cor indica o estado de um thread em um determinado momento.Por exemplo, os buckets verdes estiverem sendo executados, os buckets foram bloqueados vermelhos para a sincronização, os buckets amarelos for cancelado, e os segmentos roxos foram contratados no dispositivo E/S.Você pode usar esta exibição para examinar o equilíbrio de trabalho entre os threads que estão envolvidos em um loop paralelo ou em tarefas simultâneas.Se um thread está levando muito mais tempo para serem concluídos do que o outro, o trabalho deve ser desequilibrado.Você pode usar essas informações para melhorar o desempenho de seu programa distribuindo o trabalho mais uniformemente entre os threads.
Se apenas um thread é verde (execução) em um momento determinado, o aplicativo não pode aproveitar ao máximo de simultaneidade no sistema.Você pode usar o gráfico de linha do tempo para examinar as dependências entre threads e as relações temporal entre o bloqueio e threads bloqueados.Para reorganizar threads, selecione um thread e na barra de ferramentas, escolha para cima ou para baixo.Para ocultar threads, selecione e escolha no botão de Ocultar threads .
Analisar relatórios
Abaixo do gráfico de linha de tempo é um perfil da linha do tempo e um painel com guias para vários relatórios.Os relatórios a atualização automaticamente como alterar a exibição de threads.Para grandes rastreamentos, o painel de relatórios pode estar indisponível durante as atualizações são calculadas.Cada relatório tem dois ajustes de filtro: redução de ruído e apenas o código.Use a redução de ruído para filtrar as entradas de árvore de chamada onde são poucas horas anteriores.O valor padrão de filtro é 2, mas você pode ajustá-la 0 a 99 por cento.Para exibir somente a árvore de chamada para seu código, marque a caixa de seleção de Apenas Meu Código .Para exibir todas as árvores de chamada, desmarcar-la.
Analise o relatório
Essa guia mostra os relatórios que correspondem às entradas na legenda ativa.Para exibir um relatório, escolher uma das entradas.
Pilhas atual
Essa guia mostra a pilha de chamadas para um ponto selecionado em um segmento do thread no gráfico de linha do tempo.As pilhas de chamadas são cortados para mostrar apenas a atividade relacionada ao programa.
Pilha de desbloqueio
Para consultar quais threads desbloqueou o thread selecionado e, na linha de código em, escolha o guia de Desbloqueando pilha .
Execução
O relatório de execução mostra a divisão do aplicativo tempo gasto na execução.
Para localizar a linha de código em que o tempo de execução são passados, expanda a árvore de chamada e, no menu de atalho para a entrada de árvore da chamada, escolha Exibir Código-Fonte ou Exibir Sites de Chamada.Exibir Código-Fonte localize a linha de código executado.Exibir Sites de Chamada localize a linha do código que chamou a linha de código executado.Se apenas um site de chamada existir, a linha de código é realçada.Se vários sites de chamada existirem, você pode selecionar aquela que você deseja na caixa de diálogo que aparece e escolha o botão de Ir para fonte para realçar o código do site de chamada.Costuma ser o mais útil descobrir o site de chamada que tem a maioria das instâncias, a maior parte do tempo, ou ambos.Para obter mais informações, consulte Relatório do perfil de execução.
Sincronização
O relatório de sincronização mostra as chamadas que são responsáveis por blocos de sincronização, junto com a hora de agregação de bloqueio de cada pilha de chamadas.Para obter mais informações, consulte Tempo de sincronização.
E/S
O relatório de E/S mostra as chamadas que são responsáveis por blocos de E/S, junto com a hora de agregação de bloqueio de cada pilha de chamadas.Para obter mais informações, consulte Tempo de E/S (exibição de threads).
Suspensão
O relatório de suspensão mostra as chamadas que são responsáveis por blocos de suspensão, junto com a hora de agregação de bloqueio de cada pilha de chamadas.Para obter mais informações, consulte Tempo de suspensão.
Gerenciamento de memória
O relatório de gerenciamento de memória mostra as chamadas onde os blocos de gerenciamento de memória ocorreram, junto com a hora de agregação de bloqueio de cada pilha de chamadas.Você pode usar essas informações para identificar áreas que têm problemas em excesso de paginação ou de coleta de lixo. Para obter mais informações, consulte Hora de gerenciamento da memória.
Preempção
O relatório de preempção mostra as instâncias onde os processos no sistema cancelaram o processo atual e os threads da pessoa que substituíram threads no processo atual.Você pode usar essas informações para identificar os processos e threads que são mais responsáveis por preempção a.Para obter mais informações, consulte Tempo de preempção.
Processar de interface do usuário
Interface do usuário que processa o relatório mostra as chamadas que são responsáveis pela interface do usuário que processa blocos, junto com a hora de agregação de bloqueio de cada pilha de chamadas.Para obter mais informações, consulte Tempo de processamento de interface do usuário.
Por resumo do thread
Essa guia mostra uma exibição codificada por cores da coluna de tempo total de cada thread gasto na execução, bloqueada, E/S e em outros estados.As colunas são rotuladas na parte inferior.Quando você ajusta o nível de zoom no gráfico de linha do tempo, essa guia é atualizado automaticamente.A alguns níveis de zoom, alguns threads podem não ser exibidos.Quando isso ocorre, as reticências são exibidas à direita.Se o thread que você deseja não aparecer, você pode ocultar outros threads.Para obter mais informações, consulte Relatório de resumo por thread.
Operações de disco
Essa guia mostra que os processos e threads foram envolvidas no disco E/S no nome do processo atual, em que os arquivos eles tocaram (por exemplo, as dlls que foram carregados), quantos bytes foram lidos, e outras informações.Você pode usar este relatório para avaliar principalmente os que são tempo gasto para acessar arquivos durante a execução, quando o processo parecer ser de E/S associada.Para obter mais informações, consulte Relatório de operações de disco (exibição de threads).