Wie andere bereits betont haben, können wir aus diesem Screenshot ersehen, dass die CPU, die so hart arbeitet, ihre gesamte Zeit im Kernelmodus verbringt. (Die rote Farbe.)
Wenn Sie Powershell als Administrator ausführen, geben Sie Folgendes ein:
Get-Process | Select Name, PrivilegedProcessorTime | `
Sort-Object PrivilegedProcessorTime -Descending
Der Prozess oben in der Liste ist der Prozess, der momentan die meiste CPU-Zeit im Kernel-Modus belegt. Wenn dieser Prozess nicht "System" ist, haben Sie gerade herausgefunden, welcher Benutzermodus-Prozess diese CPU-Auslastung verursacht. Wenn der Prozess mit der höchsten privilegierten Prozessorzeit System ist, was ich vermute, ist es etwas komplizierter.
Öffnen Sie den Prozess-Explorer. Optional können Sie Ihren Symbolserver einrichten. Stellen Sie sicher, dass Sie mit voller UAC-Erhebung ausgeführt werden. Klicken Sie mit der rechten Maustaste auf den "Systemprozess" und gehen Sie zu "Eigenschaften". Gehen Sie dann zur Registerkarte Threads. Sortieren Sie die Threads nach CPU-Auslastung. Der Thread, der all diese Kernel-Modus-Arbeit verursacht, sollte hier sein. Wenn Sie sich das unter Startadresse aufgeführte Modul ansehen, sollte es Ihnen einen Hinweis darauf geben, womit die Arbeit zusammenhängt. Wenn es sich beispielsweise um NDIS.sys handelt, handelt es sich um einen Netzwerkschnittstellentreiber. Wenn Sie den Symbolserver einrichten, sollte der Name einer Funktion innerhalb eines Moduls angezeigt werden (es sei denn, das Modul gehört nicht zu Microsoft). Andernfalls wird nur ein numerischer Versatz von der Startadresse des Moduls angezeigt.
Verwenden Sie alternativ Xperf aus dem Windows Performance Toolkit, um Interrupts, DPCs usw. zu profilieren.
xperf -on PROC_THREAD+LOADER+DPC+INTERRUPT
und beenden Sie die Aufnahme mit xperf -d logfile.etl
Xperf ersetzt das alte Kernrate-Tool und kann Ihnen einige extrem detaillierte Daten liefern.
Wenn eine CPU im Kernel-Modus arbeitet, werden meistens Interrupt-Serviceroutinen ausgeführt. (ISRs) Wenn ein Interrupt auftritt, wird die Arbeit im Benutzermodus auf diesem Prozessor angehalten, und die CPU führt den für diesen Interrupt registrierten ISR aus. Wenn Sie feststellen, dass Ihre CPU übermäßig viel Zeit mit diesen Interrupts verbringt, weist dies normalerweise auf einen fehlerhaften Gerätetreiber hin, der aktualisiert werden muss.
Was für mich Bugs (kein Wortspiel beabsichtigt) zu diesem Szenario ist aber, dass es scheint , als ob alles , was Kernel - Thread, scheint dies tut , wird affinitize zu diesem einem Kern. Ich frage mich, warum der Dispatcher scheinbar nur die Ausführung des Threads auf diesem scheinbar willkürlichen Kern plant. Ich habe also das Gefühl, wir müssen herausfinden, wer diesen Gerätetreiber geschrieben hat, und ihnen zeigen, wie man DPCs mit Threads erstellt, und nicht explizit eine Affinität für Kernel-Threads festlegen usw.