使用 Xperf 和 Netmon 分析 USB 性能问题
本主题提供有关如何查看 USB ETW 日志中捕获的事件时间线的信息。
Xperf 提供一组内核事件用于分析性能问题。 它会记录这些事件,并在图形中显示它们。
如果熟悉 Xperf 和 USB ETW 事件,则可以创建问题方案的 USB ETW 日志和 Xperf 日志,合并这两个日志文件,并将它们一起分析。 结合使用 Xperf 和 Netmon,可以查看系统事件 (Xperf) ,以及针对给定方案 (Netmon) USB 事件。
通过从提升的命令提示符发出以下命令,并行启动两个跟踪:
Xperf –on Diag
Logman start Usbtrace -p Microsoft-Windows-USB-USBPORT -o usbtrace.etl -ets -nb 128 640 -bs 128
Logman update Usbtrace -p Microsoft-Windows-USB-USBHUB –ets
针对问题场景执行操作,然后通过从提升的命令提示符发出以下命令来停止跟踪:
Logman stop Usbtrace -ets
Xperf –stop
使用以下命令将两个跟踪日志文件合并到单个文件中, () 不需要特权:
Xperf –merge usbtrace.etl C:\kernel.etl merged.etl
此示例创建名为 merged.etl 的合并文件。 可以使用 Xperf 性能分析器或 Netmon 打开此文件。 若要在 Xperf 中打开文件,请运行以下命令:
Xperf merged.etl
Xperf 显示各种内核事件的专用图,如下图所示。 有关 Xperf 录制选项和 Xperf GUI 的详细信息,请参阅 Xperf Command-Line 参考和 Windows 性能分析器 (WPA) 。
若要在 Netmon 中打开合并的跟踪日志,请运行 Netmon,单击“ 文件”-> “打开”-> “捕获”,然后选择该文件。 Xperf 和 Netmon 可以同时打开合并的文件。 可以在 Xperf GUI 和 Netmon 之间切换,以分析特定时间段内系统和 USB 堆栈中发生的情况。 除了系统事件之外,还可以在 Xperf 中查看 USB 事件,但在 Netmon 中可以更轻松地读取 USB 事件。
默认情况下,Netmon 显示合并跟踪文件中的所有事件。 若要仅显示 USB 事件,请应用如下筛选器:
ProtocolName == "USBHub_MicrosoftWindowsUSBUSBHUB" OR ProtocolName == "USBPort_MicrosoftWindowsUSBUSBPORT"
可以在“Netmon 筛选器显示”窗格中输入此筛选器文本。 有关在 Netmon 中使用筛选器的详细信息,请参阅本案例研究中的“USB Netmon 筛选器 ”:使用 ETW 和 Netmon 对未知 USB 设备进行故障排除。
若要分析 USB 事件的计时,可以查看 Netmon 中显示的事件之间的时间差。
查看所显示事件的时差
在“ 框架摘要 ”窗格中,右键单击列标题,然后选择“ 选择列”。
在 “禁用列” 列表中,选择“ 时间增量”,单击“ 添加”,然后单击“ 确定”。
编写一个筛选器,仅显示要查看其计时的事件。 例如,若要查看非重叠批量传输调度与完成事件之间的延迟,请添加以下筛选器:
Description == "USBPort_MicrosoftWindowsUSBUSBPORT:Dispatch URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER" OR Description == "USBPort_MicrosoftWindowsUSBUSBPORT:Complete URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER" OR Description == "USBPort_MicrosoftWindowsUSBUSBPORT:Complete URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER with Data"
- 可以从跟踪中显示的事件中选择事件 ID (说明) 。
- 若要在筛选器中使用事件 ID,请右键单击“ 框架摘要 ”窗格中的事件说明,然后选择“ 向显示筛选器添加说明”。