我偶尔会遇到处理器中断时间百分比较高的服务器(Windows 2003 和 2008)。有没有办法查看哪个程序或设备导致了中断?
答案1
在查阅了文档之后(基于这里的其他答案),我最终使用了以下过程:
捕获问题的 ETW 日志
最简单的方法是使用Windows 性能记录器。我不确定它何时首次出现,但似乎已内置于最新版本的 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 性能工具包的一部分)中打开跟踪;有些地方提到使用xperfview
。展开
Computation
->CPU Usage (Sampled)
->DPC and ISR Usage by Module, Stack
,右键单击并add graph to analysis view
这直接指向了有问题的驱动程序。在本例中,HDAudBus.sys 通过中断持续使用了 10.82% 的 CPU,这正是 Process Explorer 向我显示的内容。
答案2
如果您可以处理低级系统工具;
Windows Performance Analyzer (WPA) 是一组性能监视工具,用于生成 Microsoft Windows 操作系统和应用程序的深入性能配置文件。
在您了解如何使用 xperf 之后;请查看;
DPC/ISR 操作会生成一个文本报告,其中汇总了有关 DPC 和 ISR 的各种指标。此操作的用法如下:
语言:bash-a dpcisr[-dpc-isr-summary-interval[n]-bucket[n]-range t1 t2]
选项
描述
磷酸二酯酶
仅显示 DPC 的统计信息
情报、监视与侦察
仅显示 ISR 的统计数据
概括
显示摘要报告
间隔 [dt]
显示间隔为 dt 的使用情况报告,默认为 1 秒
桶 [日期]
显示 dt 间隔的直方图,默认为 2 秒
范围 T1 T2
显示 T1 和 T2 之间的延迟
If no data type is specified, default is to show report for both DPC
和 ISR。如果没有指定报告类型,则默认打印所有三种报告。
答案3
这是我发现的有关如何执行此操作的最佳文章,其中包含教程、屏幕截图和相关工具的下载链接:
http://www.msfn.org/board/topic/140263-how-to-get-the-cause-of-high-cpu-usage-by-dpc-interrupt/
答案4
两个很棒的工具是LatencyMon和DPC 延迟检查器。