Respostas:
Depois de pesquisar na documentação (com base nas outras respostas aqui), esse é o processo que acabei usando:
Capturar o log ETW do problema
A maneira mais fácil de fazer isso é usando o Windows Performance Recorder . Não tenho certeza de quando ele apareceu pela primeira vez, mas parece estar embutido nas versões recentes do Windows. Defina o perfil para CPU usage
.
ou, usando um prompt de comando elevado, navegue até a pasta que o contém e use a ferramenta de linha de comando xperf:
xperf -on base+interrupt+dpc
Observe que você precisará fechar o Process Monitor ou qualquer outro aplicativo que use ETW ou obterá o seguinte erro: xperf: error: NT Kernel Logger: Cannot create a file when that file already exists. (0xb7).
Parar rastreamento / salvar o log
xperf -d interrupt_trace.etl
Abra o rastreamento em Windows Performance Analyzer
(parte do Windows Performance Toolkit); alguns lugares mencionam o uso xperfview
.
Expanda Computation
-> CPU Usage (Sampled)
-> DPC and ISR Usage by Module, Stack
, clique com o botão direito eadd graph to analysis view
Isso apontou diretamente para o motorista em questão. Nesse caso, o HDAudBus.sys está usando uma constante de 10,82% da minha CPU através de interrupções, que é exatamente o que o Process Explorer estava me mostrando.
Se você pode lidar com ferramentas de sistema de baixo nível;
Windows Performance Analyzer (WPA)
O Windows Performance Analyzer (WPA) é um conjunto de ferramentas de monitoramento de desempenho usadas para produzir perfis de desempenho detalhados dos sistemas operacionais e aplicativos Microsoft Windows.
Depois de aprender a usar o xperf; Confira;
A ação DPC / ISR produz um relatório de texto que resume as várias métricas relacionadas aos DPCs e ISRs. O uso para esta ação é:
Copiar código -a dpcisr [-dpc -isr -summary -interval [n] -bucket [n] -range T1 T2]
Opção
Descrição
dpc
Mostrar estatísticas apenas para DPC
isr
Mostrar estatísticas apenas para ISR
resumo
Mostrar relatório resumido
intervalo [dt]
Mostrar relatório de uso para intervalos de dt, o padrão é 1 segundo
balde [dt]
Mostrar histograma para intervalos de dt, o padrão é 2 segundos
intervalo T1 T2
Mostrar atrasos entre T1 e T2
If no data type is specified, default is to show report for both DPC
e ISR. Se nenhum tipo de relatório for especificado, o padrão é imprimir todos os três tipos de relatório.
Aqui está o melhor artigo que encontrei sobre como fazer isso, com tutoriais, capturas de tela e links para download das ferramentas relevantes:
http://www.msfn.org/board/topic/140263-how-to-get-the-cause-of-high-cpu-usage-by-dpc-interrupt/
Dê uma olhada no Windows Process Explorer:
http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx
Isso deve ajudar.
Duas ótimas ferramentas são o LatencyMon e o DPC Latency Checker .