L'écart entre le temps total du processeur ( \Processor (_Total)\% Processor Time ) utilisé et le total du temps CPU des processus ( Process(_Total)\% Processor Time \Process (_Total)\% Processor Time ) est probablement dû au temps passé à un IRQL élevé. Cela apparaît dans PerfMon comme "% Interrupt time" et "% DPC time".
Le temps d'interruption est le temps passé dans les routines de service d'interruption ou sérialisé avec elles ; ce code s'exécute à IRQL 3 et plus. Le temps de DPC est le temps passé dans les "routines DPC", ou dans le code sérialisé avec elles ; ce code s'exécute à l'IRQL 2. Les routines DPC sont principalement utilisées pour gérer le travail déclenché par une interruption mais qui ne doit pas nécessairement être effectué dans le même contexte de sérialisation que l'ISR.
La divergence existe parce que le temps CPU passé au niveau DPC ou supérieur est inclus dans le temps total du processeur, mais pas dans le temps CPU d'un thread ou d'un processus. En effet, ce code n'est pas nécessairement associé aux activités du thread actuel, et il n'y a donc aucun intérêt à "facturer" ce temps au thread actuel.
La légère différence entre \Process (_Total)\% Temps processeur et la somme de \Process (x)\% Processor Time pour tous les processus en cours est probablement dû à des problèmes de collecte de données dans PerfMon. Vous voyez, il n'y a pas d'objet de processus appelé "_Total" et aucun ensemble de compteurs d'utilisation du CPU pour aller avec ce concept. PerfMon calcule ce total en additionnant simplement les temps CPU de chaque processus existant au moment de la collecte. De même, le pourcentage de temps CPU de tous les processus n'est pas collecté au même instant. Il est donc possible que de légers "glissements" se produisent entre le total observé par PerfMon et le total que vous obtiendrez en additionnant tous les compteurs que vous voyez à l'écran.