如何找出导致 Windows 中断的原因?

jlu*_*olt 46 windows performance debugging kernel interrupts

偶尔我会遇到具有高处理器中断时间百分比的服务器(Windows 2003 和 2008)。有没有办法查看导致中断的程序或设备?

小智 54

在仔细阅读文档后(基于此处的其他答案),这是我最终使用的过程:

  1. 捕获问题的 ETW 日志

    最简单的方法是使用Windows 性能记录器。我不确定它何时首次出现,但似乎内置于最新版本的 Windows 中。将配置文件设置为CPU usage.

    Windows 性能记录器

    或者,使用提升的命令提示符,导航到包含它的文件夹并使用命令行工具 xperf:

    xperf -on base+interrupt+dpc
    
    Run Code Online (Sandbox Code Playgroud)

    请注意,您需要关闭 Process Monitor 或任何其他使用 ETW 的应用程序,否则您将收到以下错误: xperf: error: NT Kernel Logger: Cannot create a file when that file already exists. (0xb7).

  2. 停止跟踪/保存日志

    xperf -d interrupt_trace.etl
    
    Run Code Online (Sandbox Code Playgroud)
  3. Windows Performance Analyzer(Windows Performance Toolkit 的一部分)中打开跟踪;有些地方提到使用xperfview代替。

  4. 展开Computation-> CPU Usage (Sampled)-> DPC and ISR Usage by Module, Stack,右键单击并add graph to analysis view

    Windows 性能分析器

  5. 这直接指向了有问题的司机。在这种情况下,HDAudBus.sys 通过中断使用恒定 10.82% 的 CPU,这正是 Process Explorer 向我展示的。


Ran*_*e42 5

如果你能处理低级系统工具;

Windows 性能分析器 (WPA)

Windows 性能分析器 (WPA) 是一组性能监视工具,用于生成 Microsoft Windows 操作系统和应用程序的深入性能配置文件。

在您学习如何使用 xperf 后;查看;

DPC/ISR 行动

DPC/ISR 操作会生成一份文本报告,其中总结了有关 DPC 和 ISR 的各种指标。此操作的用法是:

语言:c-a dpcisr [-dpc -isr -summary -interval [n] -bucket [n] -range T1 T2 ]

选项

描述

数据中心

仅显示 DPC 的统计信息

ISR

仅显示 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
Run Code Online (Sandbox Code Playgroud)

和情监侦。如果未指定报告类型,则默认打印所有三种报告。