Comme d'autres l'ont déjà souligné, nous pouvons voir sur cette capture d'écran que le processeur qui travaille si dur passe tout son temps en mode noyau. (La couleur rouge.)
Pour exécuter Powershell en tant qu'administrateur, tapez:
Get-Process | Select Name, PrivilegedProcessorTime | `
Sort-Object PrivilegedProcessorTime -Descending
Le processus en haut de la liste est le processus qui utilise actuellement le plus de temps CPU en mode noyau. Si ce processus n'est pas "Système", alors vous venez de découvrir quel processus en mode utilisateur est à l'origine de cette utilisation du processeur. Si le processus avec le temps de processeur privilégié le plus élevé est le système, ce que je soupçonne, c'est un peu plus compliqué.
Ouvrez Process Explorer. Facultativement, configurez votre serveur de symboles. Assurez-vous que vous exécutez avec une élévation UAC complète. Cliquez avec le bouton droit sur le "processus" du système et accédez à Propriétés. Allez ensuite dans l'onglet Threads. Triez les threads par utilisation du processeur. Le thread qui cause tout ce travail en mode noyau devrait être ici. Si vous regardez le module répertorié sous Adresse de départ, il devrait vous donner une idée de ce à quoi le travail est lié. Si c'est NDIS.sys, par exemple, c'est un pilote d'interface réseau. Si vous configurez le serveur de symboles, vous devriez voir le nom d'une fonction dans un module (à moins que le module ne soit pas Microsoft), sinon vous verrez juste un décalage numérique par rapport à l'adresse de début du module.
Vous pouvez également utiliser Xperf à partir de Windows Performance Toolkit pour profiler les interruptions, les DPC, etc.
xperf -on PROC_THREAD+LOADER+DPC+INTERRUPT
et arrêter l'enregistrement avec xperf -d logfile.etl
Xperf remplace l'ancien outil Kernrate et peut vous fournir des données extrêmement détaillées.
Lorsqu'un processeur fonctionne en mode noyau, il exécute principalement des routines de service d'interruption. (ISR) Lorsqu'une interruption se produit, le travail en mode utilisateur est suspendu sur ce processeur et le CPU exécute l'ISR enregistré pour cette interruption. Si vous trouvez que votre processeur passe trop de temps sur ces interruptions, cela indique généralement un pilote de périphérique défectueux qui doit être mis à jour.
Ce qui me dérange (sans jeu de mots) dans ce scénario, c'est qu'il semble que le thread du noyau qui fait cela semble être affinité à ce noyau. Je me demande pourquoi le répartiteur semble planifier uniquement le thread pour qu'il s'exécute sur ce noyau apparemment arbitraire. J'ai donc le sentiment que nous devons trouver la personne qui a écrit ce pilote de périphérique et leur montrer comment faire des DPC threadés, et non pas définir explicitement une affinité sur les threads du noyau, etc.