Como posso descobrir qual é o gargalo que está atrasando um processo em particular / todo o sistema?

7

Dado um processo de execução específico, existe uma maneira de descobrir qual elemento de hardware é atualmente o gargalo para sua operação? Em outras palavras, sua computação atual está vinculada à CPU, vinculada à GPU, ligada à memória, ligada a E / S, etc?

Respostas que funcionam para o Windows XP são preferíveis, mas todas as respostas são bem-vindas.

EDIT: Estou pensando em processos que levam a maioria dos recursos do sistema para si mesmos; então, soluções que podem me ajudar a encontrar a atual "battleneck" para todo o sistema (por exemplo, o elemento que mais trabalha duro, enquanto as outras estão em repouso) também estão bem.

EDIT 2: alguém me fez esta pergunta e minha resposta foi

Open your task manager and choose to view page faults for the application - a very high count hints that you do not have enough physical memory. Check out the CPU utilization - if it's constantly at 100% it's a sign it may not be fast enough for this real-time application.

Isso é o que eu teria feito, mas parece um pouco amador, então estou procurando formas mais precisas e completas de identificar o ofensor.

    
por Oak 10.11.2010 / 19:41

2 respostas

1

Você pode usar as ferramentas Microsoft XPERF para percorrer a pilha e encontrar gargalos de garrafa. Você só pode ver os resultados no Vista / 7 (ou servidor 2008), mas você pode executar a ferramenta de perfil no XP. Porcos podem voar tem alguns artigos realmente bons em stackwalking com XPERF.

Usamos isso para encontrar gargalos em nossa velocidade de inicialização e, finalmente, tivemos uma prova para mostrar à empresa a remoção de algumas ferramentas que estavam recebendo muito disco IO na inicialização.

    
por 10.11.2010 / 19:44
0

Você precisaria usar um profiler. Você provavelmente também precisaria acessar o código-fonte do programa ou, pelo menos, depurar símbolos.

    
por 10.11.2010 / 19:44