Xperf 使用
了解
xperf是Windows 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
Precise 比sampled 会多很多可选展示信息:
比如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