Jak już zauważyli inni, z tego zrzutu ekranu widać, że tak ciężko pracujący procesor spędza cały czas w trybie jądra. (Kolor czerwony.)
Uruchamiając PowerShell jako administrator, wpisz:
Get-Process | Select Name, PrivilegedProcessorTime | `
Sort-Object PrivilegedProcessorTime -Descending
Proces znajdujący się na górze listy jest obecnie procesem wykorzystującym obecnie najwięcej czasu procesora w trybie jądra. Jeśli ten proces nie jest „Systemowy”, właśnie zorientowałeś się, jaki proces trybu użytkownika powoduje użycie tego procesora. Jeśli proces z najwyższym uprzywilejowanym czasem procesora to System, co podejrzewam, że jest, to jest to trochę bardziej skomplikowane.
Otwórz Process Explorer. Opcjonalnie skonfiguruj serwer symboli. Upewnij się, że korzystasz z pełnej wysokości UAC. Kliknij prawym przyciskiem myszy „proces” systemu i przejdź do Właściwości. Następnie przejdź do zakładki Wątki. Sortuj wątki według zużycia procesora. Wątek, który powoduje cały ten tryb jądra powinien być tutaj. Jeśli spojrzysz na moduł wymieniony w polu Adres początkowy, powinien on dać ci wskazówkę, z czym praca jest związana. Jeśli na przykład jest to NDIS.sys, jest to sterownik interfejsu sieciowego. Jeśli skonfigurujesz serwer symboli, powinieneś zobaczyć nazwę funkcji w module (chyba że moduł jest inny niż Microsoft), w przeciwnym razie zobaczysz tylko numeryczne przesunięcie od adresu początkowego modułu.
Alternatywnie, użyj Xperf z Windows Performance Toolkit do profilowania przerwań, DPC itp.
xperf -on PROC_THREAD+LOADER+DPC+INTERRUPT
i zatrzymaj nagrywanie za pomocą xperf -d logfile.etl
Xperf zastępuje stare narzędzie Kernrate i może dostarczyć ci bardzo szczegółowe dane.
Gdy procesor pracuje w trybie jądra, przeważnie wykonuje procedury obsługi przerwań. (ISR) Gdy wystąpi przerwanie, praca w trybie użytkownika jest zawieszona na tym procesorze, a CPU uruchamia ISR zarejestrowany na tym przerwaniu. Jeśli zauważysz, że Twój procesor spędza nadmiernie dużo czasu na tych przerwaniach, zwykle oznacza to, że wadliwy sterownik urządzenia wymaga aktualizacji.
Co mnie jednak w tym scenariuszu wkurza (bez zamierzonej gry słów) to to, że wydaje się, że cokolwiek wątek jądra, który to robi, wydaje się być afinitowany do tego jednego rdzenia. Zastanawiam się, dlaczego dyspozytor wydaje się jedynie planować uruchamianie wątku na tym z pozoru arbitralnym rdzeniu. Mam więc wrażenie, że musimy znaleźć tego, kto napisał ten sterownik urządzenia i pokazać im, jak robić wątkowe DPC, a nie wyraźnie określać powinowactwo do wątków jądra itp.