Jak dotrzeć do głównej przyczyny wysokiej liczby odroczonych wywołań procedur?

41

Mam procesor dwurdzeniowy, a jeden z nich ma stale 100%. Przeglądanie w ProcessExplorer pokazuje mi, że są to odroczone wywołania procedur. Czytanie w sieci wydaje mi się dawać mnóstwo różnych odpowiedzi.

Czy można określić kilka kroków, aby zawęzić problem w moim przypadku?

Aktualizacja 1: FWIW, problem utrzymuje się nawet w trybie awaryjnym.

Aktualizacja 2: Odłączyłem wszystko, co mogłem, z tyłu komputera, a to kupiło mi 40% więcej wolnego procesora. Ja też pobraniu narzędzie RATTV3 , ale z jakiegoś powodu na moim komputerze to nie daje mi załamanie kierowca-by-kierowcy. Jest to dobry opis zarówno DPCLatencyChecker i RATTV3 tutaj .

Aktualizacja 3: , LatencyMon (zobacz moją odpowiedź poniżej) mówi mi, że to nvstor32.sys- co jest sterownik SATA NVIDII - z czasów około 5300 mikrosekund.

Aktualizacja 4: Fabuła gęstnieje, zastanawiając się, czy spróbować uruchomić dysk odzyskiwania (aby sprawdzić, czy to naprawdę sterowniki, a nie problem sprzętowy), zauważyłem, że odtwarzacz DVD / CD nie działa (tj. Nawet nie otwiera drzwi po naciśnięciu przycisku). Biorąc pod uwagę, że maszyna właśnie wróciła z wymiany płyty głównej, pomyślałem, że może zapomnieli ją podłączyć. Otworzyłem pudełko, wszystko wydawało się w porządku, ale odłączyłem je i ponownie włączyłem. Po ponownym uruchomieniu wszystko było w porządku - nigdy więcej DPC (najwyższy teraz 300µs)!

Aktualizacja 5: Następnego dnia problem z powrotem, odtwarzacz CD nie działa ponownie, nawet kursor w polu tekstowym hasła miga w zwolnionym tempie ... Próbowałem odłączyć wszystko, co mogłem wymyślić, a po ponownym uruchomieniu ponownie działał (jak w aktualizacji 2 ). Następnym razem spróbuję całkowicie odłączyć odtwarzacz CD ...

Aktualizacja 6: Właśnie zauważyłem, że w dzienniku zdarzeń systemowych pojawia nvstor32.syssię komunikat o błędzie Parity error detected in \Device\RaidPort0, a następnie ostrzeżenie o wysłaniu ponownej inicjalizacji. Teraz muszę tylko ustalić, który z nich RaidPort0jest ... (uwaga, nie mam konfiguracji RAID, to po prostu bogaty standardowy Acer). Aha, a moja konfiguracja Avast najwyraźniej została zabita, gdy przywróciłem system (lub jakkolwiek to się nazywa), ponieważ się nie uruchomi (błąd RPC), nie odinstaluje się (wystąpił błąd setiface).

Aktualizacja 7: Wreszcie nadszedł czas na ponowne uruchomienie z odłączonym dyskiem DVD. Nigdy więcej problemów z DPC! (wiele błędów strony, ale to na później). Następny krok: sprawdź, czy to kabel, czy odtwarzacz DVD.

Aktualizacja 8: Wypożyczyłem kabel SATA, uruchomiłem go, bez problemów. Odtwarzacz CD / DVD działa, nie ma problemów z DPC nvstor32.sys, brak zablokowanych procesorów. Szczęśliwy koniec ... prawie: wciąż mam problemy z Avastem, widoczne problemy z DPC storport.syspodczas uruchamiania (może normalne dla USB?) I wiele trudnych błędów strony. Ale będą one przedmiotem innych pytań.

Postscript: Niedawno zacząłem mieć ten sam problem i przy użyciu tej samej metody udało mi się wyśledzić go do pamięci USB (tej, której używałem w ReadyBoost).

Benjol
źródło
3
Naprawdę dobre narzędzia i pomoc tutaj ... msfn.org/board/topic/…
Moab

Odpowiedzi:

43

Oto historia, w jaki sposób znalazłem przyczynę mojego dużego opóźnienia DPC.


Mój system doświadczał kliknięć i trzasków podczas odtwarzania dźwięku. Wiedziałem, że to oznacza, że ​​coś w trybie jądra blokuje procesor. Moją pierwszą myślą było pogrzebanie w Eksploratorze procesów i sprawdzenie, czy coś jest nie na miejscu. Jedyną rzeczą, która zwróciła moją uwagę, była nadmierna ilość czasu poświęcanego na wykonywanie odroczonych wywołań procedur (DPC):

Zrzut ekranu z Process Explorer pokazujący wysoki czas DPC

Wiedziałem, że DPC są kodami uruchamianymi w sterowniku; Wyzwanie polegało na ustaleniu, który kierowca. Zwróciłem się do programu DPC Latency Checker , który pokazał mi, jak bardzo opóźnienie było:

zrzut ekranu narzędzia DPC Latency Checker

DPC Latency Checker sugeruje przeglądanie urządzeń w Menedżerze urządzeń i wyłączanie zbędnego sprzętu jeden po drugim (np. Karta sieciowa, karta dźwiękowa), mając nadzieję na wyodrębnienie błędnego sterownika. (Jeśli wyłączysz urządzenie, a opóźnienie DPC nagle spadnie: znalazłeś winowajcę!)

zrzut ekranu z wyłączaniem urządzeń

Niestety po wyłączeniu wszystkiego, co mogłem (chociaż nadal mogę korzystać z komputera - nie wyłączaj dysku twardego, karty graficznej, myszy ani koncentratora USB, do którego podłączona jest mysz!) Opóźnienie było nadal wysokie. Następnie zwróciłem się do Windows Performance Toolkit (część zestawu Windows SDK ) i doskonałego posta na blogu Petera Weilanda, „Pomiar czasu DPC” . Po zainstalowaniu pakietu Windows Performance Toolkit:

Zrzut ekranu instalatora zestawu Windows SDK z zaznaczonym zestawem Windows Performance Toolkit

Otworzyłem wiersz polecenia z podwyższonym poziomem uprawnień i uruchomiłem:

>xperf -on Latency

Uwaga : Latency Grupa to predefiniowany zestaw zdarzeń, które można prześledzić od dostawcy grupy jądra :

>xperf -providers kg
   Base           : PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+PROFILE+MEMINFO
   Diag           : PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+DPC+INTERRUPT+CSWITCH+PERF_COUNTER+COMPACT_CSWITCH
   DiagEasy       : PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+DPC+INTERRUPT+CSWITCH+PERF_COUNTER
   Latency        : PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+DPC+INTERRUPT+CSWITCH+PROFILE
   ...

W tym przypadku Latencyodpowiada flagom jądra:

  • PROC_THREAD Tworzenie i usuwanie procesu i wątku
  • ŁADOWARKA Jądro i tryb użytkownika Zdarzenia ładowania / rozładowania obrazu
  • PROFIL CPU Przykładowy profil
  • Przełącznik kontekstowy CSWITCH
  • Zdarzenia DPC DPC
  • INTERRUPT Przerwanie zdarzeń
  • DISK_IO Dysk I / O
  • HARD_FAULTS Błędy stron

Po minucie działania zatrzymałem śledzenie i zapisałem w pliku:

C:\Users\Ian\Desktop\xperf -d thingy1.etl

A potem przejrzałem wyniki śledzenia za pomocą polecenia:

C:\Users\Ian\Desktop\xperf thingy1.etl

Spowoduje to załadowanie graficznego analizatora wydajności systemu Windows . Klikając prawym przyciskiem myszy wykres zużycia procesora DPC , wybrałem tabelę podsumowań . Pokazuje podział czasu spędzonego w DPC według kierowcy:

zrzut ekranu wyjścia XPerf

Od razu widzę, że jeden sterownik ( tsvp.sys) pobiera średnio 2,8 ms na wykonanie DPC, czyli o rząd wielkości wolniej niż jakikolwiek inny sterownik:

zrzut ekranu

Googling tsvp.sysdał mi odpowiedź: CommView , który niedawno zainstalowałem.

Pytanie brzmi teraz, jak wyłączyć ten sterownik. Za pomocą AutoRuns widzę, że jest zainstalowany jako usługa sterownika:

zrzut ekranu z autorunami

Za pomocą Menedżera urządzeń mogę wyłączyć usługę udostępniającą ten sterownik. Najpierw musisz pokazać ukryte urządzenia , a następnie rozwinąć Non-Plug and Play Driverswęzeł:

zrzut ekranu menedżera urządzeń

Wreszcie mogłem zatrzymać usługę sterownika i zmieniłem tryb uruchamiania z System(co oznacza, że ​​sterownik jest niezbędną częścią systemu Windows, a Windows nie może się bez niego uruchomić) na Demand(co oznacza, że ​​mogę uruchomić sterownik, kiedy chcę):

zrzut ekranu menedżera urządzeń

Natychmiastowe zatrzymanie usługi sterownika naprawiło moje opóźnienie DPC:

zrzut ekranu

Mogę całkowicie odinstalować CommView, ale na razie rozwiązałem przypadek wysokiego opóźnienia DPC.


Aktualizacja : Począwszy od systemu Windows 8 w Menedżerze urządzeń nie widać już sterowników innych niż Plug and Play :

Uwaga Począwszy od systemu Windows 8 i Windows Server 2012 Menedżer Plug-and-Play nie tworzy już reprezentacji urządzeń dla urządzeń innych niż PnP (starsze). Dlatego nie ma takich urządzeń do przeglądania w Menedżerze urządzeń. Aby dołączyć ukryte urządzenia do ekranu Menedżera urządzeń, kliknij Wyświetl i wybierz Pokaż ukryte urządzenia.

Microsoft odebrał tę funkcję i zastąpił ją niczym. Dobra robota.

W typowej wściekłości, niektóre nieprzydatne odpowiedzi :

  • Menedżer urządzeń nigdy nie pokazywał sterowników innych niż pnp
  • Dlaczego tego potrzebujesz?

Na szczęście NirSoft stworzył zamiennik. ServiWin umożliwia wyświetlanie, zatrzymywanie i uruchamianie wszystkich usług (nawet tych, które Microsoft postanowił, że administratorzy powinni widzieć):

zrzut ekranu ServiWin

Ian Boyd
źródło
13

STATUS POSTĘPU

Najlepszym narzędziem, jakie do tej pory znalazłem , jest LatencyMon , który zasadniczo robi wszystko, co robią poprzednie dwa narzędzia, bez myślenia. Strona pobierania prosi o rejestrację przez e-mail - ale nic mi się nie stało, kiedy to zrobiłem - ale możesz mimo to przewinąć do dołu strony, aby pobrać.

alternatywny tekst

Benjol
źródło
6

W moim przypadku użyłem LatencyMon (z odpowiedzi Benjola) i odkryłem, że sterownik zamrażający życie, wszechświat i wszystko było (także), storport.sysco jest sterownikiem Microsoft dla „ autobusów o wysokiej wydajności ”. Potwierdziło to moje podejrzenie, że problem dotyczy IO.

Poszedłem też dalej i spojrzałem na moją przeglądarkę zdarzeń Windows 7 , folder Dzienniki systemu Windows -> Aplikacja , i znalazłem kilka partii błędów z Volume Shadow Copy (VSS) co 30 minut do 2 godzin. Są to takie szczegóły:

Volume Shadow Copy Service error: Error calling a routine on the Shadow Copy Provider {b5946137-7b9f-4925-af80-51abd60b20d5}. Routine returned E_INVALIDARG. Routine details GetSnapshot({00000000-0000-0000-0000-000000000000},000000000023C850). 

Operation:
   Get Shadow Copy Properties

Context:
   Execution Context: Coordinator

Potem zacząłem badać, co to do cholery jest VSS i do czego służy. Podszedłem kilka - stron - około - rozwiązywania problemów VSS . Przeglądając te wszystkie, miałem jednego podejrzanego: moje oprogramowanie do tworzenia kopii zapasowych CrashPlan .

Podążając tym tropem, szybko znalazłem stronę powiązaną z błędami VSS . Postępując zgodnie z instrukcjami tam, aby wyłączyć tworzenie kopii zapasowych otwartych plików, które używa VSS, zawieszenie, wysokie użycie procesora jądra itp. Zostały całkowicie wymarłe. I nie zrozum mnie źle: CrashPlan jest świetny! Po prostu ta funkcja nie działała na moim komputerze.

BTW, ta strona tutaj była JEDNAKĄ, która dała mi wstępny trop, który pomógł mi znaleźć podstawową przyczynę moich problemów. Dziękuję bardzo @Benjol i wszystkim innym, którzy odpowiedzieli wcześniej! Mam nadzieję, że moja odpowiedź pomoże również innym ...

Chuim
źródło
Dziękuję Chuimowi, że być może mój dokładny problem, pracowałem nad rozwiązaniem tego problemu od tygodni i w końcu zawęziłem go do VSS i storport.sys, ale nie byłem w stanie znaleźć głównej przyczyny (CrashPlan tworzy kopię zapasową otwartych plików) aż Twój post. Nie jestem jeszcze pewien, czy to naprawi, ale to jak dotąd najlepsza szansa na wysokie opóźnienia DPC!
Matt Palmerlee
Właśnie sprawdziłem, czy poprawianie ustawień planu awarii, aby nie tworzyło kopii zapasowych otwartych plików, działało! Dzięki wielkie! Teraz mogę grać w Skyrim bez obrzydliwych przerw dźwiękowych i błędów!
Matt Palmerlee,
Chciałbym tylko dodać, że po nowym wydaniu na PC miałem problem z zacinaniem się dźwięku i odkryłem, że winowajcą był również Crashplan. Znalazłem tę odpowiedź za pośrednictwem computercabal.com/2012/07/debugging-audio-skipping-lagging.html . Dziękujemy wszystkim za tyle pracy, aby to wyśledzić!
chucknelson
4

Prawdopodobnie istnieje sterownik urządzenia, który utrzymuje Twój system w stanie zajętym. Jednym ze sposobów na analizę tego jest uruchomienie sprawdzania opóźnień DPC . Następnie wyłączaj po jednym sterowniku i sprawdź, czy ładunek DPC spadnie. (Działa także eksplorator procesów).

Możesz wyłączyć sterowniki urządzeń w Zarządzaniu komputerem -> Menedżer urządzeń.

Andomar
źródło
dzięki, przeczytam ten link. Przepraszam za moją niewiedzę, ale które urządzenia mogę bezpiecznie wyłączyć bez „odcinania gałęzi” (tj. Klawiatury, ekranu, myszy itp.)?
Benjol,
1
Nie jestem pewien, moimi głównymi podejrzanymi będą usługi inne niż Microsoft. Po prostu spróbuję, jeśli coś pójdzie nie tak, możesz uruchomić system w trybie awaryjnym i ponownie włączyć sterowniki
Andomar
OK, widzę, że ta strona zawiera listę sterowników, których należy unikać. Mam nadzieję, że to nie jeden z nich.
Benjol,
Wcześniej myślę, że spróbuję uruchomić komputer z dysku odzyskiwania - jeśli nadal będę mieć problem, prawdopodobnie będzie to problem sprzętowy?
Benjol
1
+1 dla sprawdzania opóźnień. Z mojego doświadczenia wynika, że ​​najczęstszym winowajcą jest sterownik karty sieci bezprzewodowej.
Shinrai
3

Wydaje mi się, że powinienem tutaj dodać swoją odpowiedź, ponieważ problem ten jest trudny do rozwiązania i nie zawsze wynika to ze złych sterowników lub konfliktów IRQ.

Miałem duże opóźnienia RPC, które powodowały trzaski / trzaski w mojej pro-sumerowej karcie dźwiękowej USB. Narzędzia opisane w zaakceptowanej odpowiedzi nie były pomocne w identyfikacji konkretnego sterownika, który był przyczyną problemu. Opóźnienie występowało w wielu procesach: HAL, USBPORT.SYS i jądro systemu Windows. Zagłębianie się w te procesy nie ujawniło oczywistego winowajcy.

W moim przypadku okazało się, że problem dotyczy niższego poziomu i jest specyficzny dla płyt głównych GigaByte z niektórymi chipsetami i wersjami BIOS-u. Rozwiązaniem było wyłączenie Intel SpeedStep i wszystkich innych funkcji specyficznych dla płyty głównej, które dostosowywały szybkość i napięcie procesora w locie. Po wyłączeniu tych opcji moje opóźnienie RPC zostało natychmiast naprawione.

Alex
źródło
1

Zacząłem widzieć ten błąd po usunięciu błędu IRQ w moim kontrolerze Ethernet nVidia 10/100/1000, który pojawił się podczas aktualizacji mojej karty graficznej do GeForce GTX 550 Ti.

Wydaje się, że po aktualizacji do nowych sterowników GeForce 295.73, a następnie rozwiązaniu konfliktu przerwań, usunąłem, uszkodziłem lub odinstalowałem istniejące sterowniki kontrolera nForce SATA / RAID. Nie używam RAID, błąd nadal występuje i od czasu do czasu zablokowałem Vista Ultimate 64-bit.

Po wypróbowaniu wszystkich sugestii dotyczących rozwiązywania problemów, które znalazłem w Internecie, pojawiło się proste rozwiązanie ... Uaktualniłem do kontrolera nForce SATA / RAID 15.58, ale zostawiłem inne sterowniki nForce same.

Naprawiłem to, a teraz rozwiązałem wszystkie moje konflikty ze sterownikami. Mam nadzieję, że to również pomoże.

NorthAlabama
źródło