Ben*_*jol 41 troubleshooting windows-vista dpc
我有一个双核处理器,两者之一始终为 100%。在 ProcessExplorer 中查看显示它是延迟过程调用。在网上阅读似乎给了我很多不同的答案。
是否可以制定几个步骤来尝试缩小我的情况下可能出现的问题?
更新 1: FWIW,即使在安全模式下问题仍然存在。
更新 2:我从 PC 背面拔掉了所有我能用的东西,这让我多了 40% 的免费处理器。我还下载了RATTV3 工具,但由于某种原因,在我的机器上它没有给我一个驱动程序故障。此处对 DPCLatencyChecker 和 RATTV3 都有很好的描述。
更新 3:,LatencyMon(见下面我的回答)告诉我它是nvstor32.sys
- 这是 NVidia 的 SATA 驱动程序 - 时间约为 5300 微秒。
更新 4:情节变厚,在考虑是否尝试启动恢复磁盘(看看它是否真的是驱动程序,而不是硬件问题)时,我注意到 DVD/CD 播放器不工作(即甚至没有打开当我按下按钮时门)。考虑到机器刚刚更换了主板,我想他们可能忘记插上电源了。我打开盒子,一切看起来都很好,但我拔掉了电源,然后又重新插上了。重新启动时,一切都很好 - 不再有 DPC(现在最高 300 微秒)!
更新 5:第二天,问题又回来了,CD 播放器无法再次工作,甚至密码文本框中的光标也在慢动作闪烁......尝试拔掉我能想到的所有东西,并在第二次重新启动时再次工作(如更新 2 )。下次我要尝试完全拔掉 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 来说可能是正常的?),以及许多硬页面错误。但这些将成为其他问题的主题。
后记:我最近开始遇到同样的问题,并使用相同的方法,设法将其追踪到正在拍摄的 U 盘(我用于 ReadyBoost 的 U 盘)。
Ian*_*oyd 44
这是我如何找到高 DPC 延迟原因的故事。
我的系统在声音播放过程中遇到咔嗒声和砰砰声。我知道这意味着内核模式中的某些东西正在占用 CPU。我的第一个想法是浏览 Process Explorer,看看是否有任何不合适的地方。唯一引起我注意的是执行延迟过程调用(DPC) 所花费的过多时间:
我知道 DPC 是在驱动程序中运行的代码;挑战在于找出哪个驱动程序。我求助于DPC Latency Checker,它向我展示了延迟有多严重:
DPC Latency Checker建议在设备管理器中查看设备,将非必要硬件(如网卡、声卡)一一禁用,希望能隔离有问题的驱动。(如果您禁用设备,并且 DPC 延迟突然下降:您已经找到了罪魁祸首!)
不幸的是,在禁用了所有可能的功能之后(同时仍然可以使用计算机——不要禁用您的硬盘驱动器、视频卡、鼠标或插入鼠标的 USB 集线器!),延迟仍然很高。接下来,我转向了Windows Performance Toolkit(Windows SDK 的一部分),以及 Peter Weiland 的一篇出色的博客文章“测量 DPC 时间”。安装 Windows 性能工具包后:
我打开了一个提升的命令提示符并运行:
>xperf -on Latency
Run Code Online (Sandbox Code Playgroud)
注意:该
Latency
组是一组预定义的事件,可以从内核组 提供程序进行跟踪:Run Code Online (Sandbox Code Playgroud)>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 事件
- INTERRUPT中断事件
- DISK_IO磁盘输入/输出
- HARD_FAULTS硬页面错误
让它运行一分钟后,我停止了跟踪,并将其保存到一个文件中:
C:\Users\Ian\Desktop\xperf -d thingy1.etl
Run Code Online (Sandbox Code Playgroud)
然后我使用以下命令查看了跟踪结果:
C:\Users\Ian\Desktop\xperf thingy1.etl
Run Code Online (Sandbox Code Playgroud)
这将加载图形化的Windows 性能分析器。右键单击DPC CPU Usage图,我选择了Summary Table。这显示了驱动程序在 DPC 上花费的时间细分:
我马上就可以看到一个驱动程序 ( 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(传统)设备创建设备表示。因此,在设备管理器中没有可查看的此类设备。要在设备管理器显示中包含隐藏设备,请单击查看并选择显示隐藏设备。
微软取消了该功能并用任何东西替换它。做得好。
在典型的书呆子愤怒中,一些无用的答案:
幸运的是,NirSoft 创建了一个替代品。ServiWin可让您查看、停止和启动所有服务(即使是 Microsoft 决定不允许管理员查看的服务):
Ben*_*jol 13
进度报告
迄今为止我发现的最好的工具是LatencyMon,它基本上可以完成前两个工具所做的一切,而不会让您思考。下载页面要求您通过电子邮件注册 - 但我这样做时什么也没发生 - 但您仍然可以滚动到页面底部进行下载。
在我的例子中,我使用了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
Run Code Online (Sandbox Code Playgroud)
然后我开始研究什么是 VSS以及它的用途。我去了几个-页-关于- VSS故障排除。通过所有这些,我有一个很大的嫌疑:我的备份软件CrashPlan。
跟随那条线索,我很快找到了一个与 VSS 错误相关的页面。按照那里的说明禁用使用 VSS 的打开文件备份,冻结、高内核 CPU 使用率等完全消失。不要误会我的意思:CrashPlan 很棒!只是这个功能在我的机器上不起作用。
顺便说一句,这里的这个页面给了我最初的线索,帮助我找到了问题的根本原因。非常感谢@Benjol 和之前回答过的所有其他人!我希望我的回答也能帮助其他人...