Come si arriva alla causa principale di chiamate di procedura differite elevate?


41

Ho un processore Dual core e uno dei due è costantemente al 100%. Guardando ProcessExplorer mi mostra che si tratta di chiamate di procedura differite. Leggere in rete sembra darmi tonnellate di risposte diverse.

È possibile stabilire un paio di passaggi per cercare di restringere il problema nel mio caso?

Aggiornamento 1: FWIW, il problema persiste anche in modalità provvisoria.

Aggiornamento 2: ho scollegato tutto ciò che potevo dal retro del PC e questo mi ha permesso di acquistare il 40% di processore gratuito in più. Ho anche scaricato lo strumento RATTV3 , ma per qualche ragione sulla mia macchina non mi sta dando un guasto driver per driver. C'è una buona descrizione sia di DPCLatencyChecker che di RATTV3 qui .

Aggiornamento 3: , LatencyMon (vedi la mia risposta qui sotto) mi dice che è nvstor32.sys- che è il driver SATA di NVidia - con tempi di circa 5300 ms.

Aggiornamento 4: La trama si infittisce, mentre medita se provare ad avviare un disco di ripristino (per vedere se si tratta davvero di driver e non un problema hardware), ho notato che il lettore DVD / CD non funzionava (cioè nemmeno aprendo il porta quando premo il pulsante). Dato che la macchina è appena tornata dalla sostituzione della scheda madre, ho pensato che forse si fossero dimenticati di collegarla. Ho aperto la scatola, tutto sembrava a posto, ma l'ho scollegato e ricollegato. Al riavvio, tutto andava bene, non più DPC (il più alto ora 300µs)!

Aggiornamento 5: il giorno seguente, problema indietro, il lettore CD non funziona di nuovo, anche il cursore nella casella di testo della password lampeggia al rallentatore ... Ho provato a scollegare tutto ciò che mi veniva in mente, e al secondo riavvio, ha funzionato di nuovo (come in Update2 ). La prossima volta proverò a scollegare completamente il lettore CD ...

Aggiornamento 6: Ho appena notato che il registro degli eventi di sistema riporta nvstor32.sysun errore Parity error detected in \Device\RaidPort0, quindi un avviso sull'invio di una reinizializzazione. Ora non mi resta che capire quale RaidPort0sia ... (nota, non ho un setup RAID, è solo uno standard palude Acer). Oh, e la mia configurazione di Avast apparentemente è stata uccisa quando ho fatto un rollback del sistema (o come si chiama), perché non si avvia (errore RPC), non si disinstalla (si è verificato un errore setiface).

Aggiornamento 7: Finalmente ho avuto il tempo di riavviare con il DVD scollegato. Niente più problemi DPC! (molti errori di pagina però, ma è per dopo). Passaggio successivo: capire se si tratta del cavo o del lettore DVD.

Aggiornamento 8: preso in prestito un cavo SATA, avviato con esso, nessun problema. Il lettore CD / DVD funziona, nessun problema DPC con nvstor32.sys, nessun processore bloccato. Lieto fine ... quasi: ho ancora problemi con Avast, evidenti problemi DPC storport.sysall'avvio (forse normale per USB?) E molti errori di pagina. Ma quelli saranno oggetto di altre domande.

Postscript: Di recente ho iniziato ad avere lo stesso problema e, usando lo stesso metodo, sono riuscito a rintracciarlo su una chiavetta USB (quella che stavo usando per ReadyBoost) che veniva girata.


3
Strumenti davvero utili e aiuto qui ... msfn.org/board/topic/…
Moab

Risposte:


43

Ecco la storia di come ho trovato la causa della mia elevata latenza DPC.


Il mio sistema ha riscontrato clic e pop durante la riproduzione audio. Sapevo che questo significava che qualcosa in modalità kernel stava eseguendo il hogging della CPU. Il mio primo pensiero è stato quello di dare un'occhiata a Process Explorer e vedere se qualcosa sembrava fuori posto. L'unica cosa che ha attirato la mia attenzione è stata l'eccessiva quantità di tempo trascorso nell'esecuzione di chiamate differite di procedura (DPC):

Schermata di Process Explorer che mostra un tempo DPC elevato

Sapevo che i DPC sono codici eseguiti all'interno di un driver; la sfida era capire quale autista. Mi sono rivolto a DPC Latency Checker , che mi ha mostrato quanto fosse grave la latenza:

screenshot di DPC Latency Checker

DPC Latency Checker suggerisce di esaminare i dispositivi in Gestione dispositivi e di disabilitare uno a uno l'hardware non essenziale (ad es. Scheda di rete, scheda audio), sperando di isolare il driver difettoso. (Se disabiliti un dispositivo e la latenza DPC diminuisce improvvisamente: hai trovato il tuo colpevole!)

screenshot di dispositivi disabilitanti

Sfortunatamente, dopo aver disabilitato tutto ciò che potevo (pur essendo ancora in grado di utilizzare il computer - non disabilitare il disco rigido, la scheda video, il mouse o l'hub USB a cui è collegato il mouse!), La latenza era ancora elevata. Successivamente mi sono rivolto a Windows Performance Toolkit (parte di Windows SDK ) e un eccellente post sul blog di Peter Weiland, "Misurare il tempo DPC" . Dopo aver installato Windows Performance Toolkit:

Schermata del programma di installazione di Windows SDK, con Windows Performance Toolkit selezionato

Ho aperto un prompt dei comandi elevato ed eseguito:

>xperf -on Latency

Nota : il Latency gruppo è un insieme predefinito di eventi che possono essere tracciati dal provider del gruppo kernel :

>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
   ...

In questo caso Latencycorrisponde alle bandiere del kernel:

  • PROC_THREAD Creazione e eliminazione di processo e thread
  • LOADER Eventi di caricamento / scaricamento di immagini in modalità kernel e utente
  • PROFILO CPU Esempio di profilo
  • Switch di contesto CSWITCH
  • Eventi DPC DPC
  • INTERRUZIONE Eventi di interruzione
  • DISK_IO I / O su disco
  • HARD_FAULTS Difetti di pagina difficile

Dopo averlo lasciato funzionare per un minuto, ho interrotto la traccia e l'ho fatto salvare in un file:

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

E poi ho visualizzato i risultati della traccia con il comando:

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

Questo carica l' analizzatore grafico delle prestazioni di Windows . Facendo clic con il tasto destro sul grafico Utilizzo CPU DPC , ho selezionato la tabella di riepilogo . Ciò mostra una suddivisione del tempo trascorso in DPC dal conducente:

screenshot dell'output di XPerf

tsvp.sysImmediatamente posso vedere un driver ( ) prendere una media di 2,8 ms per esecuzione DPC, che è un ordine di grandezza più lento di qualsiasi altro driver:

immagine dello schermo

Google tsvp.sysmi ha dato la risposta: CommView , che avevo installato di recente.

La domanda ora è come disabilitare questo driver. Utilizzando AutoRuns , posso vedere che è installato come servizio driver:

screenshot di autoruns

Utilizzando Device Manager, posso disabilitare il servizio che ospita questo driver. Per prima cosa devi mostrare i dispositivi nascosti , quindi espandere il Non-Plug and Play Driversnodo:

screenshot di Gestione dispositivi

Finalmente ho potuto interrompere il servizio driver e ho cambiato la sua modalità di avvio da System(il che significa che il driver è una parte essenziale di Windows e Windows non può avviarsi senza di esso), a Demand(che significa che posso avviare il driver quando voglio):

screenshot di Gestione dispositivi

L'arresto del servizio driver ha risolto immediatamente la mia latenza DPC:

immagine dello schermo

Potrei disinstallare completamente CommView o meno, ma per ora ho risolto il caso dell'alta latenza DPC.


Aggiornamento : a partire da Windows 8 non è più possibile visualizzare i driver non plug-and-play in Gestione dispositivi :

Nota A partire da Windows 8 e Windows Server 2012, Plug-and-Play Manager non crea più rappresentazioni di dispositivi per dispositivi non PnP (legacy). Pertanto non ci sono tali dispositivi da visualizzare in Gestione dispositivi. Per includere i dispositivi nascosti nella schermata Gestione dispositivi, fare clic su Visualizza e selezionare Mostra dispositivi nascosti.

Microsoft ha tolto la funzionalità e sostituirla con nulla. Buon lavoro.

Nella tipica rabbia da nerd, alcune risposte inutili :

  • Gestione dispositivi non ha mai mostrato driver non pnp
  • Perchè ti serve?

Fortunatamente, NirSoft ha creato un sostituto. ServiWin ti consente di vedere, arrestare e avviare tutti i servizi (anche quelli che Microsoft ha deciso che gli amministratori dovrebbero poter vedere):

screenshot di ServiWin


13

RELAZIONE SUL PROGRESSO

Lo strumento migliore che ho trovato finora è LatencyMon , che sostanzialmente fa tutto ciò che fanno i due strumenti precedenti, senza farti pensare. La pagina di download ti chiede di registrarti via e-mail - ma non è successo nulla per me quando l'ho fatto - ma puoi comunque scorrere fino alla fine della pagina per scaricare.

testo alternativo


6

Nel mio caso ho usato LatencyMon (dalla risposta di Benjol) e ho scoperto che il driver congelava la vita, l'universo e tutto ciò che era (anche) storport.sysun driver Microsoft per " bus ad alte prestazioni ". Ciò ha confermato il mio sospetto che il problema fosse correlato all'IO.

Sono andato anche avanti e ho guardato il mio Visualizzatore eventi di Windows 7 , cartella Registri di Windows -> Applicazione , e ho trovato diversi lotti di errori da Volume Shadow Copy (VSS) che si verificano ogni 30 minuti a 2 ore. I dettagli erano così:

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

Ho quindi iniziato a indagare su cosa diavolo è VSS ea cosa serve. Sono andato diverse - pagine - circa - VSS la risoluzione dei problemi . Passando attraverso tutti quelli che avevo un grande sospettato: il mio software di backup CrashPlan .

Seguendo questo indizio, ho rapidamente trovato una pagina relativa ad errori VSS . Seguendo le istruzioni lì per disabilitare il backup dei file aperti, che utilizza VSS, i blocchi, l'utilizzo elevato della CPU del kernel, ecc. Sono stati completamente estinti. E non fraintendetemi: CrashPlan è fantastico! Solo questa funzione non funzionava sulla mia macchina.

A proposito, questa pagina proprio qui è stata quella che mi ha dato la guida iniziale che mi ha aiutato a trovare la causa principale dei miei problemi. Grazie mille @Benjol e tutti gli altri che hanno risposto in precedenza! Spero che la mia risposta aiuti anche gli altri ...


Grazie a Chuim, forse anche il mio problema esatto, ho lavorato per risolvere questo problema per settimane e alla fine l'ho ridotto a VSS e storport.sys ma non sono riuscito a trovare la causa principale (CrashPlan eseguendo il backup dei file aperti) fino a quando il tuo post. Non sono ancora sicuro se questo lo risolverà, ma è il miglior vantaggio che ho avuto finora per le alte latenze DPC!
Matt Palmerlee,

Ho appena verificato che ha funzionato modificando le impostazioni del crashplan per non eseguire il backup dei file aperti! Grazie mille! Ora posso giocare a Skyrim senza orribili pause audio e glitch!
Matt Palmerlee,

Voglio solo aggiungere che stavo sperimentando la balbuzie audio dopo una nuova build per PC e ho scoperto che anche Crashplan era il colpevole. Ho trovato questa risposta tramite computercabal.com/2012/07/debugging-audio-skipping-lagging.html . Grazie a tutti per aver fatto così tanto lavoro per rintracciarlo!
Chucknelson,

4

Probabilmente c'è un driver di dispositivo che tiene occupato il sistema. Un modo per analizzarlo è eseguire il correttore di latenza DPC . Quindi disabilitare un driver alla volta e vedere se il carico DPC diminuisce. (Process Explorer funziona anche.)

È possibile disabilitare i driver di dispositivo in Gestione computer -> Gestione dispositivi.


grazie, ho intenzione di leggere su quel link. Scusa la mia ignoranza, ma quali dispositivi posso tranquillamente disabilitare senza "tagliare il ramo" (cioè tastiera, schermo, mouse ecc.)?
Benjol,

1
Non sono sicuro, i miei principali sospettati sarebbero servizi non Microsoft. Vorrei solo provare, se va storto puoi avviare in modalità provvisoria e riattivare i driver
Andomar

OK, vedo che la pagina include un elenco di driver da evitare. Devo sperare che non sia uno di loro.
Benjol,

Prima di allora, penso che proverò ad avviarlo da un disco di ripristino: se avessi ancora il problema, è più probabile che sia una cosa hardware?
Benjol,

1
+1 per il controllo della latenza. Nella mia esperienza, il colpevole più comune qui è il driver per una scheda di rete wireless.
Shinrai,

3

Sento che dovrei aggiungere la mia risposta qui perché questo problema è difficile da risolvere e non sempre dovuto a driver difettosi o conflitti IRQ.

Avevo un'elevata latenza RPC che causava scoppi / scoppi nella mia scheda audio USB professionale. Gli strumenti descritti nella risposta accettata non sono stati utili per identificare un determinato driver che stava causando un problema. La latenza si stava verificando attraverso una serie di processi: HAL, USBPORT.SYS e il kernel di Windows. Scavare più a fondo in questi processi non ha rivelato un colpevole evidente.

Nel mio caso è emerso che il problema era di livello inferiore e specifico per le schede madri GigaByte con alcuni chipset e revisioni del BIOS. La soluzione era disabilitare Intel SpeedStep e tutte le altre caratteristiche specifiche della scheda madre che regolassero al volo la velocità e la tensione della CPU. Una volta disattivate queste opzioni, la mia latenza RPC è stata immediatamente risolta.


1

Ho iniziato a vedere questo errore dopo aver risolto un errore IRQ con il mio controller Ethernet nVidia 10/100/1000 che è apparso durante l'aggiornamento della mia scheda grafica alla GeForce GTX 550 Ti.

Sembra che dopo l'aggiornamento ai nuovi driver GeForce 295.73 e quindi risolto il conflitto di interruzione, avessi rimosso, danneggiato o disinstallato i driver del controller nATA SATA / RAID esistenti. Non uso RAID, l'errore persiste ancora e di tanto in tanto viene bloccato Vista Ultimate a 64 bit.

Dopo aver provato tutti i suggerimenti per la risoluzione dei problemi che ho trovato sul web, si è presentata una semplice soluzione ... Ho eseguito l'aggiornamento al controller nForce SATA / RAID 15.58, ma ho lasciato soli altri driver nForce.

Ciò ha risolto il problema per me e ora ho risolto tutti i conflitti dei miei conducenti. Spero che ti aiuti anche tu.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.