Xperf 使用方法

本文介绍了Windows下xperf工具集,包含xperf、xperfview和xbootmgr,用于分析多种性能问题。阐述了其基于ETW记录内核事件的原理,还说明了安装方法、收集信息的命令行和WPR方式,以及打开.etl文件分析性能的步骤,最后提及Precise和Sampled的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Xperf 使用

了解

xperfWindows Performance Tools Kit中的一个工具

xperf是一套工具集,这些工具目前包含一个 xperf 跟踪捕获工具、一个 xperfview 虚拟化工具(也称为性能分析器)和一个 xbootmgr 启动跟踪捕获工具。这些工具用于分析大量的性能问题,包括应用程序启动次数、启动问题、延迟的过程调用和中断活动(DPC 和 ISR)、系统响应问题、应用程序资源利用和中断风暴。

xperf基于Windows事件跟踪Event Tracing for Windows(ETW)基础结构构建。它使用ETW提供程序记录内核事件,然后以图形格式显示它们

ETW 允许 Windows 和应用程序有效地生成事件。可以在任意时间启用和禁用事件,无需重新启动系统或进程。ETW 收集被请求的内核事件,并将其保存到一个或多个文件名为 “trace files” 或者 “traces” 的文件中。
这些内核事件提供了关于系统操作的大量详细信息。用于捕获和分析的最重要和最有用的内核事件是:上下文切换、中断、DPC、进程和线程的创建和销毁、磁盘 I/O、硬故障、处理器 P 状态转换、寄存器操作,以及许多其他操作。

安装

安装包下载:
链接:https://pan.baidu.com/s/1CaD86x7PrT0JRM8A3FuPOg
提取码:om87
复制这段内容后打开百度网盘手机App,操作更方便哦
如果只是用xperf 做性能分析的工作,安装的时候可以只选择Windows性能工具包选项
在这里插入图片描述

收集

1.使用命令行记录信息:

● 使用管理员权限打开cmd
● 运行命令:xperf -on latency -stackwalk Profile
● 运行或保持需要分析的程序在运行中
● 需要分析的事件完成后,运行命令:xperf -d filename.etl 来停止跟踪事件,将跟踪信息保存到etl文件种

运行命令中的

latency 是一个特殊的provides名,用于打开一些预定义的内核provides,通过xperf -provides KF 查看provides 选项,见附录1

-stackwalk Profile为每个配置文件事件捕获一个堆栈,见附录2

自己也可以组合providers:
xperf -on DiagEasy+FILE_IO

DiagEasy 默认包含
PROC_THREAD、LOADER、DISK_IO、 HARD_FAULTS、 DPC、 INTERRUPT、 CSWITCH 和 PERF_COUNTER


2.使用WPR(Windows Performance Recorder) 记录信息

● 根据自己的需求选择需要记录的数据项,然后“Logging mode”一般选择File, 然后点击Start开始事件跟踪:
在这里插入图片描述

●点击Save,停止事件跟踪,并将.etl文件保存到指定路径
在这里插入图片描述

:如果需要跟踪详细的栈信息,Detail level建议勾选Verbose

分析

打开.etl分析性能

1.一般我们要分析的是CPU时间,它在Computation项里面,用CPU Usage(Sampled)来分析

以打开word为例在这里插入图片描述

2.筛选目标进程来进行分析

右键,选择Filter to Selection ,筛选后想返回该状态时 选择Clear Filter
在这里插入图片描述

3.增加显示的事件信息

在目录栏右击可添加显示信息:
在这里插入图片描述

4.加载符号

栈信息只识别出了模块名,方法名显示为?

配置符号路径
会从左往右加载,最右面的C:\localSym;是我的本地符号路径

在这里插入图片描述

加载符号的服务器已经ping 不通很久了,需要设置一个能访问外网的代理:
在这里插入图片描述

然后加载符号
第一次加载符号可能会慢一点,之后重新加载就会快很多

在这里插入图片描述

可以在控制台窗口查看加载情况:

在这里插入图片描述

系统符号和本地符号,加载成功,结合栈信息进行分析

在这里插入图片描述

其他

Precise和Sampled
Precisesampled 会多很多可选展示信息:
比如TimeSinceLast: 线程切换过后运行的时长(微秒)等

precise 也把进/线程分为old,readying,new

●New Thread:                                   切换至CPU上进行工作的线程。
●Readying Thread:                              唤醒New Thread的线程,也就是导致New Thread从其他状态转换到运行中的线程。
●Old Thread:                                   本来在当前CPU上执行的,而在New Thread切入之后被换出的线程。
●New Process / Readying Process / Old Process: New Thread / Readying Thread / Old Thread所属的进程。



























附录

1.Xperf 查看支持的Kernel Flag

xperf 工具使用Kernel Flag字段来过滤事件类型

xperf -provides KF

CMD窗口:


 PROC_THREAD    : 进/线程的创建和删除
 LOADER         : 内核和用户模式下的镜像加载/卸载事件
 PROFILE        : CPU Sample profile
 CSWITCH        : Context Switch
 COMPACT_CSWITCH: Compact Context Switch
 DISPATCHER     : CPU Scheduler
 DPC            : DPC Events
 INTERRUPT      : Interrupt events
 INTERRUPT_STEER: Interrupt Steering events
 WDF_DPC        : WDF DPC events
 WDF_INTERRUPT  : WDF Interrupt events
 SYSCALL        : 系统调用
 PRIORITY       : 优先级变更
 SPINLOCK       : 自旋锁碰撞
 KQUEUE         : Kernel Queue Enqueue/Dequeue
 ALPC           : 高级本地过程调用
 PERF_COUNTER   : Process Perf Counters
 DISK_IO        : Disk I/O
 DISK_IO_INIT   : Disk I/O Initiation
 FILE_IO        : File system operation end times and results
 FILE_IO_INIT   : File system operation (create/open/close/read/write)
 HARD_FAULTS    : Hard Page Faults
 FILENAME       : FileName (e.g., FileName create/delete/rundown)
 SPLIT_IO       : Split I/O
 REGISTRY       : Registry tracing
 REG_HIVE       : Registry hive tracing
 DRIVERS        : Driver events
 POWER          : Power management events
 CC             : Cache manager events
 NETWORKTRACE   : Network events (e.g., tcp/udp send/receive)
 VIRT_ALLOC     : Virtual allocation reserve and release
 MEMINFO        : Memory List Info
 ALL_FAULTS     : All page faults including hard, Copy on write, demand ze
 lts, etc.
 MEMINFO_WS     : Working set Info
 VAMAP          : MapFile info
 FOOTPRINT      : Support footprint analysis
 MEMORY         : Memory tracing
 REFSET         : Support footprint analysis
 HIBERRUNDOWN   : Rundown(s) during hibernate
 CONTMEMGEN     : Contiguous Memory Generation
 POOL           : Pool tracing
 CPU_CONFIG     : NUMA topology, Processor Group and Processor Index to Number mapping. By default it is always enabled
 SESSION        : Session rundown/create/delete events.
 IDLE_STATES    : CPU Idle States
 TIMER          : Timer settings and its expiration
 CLOCKINT       : Clock Interrupt Events
 IPI            : Inter-processor Interrupt Events
 OPTICAL_IO     : Optical I/O
 OPTICAL_IO_INIT: Optical I/O Initiation
 FLT_IO_INIT    : Minifilter callback initiation
 FLT_IO         : Minifilter callback completion
 FLT_FASTIO     : Minifilter fastio callback completion
 FLT_IO_FAILURE : Minifilter callback completion with failure
 KE_CLOCK       : Clock Configuration events
 PMC_PROFILE    : PMC sampling events

2.Xperf 查看堆栈开关选项

Xperf 查看堆栈开关选项
xperf -help stackwalk

CMD窗口:
在这里插入图片描述

Xperf开启事件追踪

xperf -on KF1+KF2+KF3

例如:

xperf -on PROC_THREAD+LOADER+PROFILE -stackwalk profile
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值