Como chego à causa raiz de chamadas de procedimento diferido?

41

Eu tenho um processador Dual core, e um dos dois está constantemente a 100%. Olhar no ProcessExplorer mostra que são chamadas de procedimento adiado. Ler pela internet parece me dar toneladas de respostas diferentes.

É possível definir algumas etapas para tentar diminuir qual pode ser o problema no meu caso?

Atualização 1: FWIW, o problema persiste mesmo no modo de segurança.

Atualização 2: desconectei tudo o que pude da parte de trás do PC e isso me comprou 40% mais de processador gratuito. Também baixei a ferramenta RATTV3 , mas, por algum motivo, na minha máquina, não está me dando uma quebra de driver por driver. Há uma boa descrição do DPCLatencyChecker e do RATTV3 aqui .

Update 3: , LatencyMon (ver minha resposta abaixo) me diz que é nvstor32.sys- que é motorista SATA da NVidia - com tempos de cerca de 5300 mS.

Atualização 4: o enredo engrossa, enquanto se pensa em tentar inicializar um disco de recuperação (para ver se realmente são drivers e não um problema de hardware), notei que o DVD / CD player não estava funcionando (ou seja, nem mesmo abrindo o porta quando pressiono o botão). Dado que a máquina acabou de substituir a placa-mãe, imaginei que eles tivessem esquecido de conectá-la. Abri a caixa, tudo parecia bem, mas desconectei e conectei novamente. Na reinicialização, estava tudo bem - não havia mais DPC (agora mais alto, 300µs)!

Atualização 5: no dia seguinte, problema de volta, o CD player não está funcionando novamente, até o cursor na caixa de texto da senha está piscando em câmera lenta ... Tentei desconectar tudo o que eu conseguia pensar e, na segunda reinicialização, funcionou novamente (como na Atualização2 ) Da próxima vez vou tentar desconectar o CD player completamente ...

Atualização 6: Acabei de notar que o log de eventos do sistema está nvstor32.sysapresentando um erro dizendo Parity error detected in \Device\RaidPort0, em seguida, um aviso sobre o envio de uma reinicialização. Agora só tenho que descobrir qual RaidPort0é ... (note, eu não tenho configuração de RAID, é apenas um Acer convencional). Ah, e minha instalação do Avast aparentemente foi interrompida quando fiz uma reversão do sistema (ou seja lá o que for chamado), porque ela não inicia (erro RPC), não desinstala (ocorreu um erro setiface).

Atualização 7: Finalmente tive tempo de reiniciar com o DVD desconectado. Sem mais problemas de DPC! (muitas falhas de página, mas isso é para mais tarde). Próximo passo: verifique se é o cabo ou o DVD player.

Atualização 8: Emprestou um cabo SATA, inicializado com ele, sem problemas. O CD / DVD player funciona, sem problemas de DPC nvstor32.sys, sem processadores bloqueados. Final feliz ... quase: ainda tenho problemas com o Avast, problemas aparentes de DPC storport.sysna inicialização (talvez normais para USB?) E muitas falhas de página. Mas esses serão objeto de outras questões.

Postscript: Recentemente, comecei a ter o mesmo problema e, usando o mesmo método, consegui localizá-lo em um pen drive (o que eu estava usando para o ReadyBoost) sendo filmado.

Benjol
fonte
3
Ferramentas realmente
Moab

Respostas:

43

Aqui está a história de como encontrei a causa da minha alta latência do DPC.


Meu sistema estava apresentando cliques e pops durante a reprodução do som. Eu sabia que isso significava que algo no modo kernel estava monopolizando a CPU. Meu primeiro pensamento foi vasculhar o Process Explorer e ver se algo parecia fora do lugar. A única coisa que chamou minha atenção foi uma quantidade excessiva de tempo gasto realizando chamadas de procedimento adiado (DPCs):

Captura de tela do Process Explorer mostrando tempo de DPC alto

Eu sabia que os DPCs são código sendo executado dentro de um driver; o desafio era descobrir qual motorista. Eu virei para o DPC Latency Checker , que me mostrou o quão ruim era a latência:

captura de tela do DPC Latency Checker

O DPC Latency Checker sugere passar pelos dispositivos no Gerenciador de dispositivos e desabilitar o hardware não essencial um a um (por exemplo, placa de rede, placa de som), na esperança de isolar o driver com erros. (Se você desativar um dispositivo e a latência do DPC diminuir repentinamente: você encontrou o culpado!)

captura de tela de dispositivos desativados

Infelizmente, depois de desativar tudo o que pude (enquanto ainda consigo usar o computador - não desative o disco rígido, placa de vídeo, mouse ou hub USB em que o mouse está conectado!), A latência ainda estava alta. Em seguida, consultei o Windows Performance Toolkit (parte do Windows SDK ) e uma excelente postagem de blog de Peter Weiland, "Measuring DPC Time" . Depois de instalar o Windows Performance Toolkit:

Captura de tela do instalador do Windows SDK, com o Windows Performance Toolkit sendo selecionado

Abri um prompt de comando elevado e executei:

>xperf -on Latency

Nota : O Latency grupo é um conjunto predefinido de eventos que podem ser rastreados no provedor do Grupo de 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
   ...

Nesse caso, Latencycorresponde aos sinalizadores do kernel:

  • PROC_THREAD Processo e thread criar / excluir
  • LOADER Eventos de carregamento / descarregamento de imagem do kernel e do modo de usuário
  • Perfil de amostra da CPU PROFILE
  • Chave de contexto CSWITCH
  • DPC Eventos DPC
  • INTERRUPT eventos de interrupção
  • E / S de disco DISK_IO
  • HARD_FAULTS Falhas na página de impressão

Depois de deixar isso funcionar por um minuto, parei o rastreio e o salvei em um arquivo:

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

E então eu vi os resultados do rastreamento com o comando:

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

Isso carrega o Windows Performance Analyzer gráfico . Ao clicar com o botão direito do mouse no gráfico DPC CPU Usage , selecionei Summary Table . Isso mostra uma divisão do tempo gasto nos DPCs por driver:

captura de tela da saída XPerf

Imediatamente eu posso ver um driver ( tsvp.sys) tendo uma média de 2,8ms por execução DPC, que é uma ordem de magnitude mais lenta que qualquer outro driver:

captura de tela

O Google tsvp.sysme deu a resposta: CommView , que eu havia instalado recentemente.

A questão agora é como desativar esse driver. Usando o AutoRuns , posso ver que ele está instalado como um serviço de driver:

captura de tela de autoruns

Usando o Gerenciador de dispositivos, posso desativar o serviço que hospeda esse driver. Primeiro você tem que Mostrar dispositivos ocultos , depois expanda o Non-Plug and Play Driversnó:

captura de tela do gerenciador de dispositivos

Por fim, pude interromper o serviço do driver e mudei o modo de inicialização de System(o que significa que o driver é uma parte essencial do Windows, e o Windows não pode ser inicializado sem ele), para Demand(o que significa que eu posso iniciar o driver quando quiser):

captura de tela do gerenciador de dispositivos

A interrupção do serviço do driver corrigiu imediatamente a latência do DPC:

captura de tela

Posso ou não desinstalar completamente o CommView, mas por enquanto resolvi o caso da alta latência do DPC.


Atualização : A partir do Windows 8, você não pode mais ver drivers não Plug and Play no Gerenciador de dispositivos :

Nota A partir do Windows 8 e Windows Server 2012, o Gerenciador de Plug-and-Play não cria mais representações de dispositivos para dispositivos não PnP (herdados). Portanto, não existem dispositivos para exibição no Gerenciador de dispositivos. Para incluir dispositivos ocultos na exibição do Gerenciador de dispositivos, clique em Exibir e selecione Mostrar dispositivos ocultos.

A Microsoft retirou o recurso e o substituiu por nada. Bom trabalho.

Na raiva típica dos nerds, algumas respostas inúteis :

  • O gerenciador de dispositivos nunca mostrou drivers não pnp
  • Por que você precisa disso?

Felizmente, o NirSoft criou um substituto. O ServiWin permite que você veja, pare e inicie todos os serviços (mesmo aqueles que a Microsoft decidiu que os administradores devem ver):

captura de tela do ServiWin

Ian Boyd
fonte
13

RELATÓRIO DE PROGRESSO

A melhor ferramenta que encontrei até agora é o LatencyMon , que basicamente faz tudo o que as duas ferramentas anteriores fazem, sem fazer você pensar. A página de download solicita que você se registre por e-mail - mas nada aconteceu comigo quando fiz isso -, mas você pode rolar até o final da página para fazer o download.

texto alternativo

Benjol
fonte
6

No meu caso, usei o LatencyMon (da resposta de Benjol) e descobri que o motorista congelava a vida, o universo e tudo o que era (também) o storport.sysque é um driver da Microsoft para " barramentos de alto desempenho ". Isso confirmou minha suspeita de que o problema estava relacionado à IO.

Também fui em frente e olhei para o Windows 7 Event Viewer , pasta Windows Logs -> Application , e encontrei vários lotes de erros do VSS (Volume Shadow Copy) ocorrendo a cada 30 minutos a 2 horas. Eles são detalhes assim:

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

Comecei a investigar o que diabos é o VSS e para que é usado. Fui várias - páginas - sobre - VSS solução de problemas . Passando por todos esses, eu tinha um grande suspeito: meu software de backup CrashPlan .

Seguindo esse exemplo, rapidamente encontrei uma página relacionando-a com erros de VSS . Seguindo as instruções para desativar o backup de arquivos abertos, que usam VSS, os congelamentos, o alto uso da CPU do Kernel etc. foram completamente extintos. E não me interpretem mal: o CrashPlan é ótimo! Apenas esse recurso não estava funcionando na minha máquina.

BTW, esta página aqui foi A ÚNICA que me deu a liderança inicial que me ajudou a encontrar a causa raiz dos meus problemas. Muito obrigado @Benjol e todos os outros que responderam anteriormente! Espero que minha resposta também ajude outras pessoas ...

Chuim
fonte
Obrigado Chuim, que talvez também seja o meu problema exato, estou trabalhando para resolver esse problema há semanas e finalmente o reduzi a VSS e storport.sys, mas não consegui encontrar a causa raiz (CrashPlan fazendo backup de arquivos abertos) até sua postagem. Ainda não tenho certeza se isso vai consertá-lo, mas é o melhor lead que tive para as altas latências do DPC até agora!
Matt Palmerlee
Acabei de verificar que ajustar as configurações do plano de colisão para não fazer backup dos arquivos abertos funcionou! Muito obrigado! Agora eu posso jogar Skyrim sem pausas e falhas de áudio horríveis!
Matt Palmerlee
Só quero acrescentar que eu estava experimentando uma interrupção do áudio após a criação de um novo PC e descobri que o Crashplan também era o culpado. Encontre esta resposta em computercabal.com/2012/07/debugging-audio-skipping-lagging.html . Obrigado a todos por fazer tanto trabalho para rastrear isso!
chucknelson
4

Provavelmente, existe um driver de dispositivo que mantém o sistema ocupado. Uma maneira de analisar isso é executar o verificador de latência DPC . Em seguida, desative um driver de cada vez e veja se a carga do DPC diminui. (O Process Explorer também funciona.)

Você pode desativar os drivers de dispositivo em Gerenciamento do computador -> Gerenciador de dispositivos.

Andomar
fonte
obrigado, vou ler esse link. Desculpe minha ignorância, mas quais dispositivos posso desativar com segurança sem "cortar o ramo" (teclado, tela, mouse etc.)?
Benjol 22/10/10
11
Não tenho certeza, meus principais suspeitos seriam os serviços que não são da Microsoft. Eu tinha acabado de tentar, se der errado você pode inicializar em modo de segurança e reativar os drivers
Andomar
OK, vejo que essa página inclui uma lista de drivers a serem evitados. Tem que esperar que não seja um deles.
Benjol 22/10/10
Antes disso, acho que vou tentar inicializar a partir de um disco de recuperação - se eu continuar com o problema, é mais provável que seja uma coisa de hardware?
Benjol 22/10/10
11
+1 para o verificador de latência. Na minha experiência, o culpado mais comum aqui é o driver de uma placa de rede sem fio.
Shinrai 22/10/10
3

Acho que devo adicionar minha resposta aqui, porque esse problema é difícil de resolver e nem sempre se deve a drivers ruins ou conflitos de IRQ.

Eu tinha alta latência de RPC que estava causando pops / crackles na minha placa de som USB pro-sumer. As ferramentas descritas na resposta aceita não foram úteis na identificação de um driver específico que estava causando um problema. A latência estava ocorrendo em vários processos: HAL, USBPORT.SYS e o kernel do Windows. Aprofundar-se nesses processos não revelou um culpado óbvio.

No meu caso, o problema era de nível mais baixo e específico das placas-mãe GigaByte com determinados chipsets e revisões do BIOS. A solução foi desativar o Intel SpeedStep e todos os outros recursos específicos da placa-mãe que ajustaram a velocidade e a voltagem da CPU em tempo real. Depois que essas opções foram desativadas, minha latência RPC foi corrigida imediatamente.

Alex
fonte
1

Comecei a ver esse erro depois de resolver um erro de IRQ com meu controlador Ethernet nVidia 10/100/1000 que apareceu ao atualizar minha placa de vídeo para a GeForce GTX 550 Ti.

Parece que após a atualização para os novos drivers GeForce 295.73 e, em seguida, resolvendo o conflito de interrupções, eu havia removido, danificado ou desinstalado os drivers existentes do controlador nForce SATA / RAID. Não uso RAID, o erro ainda persiste e trava o Vista Ultimate de 64 bits de tempos em tempos.

Depois de tentar todas as sugestões de solução de problemas que encontrei na Web, uma solução simples se apresentou ... Atualizei para o nForce SATA / RAID controller 15.58, mas deixei outros drivers do nForce em paz.

Isso foi corrigido para mim e agora resolvi todos os conflitos de driver. Espero que ajude você também.

NorthAlabama
fonte