Perfmon contadores de uso da CPU

0

Estou tentando monitorar uma instalação e quais processos usam mais a CPU, para ver se estou colocando muita carga nela.

Atualmente, estou monitorando a instalação com perfmon , usando os contadores

  • \Processor(_Total)\% Processor Time (uso geral)
  • \Process(*)\% Processor Time (uso por processo).

O que me desencoraja é que, quando eu envio os logs para CSV,

  • \Processor(_Total)\% Processor Time ! = Process(_Total)\% Processor Time
  • \Process(_Total)\% Processor Time ! = a soma de \Process(x)\% Processor Time para todos os processos em execução ( x )

Um gráfico de comparação rápida feito com o Excel:

O que estou fazendo de errado?

    
por Bowi 15.03.2018 / 13:48

1 resposta

1

A discrepância entre o tempo total do processador (\ Processor (_Total) \% Processor Time) usado e o total dos processos da CPU (Process (_Total) \% Processor Time \ Process (_Total) \% Processor Time) é provavelmente devido ao tempo gasto em IRQL elevado. Isso aparece no PerfMon como "% Interrupt time" e "% DPC time".

O tempo de interrupção é o tempo gasto em rotinas de serviço de interrupção ou serializado com elas; esse código é executado no IRQL 3 e acima. Tempo DPC é o tempo gasto em "rotinas DPC", ou código serializado com elas; Esse código é executado no IRQL 2. Rotinas DPC são usadas principalmente para manipular trabalho que é acionado por uma interrupção, mas não precisa ser feito no mesmo contexto de serialização como o ISR.

A discrepância existe porque o tempo de CPU gasto no nível DPC ou superior é incluído no tempo total do processador, mas não no tempo de CPU de qualquer thread ou processo. Isso ocorre porque esse código não está necessariamente associado às atividades do encadeamento atual, portanto, não faz sentido "carregar" o encadeamento atual para esse período.

A ligeira diferença entre \ Process (_Total) \% Processor Time e a soma de \ Process (x) \% Processor Time para todos os processos em execução é provavelmente devido a problemas de coleta de dados no PerfMon. Você vê, não há nenhum objeto de processo chamado "_Total" e nenhum conjunto de contadores de uso da CPU para acompanhar esse conceito. O PerfMon calcula esse total simplesmente adicionando os tempos de CPU para cada processo que existe no momento da coleta. Da mesma forma, a porcentagem de tempo de CPU de todos os processos não é coletada no mesmo instante. Portanto, é possível que pequenas "derrapagens" ocorram entre o total observado pelo PerfMon e o total que você obterá quando somar todos os contadores exibidos no visor.

    
por 15.03.2018 / 15:54