Visualização de threads (desempenho paralelo)
Visualização de threads é o mais detalhado e rico no Visualizador de simultaneidade.Usando este modo de exibição, você pode identificar se os threads estão executando ou bloqueando por causa de algum outro motivo, e/S ou sincronização.
Durante a análise de perfil, o Visualizador de simultaneidade examina todos os eventos de alternância de contexto do sistema operacional para cada segmento do aplicativo.Alternâncias de contexto podem ocorrer por várias razões, como estas:
Um thread é bloqueado em um primitivo de sincronização.
Quantum de um thread expira.
Um thread faz uma solicitação de i/O bloqueio.
Visualização de threads atribui uma categoria a cada alternância de contexto quando um thread foi interrompido executando.As categorias são mostradas na legenda na parte inferior esquerda da exibição.O Visualizador de simultaneidade categoriza eventos de alternância de contexto procurando na pilha de chamadas do thread APIs bem conhecidas de bloqueio.Se não houver nenhuma correspondência de pilha de chamada, a razão de espera é fornecido por Windows é usado. No entanto, o Windows categoria pode ser baseada em um detalhe de implementação e podem não refletir a intenção do usuário. Por exemplo, Windows relata a razão de espera para bloquear um bloqueio de leitor-gravador slim nativo como e/S em vez de sincronização. Na maioria dos casos, você pode identificar a causa de um evento de bloqueio, examinando as pilhas de chamadas que correspondem aos eventos de alternância de contexto.
A visualização Threads também mostra dependências entre threads.Por exemplo, se você identificar um segmento bloqueado em um objeto de sincronização, você pode procurar o thread desbloqueado ele e você pode examinar a atividade na pilha de chamadas para esse segmento no ponto quando ele desbloqueado o outro.
Durante a execução de threads, o Visualizador de simultaneidade coleta amostras.Na visualização de Threads, você pode analisar o código é executado por um ou mais threads durante um segmento de execução.Você também pode examinar o bloqueio relatórios e relatórios de execução da árvore de pilha de chamadas de perfil.
Uso
Aqui estão algumas maneiras que você pode usar o modo de exibição de Threads:
Identifica os motivos pelos quais a interface do usuário (UI) de um aplicativo é responder durante determinadas fases de execução.
Identifica a quantidade de tempo gasto bloqueio na sincronização, e/S, 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 em paralelo.
Identifica os motivos de escalabilidade é inexistente ou com qualidade inferior (por exemplo, por que não melhora o desempenho de um aplicativo paralelo quando mais lógicos núcleos disponíveis).
Compreenda o grau de simultaneidade no aplicativo, para ajudar a paralelização.
Compreenda as dependências entre os threads de trabalho e caminhos críticos de execução.
Examinando Threads e intervalos de tempo específico
A visualização Threads mostra uma linha do tempo.Pode aplicar zoom e panorâmica dentro do cronograma para examinar a intervalos específicos e threads do aplicativo.No eixo x é o tempo e no eixo y são vários canais:
Dois canais de i/O para cada unidade de disco do sistema, um canal para leituras e outro para gravações.
Um canal para cada thread no processo.
Canais de marcador, se há eventos de marcador no rastreamento.Canais de marcador aparecem inicialmente em canais de thread que gerou a esses eventos.
Canais GPU.
Aqui está uma ilustração da visualização de Threads:
Visualização de threads
Inicialmente, os segmentos são classificados na ordem em que são criados, para que o thread principal do aplicativo é o primeiro.Você pode usar a opção de classificação no canto superior esquerdo do modo de exibição para classificar os threads por outro critério (por exemplo, por mais execução trabalho realizado).
Você pode ocultar os threads que não estão executando o trabalho selecionando seus nomes na coluna à esquerda e, em seguida, escolhendo o Ocultar segmentos selecionados na barra de ferramentas.Recomendamos que você ocultar segmentos são bloqueados completamente porque suas estatísticas são irrelevantes e podem obstruir os relatórios.
Identificar segmentos adicionais para ocultar legenda ativa, escolha a Por Thread Summary relatórios sobre o Relatório de perfil guia.Exibe o gráfico de divisão de execução, mostra o estado de segmentos para o intervalo de tempo atualmente selecionado.Em alguns níveis de zoom, alguns segmentos podem não ser exibidos.Quando isso ocorre, as elipses são exibidos à direita.
Quando você tiver selecionado um intervalo de tempo e alguns segmentos nela, você pode iniciar a análise de desempenho.
Ferramentas de análise
Esta seção descreve os relatórios e outras ferramentas de análise.
Detalhes de bloqueio de thread
Para obter informações sobre um evento de bloqueio de uma determinada região em um thread, posicione o ponteiro na região para exibir uma dica de ferramenta.Ele contém informações como categoria, hora de início da região, duração do bloqueio e uma API de bloqueio se houver um.Se você selecionar a região de bloqueio, a pilha nesse momento é exibida no painel inferior, juntamente com as mesmas informações exibidas na dica de ferramenta.Examinando a pilha de chamadas, você pode determinar o motivo subjacente para o evento de bloqueio de thread.Você pode encontrar informações de thread e processo adicional selecionando o segmento e examinando a guia atual.
Um caminho de execução pode ter vários eventos de bloqueio.Você pode examinar esses por categoria de bloqueio para que você possa localizar mais rapidamente áreas problemáticas.Basta escolha uma das categorias de bloqueio na legenda à esquerda.
Dependências entre Threads
O Visualizador de simultaneidade pode mostrar dependências entre threads do processo para que possa determinar o que um thread bloqueado estava tentando fazer e saiba que outro thread habilitado para executar.Para determinar qual thread desbloqueado outro thread, selecione o segmento de bloqueio relevante.Se o Visualizador de simultaneidade pode determinar desbloquear thread, ele desenha uma linha entre desbloquear thread e o segmento de execução que segue o segmento de bloqueio.Além disso, o Unblocking pilha guia mostra a pilha de chamadas relevantes.
Detalhes de execução de thread
No gráfico de linha do tempo de um thread, os segmentos verdes mostram quando ele estava executando 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 procura esse ponto no tempo na pilha de chamadas relevantes e exibe um cursor preto acima do ponto selecionado no segmento de execução e exibe a pilha de chamadas de pilha atual guia.Você pode selecionar vários pontos no segmento de execução.
Observação |
---|
O Visualizador de simultaneidade não poderá resolver uma seleção em um segmento de execução.Normalmente, isso ocorre quando a duração do segmento é menos de um milissegundo. |
Para obter um perfil de execução para todos ativados (reexibidas) threads no intervalo de tempo atualmente selecionado, escolha o execução botão de legenda ativa.
Gráfico de linha do tempo
O gráfico de linha do tempo mostra a atividade de todos os segmentos no processo e todos os dispositivos de disco físico no computador host.Ele também exibe eventos de marcador e atividade da GPU.Você pode ampliar para ver mais detalhes ou out para exibir um intervalo maior de tempo.Você também pode selecionar os pontos no gráfico para obter detalhes sobre categorias, horários de início, durações e estados de pilha de chamada.
No gráfico de linha do tempo, uma cor indica o estado de um segmento em um determinado momento.Por exemplo, execução verdes segmentos, segmentos vermelhos foram bloqueados para sincronização, segmentos amarelos foram superados e segmentos roxos foram contratados no dispositivo e/S.Você pode usar esta exibição para examinar o equilíbrio de trabalho entre os threads envolvidos no loop paralelo ou em tarefas simultâneas.Se um thread está levando mais tempo para concluir que os outros, o trabalho pode ser desbalanceado.Você pode usar essas informações para melhorar o desempenho do seu programa, distribuindo o trabalho mais uniforme entre os threads.
Se apenas um thread estiver verde (execução) em um ponto no tempo, o aplicativo não pode ser tirando total proveito a simultaneidade no sistema.Você pode usar o gráfico de linha de tempo para examinar as dependências entre os segmentos e as relações temporais entre bloqueio e bloqueados segmentos.Para reorganizar os segmentos, seleciona um thread na barra de ferramentas, escolha cima ou para baixo botão.Para ocultar segmentos, selecione-os e escolha o Ocultar segmentos botão.
Relatórios de perfil
Abaixo da linha do tempo o gráfico é um perfil de cronograma e um painel de abas para vários relatórios.Relatórios atualizada automaticamente quando você alterar a exibição de Threads.Para grandes rastreamentos, o painel de relatórios pode estar indisponível enquanto as atualizações são calculadas.Cada relatório possui dois ajustes de filtro: Just My Code e redução de ruído.Use a redução de ruído para filtrar as entradas da árvore de chamada em pouco tempo é gasto.O valor de filtro padrão é 2 por cento, mas pode ajustá-lo de 0 a 99%.Para exibir somente a árvore de chamada para o seu código, selecione o Just My Code caixa de seleção.Para exibir todas as árvores de chamada, desmarque-a.
Relatório de perfil
Este guia mostra os relatórios que correspondem às entradas de legenda ativa.Para exibir um relatório, escolha uma das entradas.
Pilha atual
Este guia mostra a pilha de chamada para um ponto selecionado em um segmento de thread no gráfico de linha do tempo.As pilhas de chamadas são cortadas para mostrar somente as atividades relacionadas ao seu programa.
Pilha de desbloqueio
Para ver qual thread desbloqueado o segmento selecionado e em qual linha de código, escolha a Unblocking pilha guia.
Execução
O relatório de execução mostra a divisão do tempo gasto o aplicativo em execução.
Para localizar a linha de código no qual o tempo de execução é gasto, expanda a árvore de chamada e em seguida, no menu de atalho para a entrada de árvore de chamada, escolha Exibir origem ou Exibir Sites chamada.Exibir fonte localiza a linha de código executada.Exibir Sites chamar localiza a linha de código chamado linha de código executada.Se houver um site de chamada, apenas a linha de código é realçada.Se existirem vários sites de chamada, você pode selecionar o item desejado na caixa de diálogo que aparece e, em seguida, escolha o Ir para origem botão realçar o código do site de chamada.Geralmente é mais útil para localizar o site de chamada tem mais instâncias, mais tempo ou ambos.Para mais informações, consulte Relatório de perfil de execução.
Sincronização
O relatório de sincronização mostra as chamadas são responsáveis por blocos de sincronização, junto com o agregado bloqueando os horários de cada pilha de chamadas.Para mais informações, consulte Tempo de sincronização.
E/S
O relatório de e/S mostra as chamadas são responsáveis por blocos de e/S, junto com o agregado bloqueando os horários de cada pilha de chamadas.Para mais informações, consulte Tempo de i/O (visualização de Threads).
Suspensão
O relatório de suspensão mostra as chamadas são responsáveis por blocos de suspensão, juntamente com a agregação bloqueando os horários de cada pilha de chamadas.Para mais informações, consulte Tempo de espera.
Gerenciamento de memória
O relatório de gerenciamento de memória mostra as chamadas onde ocorreram blocos de gerenciamento de memória, juntamente com a agregação bloqueando os horários de cada pilha de chamadas.Você pode usar essas informações para identificar as áreas que têm problemas de coleção de lixo ou de paginação excessivos.Para mais informações, consulte Tempo de gerenciamento de memória.
Preempção
O relatório de preempção mostra as instâncias onde os processos do sistema superado o processo atual e os segmentos individuais substituídos de segmentos no processo atual.Você pode usar essas informações para identificar os processos e threads que são mais responsáveis por preempção.Para mais informações, consulte Tempo de preempção.
Processamento da interface do usuário
Relatório de processamento da interface do usuário mostra as chamadas são responsáveis pela interface do usuário do processamento blocos, junto com o agregado bloqueando os horários de cada pilha de chamadas.Para mais informações, consulte Tempo de processamento de interface do usuário.
Por segmento de resumo
Este guia mostra uma exibição de coluna com códigos de cores do tempo total que cada thread gasto na execução, bloqueado, e/S e 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, este guia é atualizado automaticamente.Em alguns níveis de zoom, alguns segmentos podem não ser exibidos.Quando isso ocorre, as elipses são exibidos à direita.Se o segmento desejado não aparecer, você pode ocultar outros threads.Para mais informações, consulte Por relatório de resumo do Thread.
Operações de disco
Esta guia mostra quais processos e threads envolvidos na e/S do disco em nome do processo atual, os arquivos que eles utilizadas (por exemplo, as DLLs carregadas), quantos bytes foram lidos, e outras informações.Você pode usar esse relatório para avaliar o tempo gasto em Acessando arquivos durante a execução, especialmente quando o processo parece estar vinculado de e/S.Para mais informações, consulte Relatório de operações de disco (visualização de Threads).