/ Debug,Windows / 200浏览

如何通过 WPT 来分析 Windows 启动过程

引入

所谓 WPT 也就是 Windows Performance Toolkit,包含 Windows Performance Recorder (WPR) 和 Windows Performance Analyzer (WPA) 两个。

其中 WPR 主要用于场景的录制;WPA 主要用于录制后的 ETL 的分析。

当然支撑 WPT 运行的就是 ETW(Event trace for windows) 的机制,通过录制过程中的日志,再通过 WPA 将日志文件打开。而 ETW 在 Windows 的各处都存在。因此,我们就可以利用 WPT 来分析 Windows 启动的过程。

ps:当然,在 Windows 加载前的步骤,肯定是记录不了的。

开始抓日志

安装 WPT

WPT 被包含在了 Windows Assessment and Deployment Kit (Windows ADK) 中,可以通过下载 Windows ADK 安装后,就可以安装好 WPT 了。

💡 WPA 已经可以在 Microsoft Store 中下载了。目前 WPR 还不行

抓日志

  • 打开 WPA,选择“More options”
  • 在【performance scenario】中选择【Boot】,也就是选择性能场景为开机。其他默认就好。最后那个【Number of iterations】就是选择开机几次,这里选择了 2 次,默认是 3 次。
  • 然后就可以点击开始了。剩下的就全交给 WPA 即可。它会主动触发关机,然后开机
  • 额外的,可以通过【Ctrl + Alt + Win + x】添加标记,后续分析的时候可以用
  • 待处理完成后,打开日志文件夹,就可以看到两个 *.Boot.etl 文件。就像下图:

开始分析

选择任意一个 etl 文件,通过 WPA 来打开即可。

💡 这里需要注意,如果打开出现 0x80070032 的错误,这是由于 .net 7 的应用截止到写下此文时,WPA 还不支持打开。通过通过在 Microsoft Store 安装 WPA Preview 来解决。

就像上图这样,左侧就是记录的主要数据了,分为 System Activity、Computation、Storage、Memory、Power、Other 这个几个类型。

我们先来看看 Other 类:

WPA 本身就帮我们分了启动的阶段了。双击图标,就可以在右侧看到更相信的信息了。

接下来,我们主要关注的就是进程相关信息了。

进程在 System Activity 中

于是我们就可以看到下图这样的布局了:

通过在 Boot Phases 中选择特定的阶段,右边的时间轴就会被选择,对应的进程也会被选择。

这就是 seesion init 过程的进程情况,我们可以看到先是 smss.exe(420) 起来了,并且整个生命周期都没有退出,也就是我们在任务管理器中看到的那个。

然后就是 smss.exe(512) 了,可以看到它存活的时间只有 0.3s,那它干了啥呢?

然后就可以看到 csrss.exe、wininit.exe 等都启动了。

依此类推,我们可以看到整个启动过程中的进程启动顺序了。如果你还想看线程、堆栈等信息,也可以选择对应的信息。

关于 Windows 启动更详细的信息,可以看:https://frendguo.com/how-to-boot-with-windows

如何通过 C++ 实时监听 ETW 事件
如何通过 C++ 实时监听 ETW 事件
【译】调查并确定 Windows 运行速度变慢问题
【译】调查并确定 Windows 运行速度变慢问题
【译】丢失的 WPA 文档 —— 磁盘使用
【译】丢失的 WPA 文档 —— 磁盘使用
【译】丢失的 WPA 文档 —— CPU 调度
【译】丢失的 WPA 文档 —— CPU 调度
【译】丢失的 WPA 文档 —— CPU 采样
【译】丢失的 WPA 文档 —— CPU 采样
如何通过 PDH(Performance Data Helper) 获取性能计数器的值

1

发表回复

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