练习 2 - 使用 Windows Performance Toolkit 评估快速启动
虽然快速启动评估是在易于阅读的报告中获得测量结果的一种简单方法,但这种方法需要安装 ADK,需要一些时间来执行。 可以使用 Windows Performance Recorder (WPR) 工具快速捕获“快速启动”跟踪。
步骤 1:使用 WPA 打开“快速启动”跟踪
从“开始”菜单打开“Windows Performance Recorder (WPR)”
修改跟踪配置。
选择“一级会审”和“CPU 使用率”提供程序。
将“性能方案”更改为“快速启用”。
将“迭代次数”更改为 1 以收集单个跟踪。
单击“开始”。
输入一个路径,用来保存生成的跟踪,然后单击“保存”。
- 这会强制系统重新启动以收集并保存跟踪。
系统重新启动后,请等待 5 分钟以完成跟踪。
现在,你有了可以使用 Windows Performance Analyzer (WPA) 分析的跟踪。
步骤 2:使用 WPA 打开“快速启动”跟踪
从“开始”菜单打开“Windows Performance Analyzer (WPA)”。
在“文件”菜单中,打开在步骤 1 中创建的跟踪。
打开“配置文件”菜单,然后单击“应用...”
单击“浏览目录...”
选择“FastStartup.wpaprofile”。
单击“打开”。
现已将可视化配置文件应用于跟踪,以便获取一些常用图表(CPU、磁盘等)。
步骤 3:可视化活动时间线
查看“深度分析”选项卡中的“关注区域”图表
此视图提供了练习 1 中提到的所有“快速启动”子阶段的时间线概述。
将鼠标悬停在区域栏上,会出现一个弹出窗口,提供区域本身的详细信息。
如果将鼠标放在“启动主路径”区域上,可以看到它的持续时间。 在下面的示例中,它的持续时间为 13.6 秒。
花一点时间浏览区域树,看看所有子阶段,让自己熟悉它。
资源管理器初始化和完成所用的时间是创建 Windows桌面并使其对用户可见的用时。 此阶段(以及之后发生的一切,称为“POST 开/关”)可能会受到开机时启动的进程的影响。
从资源管理器初始化开始的位置,选择一个 90 秒的时间间隔,然后放大。
在“关注区域”图表下,还有另外两个有价值的图表:“CPU 使用率(采样)”和“磁盘使用率”。 它们将用于评估软件预加载对“POST 开/关”资源消耗和响应能力的影响。
应用程序和服务的高 CPU 使用率可能会导致用户体验不佳,如 UI 无响应或视频和声音故障。 当单个进程使用过多的 CPU 时,其他进程可能会延迟,因为它们必须争用系统资源。
当一个线程使用存储资源时,可能会增加活动的持续时间。 当多个线程争用存储时,生成的随机磁盘查找会使延迟更严重。
步骤 4:分析进程 CPU 使用率
若要评估进程消耗的 CPU 时间,请关注“CPU 使用率(采样)”图表。 “CPU 使用率(采样)”图表中显示的数据表示按常规 1 毫秒采样间隔采集的 CPU 活动样本。 表中的每一行都表示单个样本。
此采样方法不会记录样本之间发生的任何 CPU 活动。 因此,持续时间很短的活动(例如中断)在“CPU 采样”图表中没有得到充分体现。
查看每个进程的 CPU 使用率,以确定 CPU 使用率最高的进程(“权重”和“权重百分比”)。 为此,请向下滚动到“CPU 使用率(采样)”图表。 在左侧查看进程列表。 在左侧选中的每个活动进程都显示在图表上。
**提示:**
使用 WPA 图表时,可以更改视图以同时显示图表和表。 可单击“最大化”按钮以隐藏“分析”选项卡上显示的其他图表。
在此示例中,ImageSHELLY.exe 在目前分析的 90 秒的时间间隔内消耗了 12.4 秒的 CPU 时间。 由于此系统上的 CPU 有两个核心,这表示利用率的相对百分比为 6.9%。
使用此信息,可以调查导致此 CPU 消耗的具体进程,或将这些详细信息转发给负责此进程的开发人员。
可以添加其他列来提取更多信息(右键单击表列标题):
线程 ID:导致 CPU 消耗的线程的标识符
堆栈:突出显示导致 CPU 消耗的代码路径和函数的调用堆栈
在上面的示例中,只有一个线程导致了 ImageSHELLY.exe 进程中的大部分 CPU 消耗:线程 2612,其中 CPU 活动用时 10.77 秒。
堆栈显示此活动来自 ImageSTACEY.dll 模块。
步骤 5:分析进程磁盘使用率
为了评估进程消耗的磁盘带宽量,请关注“磁盘使用率”图表。
相关的列包括:
优先级:磁盘 I/O 的优先级。 三个可能的优先级为:普通、低和非常低。
IO 类型:I/O 的类型。 三种可能的 I/O 类型为:读取、写入和刷新。
进程:创建了磁盘 I/O 的进程的标识符。
路径树:结构化树,表示 I/O 访问的文件的位置。
大小:I/O 的大小(以字节为单位)。
磁盘服务时间:磁盘为 I/O 提供服务所花的时间。
IO 时间:I/O 在 Windows I/O 队列中花费的时间量。
- IO 时间始终长于磁盘服务时间,因为当存在磁盘争用或必须先完成优先级更高的 I/O 调度程序时,I/O 可以排队。
添加这些列并进行排列,可以获取此视图:
POST 开/关仅考虑普通优先级 I/O。 根据进程调查有关这些磁盘读取的信息。 磁盘读取通常比启动时的磁盘写入占用更多磁盘访问时间,因为必须读取磁盘中的大量数据才能启动进程和服务。
单击“优先级: 非常低”和“优先级: 低”系列旁边的颜色标记,以仅在图表上显示普通优先级 I/O。
在表视图中,展开“普通”优先级行。
在表视图中,展开“写入”、“读取”和“刷新”行,然后单击“大小”列的标题,按降序对内容进行排序。
屏幕应如下所示:
前面的示例演示了以下内容:
以普通优先级从磁盘读取了 152 MB 的数据。
以普通优先级将 129 MB 的数据写入了磁盘。
- 这些主要是磁盘写入,是为了将捕获的 ETL 跟踪文件保留在存储中。
在表视图中,展开“读取 IO 类型”行。
- 现在,应该能够看到在“POST 开/关”期间导致了磁盘 I/O 读取量最大的那些进程。
确定参与磁盘读取且并非 Windows 组件的前三个进程。
在表视图中,展开 ImageSTUART.exe 的“路径树”行,然后进行浏览。
在上一示例中,在“POST 开/关”期间启动 ImageSTUART.exe 时,它从磁盘读取了 13.5 MB 的数据,并且大多数访问都是在读取“Program Files”文件夹中的 DLL 组件。
使用此信息,软件开发人员应确定其组件和进程,并确定组件大小是否可缩减,或者是否可优化启动代码路径,以最大程度地减少从磁盘读取的数据量。
还可使用此数据来确定在开机时启动并导致磁盘使用率较高的第三方进程。 如果某个进程似乎出现了磁盘争用,可将其从映像中删除,或者直接在开机时不启动。