使用 Windows Performance Analyze 分析异常 DPC 来源

使用 Windows Performance Analyze 分析异常 DPC 来源

最近在测试新硬件的网络吞吐能力时发现我所使用的 Thinkpad 的网络速度异常,同时 CPU 使用率有异常上升,鼠标等外设会同时出现响应速度变慢的情况。在切换操作系统后该问题不会复现,因此判定并非硬件问题。根据网络资料我决定使用 Windows Performance Analyze 工具分析系统行为。

一般来说外设出现响应速度变慢的情况,通常伴随着内核 DPC 和 ISR 异常的处理时间。首先可以通过 LatencyMon 工具检查是否有驱动出现异常。在我遇到的问题中可以检测到 ndis.sys 引起了异常的 DPC,导致外设的 IRQ 无法被快速响应。ndis.sys 是 Windows 的系统文件,它与网络驱动程序接口规范(NDIS,Network Driver Interface Specification)相关联,也就是说各种网络操作均可能引起它的异常。想要进一步分析异常的来源,需要使用 Windows Performance Analyze 工具。

Windows 评估和部署工具包 (Windows ADK) 中随附的 Windows Performance Analyzer (WPA) 工具可以创建由 Windows Performance Recorder (WPR)Xperf 或运行在评估平台中的评估记录的 Windows 事件跟踪 (ETW) 事件的图形和数据表。 WPA 可以打开任何事件跟踪日志 (ETL) 文件进行分析。

记录 Windows 系统事件

在分析之前需要使用 Windows Performance Recorder 记录系统事件。由于 DPC 异常是由网络操作引起的,因此只需要使用 iperf 发起网络请求,同时使用 WPR 记录下全部的系统事件就可以进行分析。

记录最终被保存为 .etl 文件。

分析系统事件

在得到事件跟踪日志 (ETL) 文件后,就可以通过 WPA 分析事件中各个驱动/进程的状态。首先打开上一步用 WPR 记录的 .etl 文件。

这次分析的是异常的 ISR,因此在左侧图表中找到 DPC and ISR Usage by Module, Stack 。右键该图表,选择 Add graph to Analysis View。此时在右侧的窗口中会打开一个更大的时序图,并且会在下方显示每个模块具体的使用率。

在下方表格中点击 count 按照计数器排序,引起最多次 DPC 的操作就会显示在下方。分级展开树形图。

这里最先出现的 e1d.sys 是 Intel 的驱动,这是因为我使用的是 i219-V 网卡。但是由于不论使用 Intel 网卡还是 USB 的 RTL 网卡均有 DPC 异常的问题,因此可以排除,继续展开树形图。

在这里可以看到,一个名为 acsock64.sys 的第三方驱动出现了大量的 DPC 记录。查询后得知这是 Cisco AnyConnect Secure Mobility Client 的驱动。卸载该客户端后,DPC 异常延迟的问题得到解决,系统响应恢复正常,网卡也能达到理论速度。

参考文档

https://learn.microsoft.com/zh-cn/windows-hardware/test/wpt/wpa-step-by-step-guide

https://learn.microsoft.com/zh-cn/windows-hardware/test/wpt/windows-performance-recorder

Amefs, EFS, IT
上一篇文章
Tailscale 组网笔记
下一篇文章
pfSense 配置 AdGuardHome

1条评论. Leave new

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Fill out this field
Fill out this field
请输入有效的电子邮箱地址。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

keyboard_arrow_up