Answers:
在仔细阅读了文档(基于此处的其他答案)之后,这就是我最终使用的过程:
捕获问题的ETW日志
最简单的方法是使用Windows Performance Recorder。我不确定它何时首次出现,但似乎内置于Windows的最新版本中。将配置文件设置为CPU usage
。
或使用提升的命令提示符,导航到包含该文件夹的文件夹,然后使用命令行工具xperf:
xperf -on base+interrupt+dpc
请注意,您将需要关闭Process Monitor或使用ETW的任何其他应用程序,否则会出现以下错误: xperf: error: NT Kernel Logger: Cannot create a file when that file already exists. (0xb7).
停止跟踪/保存日志
xperf -d interrupt_trace.etl
在Windows Performance Analyzer
(Windows Performance Toolkit的一部分)中打开跟踪;有些地方提到使用xperfview
代替。
展开Computation
-> CPU Usage (Sampled)
-> DPC and ISR Usage by Module, Stack
,右键单击并add graph to analysis view
这正确地指向了有关驾驶员。在这种情况下,HDAudBus.sys通过中断一直使用我的CPU的10.82%,这恰恰是Process Explorer向我显示的内容。
如果您可以处理低级系统工具;
Windows Performance Analyzer(WPA)
Windows Performance Analyzer(WPA)是一组性能监视工具,用于生成Microsoft Windows操作系统和应用程序的深入性能配置文件。
在学习了如何使用xperf之后;查看;
DPC / ISR操作会生成一个文本报告,其中总结了有关DPC和ISR的各种指标。此操作的用法是:
复制代码-a dpcisr [-dpc -isr -summary -interval [n] -bucket [n] -range T1 T2]
选项
描述
dpc
仅显示DPC的统计信息
岛
仅显示ISR的统计信息
摘要
显示摘要报告
间隔[dt]
显示间隔为dt的使用情况报告,默认值为1秒
桶[dt]
显示dt间隔的直方图,默认为2秒
范围T1 T2
显示T1和T2之间的延迟
If no data type is specified, default is to show report for both DPC
和情监侦。如果未指定报告类型,则默认为打印所有三种报告。
这是我找到的关于如何执行此操作的最佳文章,包括教程,屏幕截图以及相关工具的下载链接:
http://www.msfn.org/board/topic/140263-how-to-get-the-cause-of-high-cpu-usage-by-dpc-interrupt/
两个很好的工具是LatencyMon和DPC Latency Checker。