我如何找到高延迟过程调用的根本原因?


41

我有一个双核处理器,两个之一始终处于100%的状态。在ProcessExplorer中查看可知,这是延迟过程调用。网上阅读似乎给了我很多不同的答案。

是否有可能采取一些措施来缩小我的问题范围?

更新1: FWIW,即使在安全模式下,问题仍然存在。

更新2:我从PC背面拔出了所有可能的插头,这为我购买了40%的免费处理器。我还下载了RATTV3工具,但是由于我的机器上的某些原因,它没有给我逐个驱动程序的故障。有两种DPCLatencyChecker和RATTV3一个很好的说明这里

更新3: LatencyMon(见我的回答如下)告诉我,它的nvstor32.sys-这是NVIDIA的SATA驱动程序-约5300微秒的时间。

更新4:情节变厚,同时在考虑是否尝试启动恢复盘(以查看它是否确实是驱动程序,而不是硬件问题),我注意到DVD / CD播放器无法正常工作(即,甚至没有打开DVD / CD播放器)。当我按下按钮时 鉴于机器刚从更换主板中恢复过来,我想也许他们忘记了将其插入。我打开盒子后,一切似乎还不错,但我拔掉了插头,然后又重新插回去。重新启动后,一切都很好-不再需要DPC(现在最高300µs)!

更新5:在第二天,问题再次出现,CD播放器无法再次运行,甚至密码文本框中的光标也以慢动作闪烁...试图拔下我能想到的所有内容,并在第二次重新启动时再次运行(如Update2一样) )。下次我将尝试完全拔掉CD播放器的电源...

更新6:刚注意到系统事件日志nvstor32.sys给出了错误信息Parity error detected in \Device\RaidPort0,然后是有关发送重新初始化的警告。现在只需要弄清楚哪一个RaidPort0是...(请注意,我没有RAID设置,它只是一个标准的Acer)。哦,当我执行系统回滚(或所谓的回退)时,我的Avast设置显然被杀死了,因为它不会启动(RPC错误),也不会卸载(发生setiface错误)。

更新7:终于有时间在拔下DVD的情况下重新启动。不再有DPC问题!(尽管有很多页面错误,但这供以后使用)。下一步:确定是电缆还是DVD播放器。

更新8:借用SATA电缆,用它引导,没有问题。CD / DVD播放器有效,没有DPC问题nvstor32.sys,没有处理器被阻塞。幸福的结局……几乎:我仍然遇到Avast的问题storport.sys,启动时明显的DPC问题(对于USB可能是正常的?)以及许多硬页面错误。但这将成为其他问题的主题。

后记:我最近开始遇到相同的问题,并且使用相同的方法,设法将其跟踪到正在拍摄的USB记忆棒(我用于ReadyBoost的那个记忆棒)中。


3
真正的好工具和帮助在这里... msfn.org/board/topic/...
摩押

Answers:


43

这是我如何找到造成DPC延迟高的原因的故事。


我的系统在声音播放过程中出现咔嗒声。我知道这意味着内核模式下的某些事情正在占用CPU。我的第一个想法是在Process Explorer周围戳一下,看看是否有什么地方不合适。引起我注意的唯一事情是花了大量的时间执行延迟过程调用(DPC):

Process Explorer的屏幕截图显示了较高的DPC时间

我知道DPC是在驱动程序内部运行的代码;面临的挑战是弄清楚哪个驱动程序。我转向了DPC延迟检查器,它向我展示了延迟有多严重:

DPC延迟检查器的屏幕截图

DPC Latency Checker建议通过“ 设备管理器”中的设备,并逐个禁用非必需的硬件(例如网卡,声卡),以期隔离故障驱动程序。(如果禁用设备,则DPC延迟突然下降:您已找到罪魁祸首!)

禁用设备的屏幕截图

不幸的是,在禁用了我所有可能的功能之后(尽管仍然可以使用计算机,请不要禁用硬盘,视频卡,鼠标或鼠标插入的USB集线器!),延迟仍然很高。接下来,我转向Windows Performance ToolkitWindows SDK的一部分),以及Peter Weiland的精彩博客文章“ Measuring DPC Time”。安装Windows Performance Toolkit之后:

Windows SDK安装程序的屏幕快照,已选择Windows Performance Toolkit

我打开提升的命令提示符并运行:

>xperf -on Latency

注意:该Latency 是一预定义的事件,可以从内核组 提供程序进行跟踪:

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

在这种情况下,Latency对应于内核标志:

  • PROC_THREAD进程和线程创建/删除
  • LOADER内核和用户模式图像加载/卸载事件
  • PROFILE CPU样品简介
  • CSWITCH上下文切换
  • DPC DPC活动
  • 中断中断事件
  • DISK_IO磁盘I / O
  • HARD_FAULTS硬页错误

让它运行一分钟后,我停止了跟踪,并将其保存到文件中:

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

然后,我使用命令查看跟踪的结果:

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

这将加载图形Windows性能分析器。右键单击“ DPC CPU使用情况”图,选择“ 摘要表”。这显示了驱动程序在DPC中花费的时间的细分:

XPerf输出的屏幕截图

马上,我可以看到一个驱动程序(tsvp.sys)每执行一次DPC平均花费2.8毫秒,比其他任何驱动程序都要慢一个数量级:

屏幕截图

谷歌搜索tsvp.sys给了我答案:最近安装的CommView

现在的问题是如何禁用此驱动程序。使用AutoRuns,我可以看到它已作为驱动程序服务安装:

自动运行的屏幕截图

使用设备管理器,我可以禁用托管该驱动程序的服务。首先,您必须显示隐藏的设备,然后展开Non-Plug and Play Drivers节点:

设备管理器的屏幕截图

最后,我可以停止驱动程序服务,并将其启动模式从System(意味着驱动程序是Windows的重要组成部分,Windows无法在没有它的情况下启动)更改为Demand(意味着可以在需要时启动驱动程序):

设备管理器的屏幕截图

停止驱动程序服务可立即解决我的DPC延迟:

屏幕截图

我可能会或可能不会完全卸载CommView,但是现在我已经解决了DPC延迟过长的情况。


更新:从Windows 8开始,您将不再在设备管理中看到非即插即用驱动程序

注意从Windows 8和Windows Server 2012开始,即插即用管理器不再为非PnP(旧版)设备创建设备预置。因此,没有此类设备可在设备管理器中查看。要将隐藏的设备包括在设备管理器显示中,请单击查看,然后选择显示隐藏的设备。

Microsoft取消了该功能,并一无所获。做得好。

在典型的书呆子愤怒中,一些无用的答案

  • 设备管理器从未显示非pnp驱动程序
  • 你为什么需要这个?

幸运的是,NirSoft已创建了替代产品。ServiWin使您可以查看,停止和启动所有服务(甚至应允许Microsoft允许管理员查看这些服务):

ServiWin的屏幕截图


13

进度报告

到目前为止,我发现的最好的工具是LatencyMon,它基本上可以完成前两个工具所做的所有事情,而无需您思考。下载页面要求您通过电子邮件进行注册-但是当我这样做时,对我来说什么都没有发生-但您仍然可以滚动到页面底部以进行下载。

替代文字


6

以我为例,我使用LatencyMon(来自Benjol的答案),发现冻结生命,宇宙和一切的驱动程序也是(也是)storport.sys这是Microsoft的“ 高性能总线 ” 驱动程序。那证实了我对该问题与IO相关的怀疑。

我还继续查看了Windows 7 Event Viewer,文件夹Windows Logs-> Application,发现每30分钟到2小时发生一次来自卷影复制(VSS)的几批错误。他们的细节是这样的:

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

然后,我开始研究VSS是什么以及它的用途。我去了几个 - - 关于 - VSS故障排除。我经历了一个大的怀疑:我的备份软件CrashPlan

在那条线索之后,我迅速找到了一个与VSS错误相关的页面。按照那里的说明禁用使用VSS的打开文件的备份,冻结,高内核CPU使用率等完全消失了。不要误会我的意思:CrashPlan很棒!只是此功能在我的机器上不起作用。

顺便说一句,这里的页面就是那个给了我最初的线索的人,它帮助我找到了问题的根本原因。非常感谢@Benjol和所有其他先前回答的人!希望我的回答也能对其他人有所帮助...


谢谢Chuim,那也许也是我的确切问题,我已经解决了这个问题了几周了,终于将其范围缩小到VSS和storport.sys,但是直到找到根本原因为止(CrashPlan备份打开的文件),直到您的帖子。我不确定是否可以解决此问题,但这是迄今为止DPC延迟高的最佳线索!
马特·帕默里

我刚刚验证了调整崩溃计划设置以不备份打开的文件是可行的!非常感谢!现在,我可以播放Skyrim了,而没有可怕的音频暂停和故障!
马特·帕默里

只是想补充一点,在构建新的PC之后我遇到了音频卡顿的问题,并发现Crashplan也是罪魁祸首。通过computercabal.com/2012/07/debugging-audio-skipping-lagging.html找到了这个答案。感谢所有人所做的大量工作来查找问题!
chucknelson

4

可能有一个设备驱动程序使您的系统忙碌。一种分析方法是运行DPC延迟检查器。然后一次禁用一个驱动程序,然后查看DPC负载是否下降。(Process Explorer也可以。)

您可以在计算机管理->设备管理器中禁用设备驱动程序。


谢谢,我将继续阅读该链接。对不起,请问我可以安全地禁用哪些设备而无需“切断分支机构”(例如,键盘,屏幕,鼠标等)?
Benjol 2010年

1
不确定,我的主要怀疑对象将是非Microsoft服务。我会尝试,如果出现错误,则可以安全模式启动并重新启用驱动程序
Andomar

好的,我看到该页面包含要避免的驱动程序列表。必须希望它不是其中之一。
Benjol 2010年

在此之前,我想我将尝试从恢复磁盘启动-如果仍然遇到问题,那很可能是硬件问题?
Benjol 2010年

1
+1用于延迟检查程序。以我的经验,最常见的罪魁祸首是无线网卡的驱动程序。

3

我觉得我应该在这里补充我的答案,因为这个问题很难解决,而且不总是归因于不良的驱动程序或IRQ冲突。

我的RPC延迟过长,导致我的专业消费者USB声卡发出爆裂声。接受的答案中描述的工具对识别导致问题的特定驱动程序没有帮助。延迟发生在多个进程中:HAL,USBPORT.SYS和Windows内核。深入研究这些过程并没有发现明显的罪魁祸首。

事实证明,这个问题是较低级别的,特定于具有某些芯片组和BIOS修订版的技嘉主板。解决方案是禁用Intel SpeedStep和所有其他主板特定功能,这些功能可实时调整CPU速度和电压。一旦关闭这些选项,我的RPC延迟即刻得到解决。


1

在将显卡升级到GeForce GTX 550 Ti时出现的nVidia 10/100/1000以太网控制器解决了IRQ错误后,我开始看到此错误。

在升级到新的GeForce驱动程序295.73之后解决了中断冲突之后,我似乎已经删除,损坏或卸载了现有的nForce SATA / RAID控制器驱动程序。我不使用RAID,错误仍然存​​在,并且不时锁定了Vista Ultimate 64位。

在尝试了我在网上找到的所有故障排除建议之后,一个简单的解决方案得以展现……我升级到nForce SATA / RAID控制器15.58,但其他的nForce驱动程序却搁置了。

这为我解决了问题,现在我解决了所有驾驶员冲突。希望它也对您有帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.