Microsoft 性能分析:我如何知道启动过程何时完成?

Bri*_*nan 1 windows boot performance

我让程序正常工作,但我似乎无法弄清楚如何获取启动事件。我尝试了操作,但严重缺乏 Microsoft 的文档。

我能够通过以下命令使用引导管理器:

xbootmgr -trace rebootCycle -noPrepReboot -traceFlags BASE+CSWITCH+DRIVERS+POWER+REGISTRY -resultPath C:\
Run Code Online (Sandbox Code Playgroud)

这有效,但我似乎无法找出启动系统所需的时间。在 BootVis 中,这真的很简单,它会明确地向您显示启动过程何时完成以及占用了该处理时间的内容。在 Microsoft Windows Performance Toolkit 的新版本中,它似乎并不那么容易,但也许我遗漏了一些东西。

我如何知道启动过程何时完成?

更新:我一直在越来越多地查看这些图形和图表,但没有找到明确的启动时间(不是自上次启动以来的时间,而是启动系统所需的时间)。真的有人用这个工具吗?似乎没有人对这个问题感兴趣!

更新 2:这是 BootVis 中的简单截图:

替代文字

现在,当我运行xperf –i "boot_base+cswitch+compact_cswitch_1.etl" –o boot_1.xml –a boot“时,出现以下错误:

替代文字

小智 6

首先,我想推荐以下有关Windows启动过程和性能分析的文档:

http://www.microsoft.com/whdc/system/sysperf/On-Off_Transition.mspx

它很长,但它几乎描述了你需要知道的一切。在此过程中,请查看 MSDN 上的 Xbootmgr 文档:

http://msdn.microsoft.com/hu-hu/library/cc526988(en-us).aspx

快速解决方案是:

  1. 运行 Xbootmgr 以捕获时序跟踪

    xbootmgr –trace boot -traceFlags base+cswitch+compact_cswitch
    
    Run Code Online (Sandbox Code Playgroud)

    (设置–traceFlags为这个会导致更小的跟踪文件大小和对启动性能的影响更小)

  2. 运行 Xperf 将跟踪文件处理为 XML

    xperf –i "boot_base+cswitch+compact_cswitch_1.etl" –o boot_1.xml –a boot
    
    Run Code Online (Sandbox Code Playgroud)

    where-i代表输入文件,-o代表输出文件

  3. 使用 Internet Explorer 打开 XML 文件并接受安全警告,这样您就可以折叠和打开 XML 节点

    在此处输入图片说明

启动过程包括五个阶段:

  • 短信前
  • SMSS初始化
  • 登录初始化
  • 资源管理器初始化
  • 后探险家时期

ExplorerInit 结束意味着桌面显示出来(Xperfview 中的 ExplorerDesktopReady 标记)。用户可以与桌面进行交互,但系统仍然忙于启动后台服务和启动应用程序。

在最后一个阶段,PostExplorerPeriod Xperf 每 100 毫秒对系统进行一次采样,并检查它是否处于 80% 或更多的空闲状态。当系统累积 10 秒的空闲时间(100 个时间片)时,PostExplorerPeriod 阶段结束。

因此,总启动时间是通过从PostExplorerPeriod(或从bootDoneViaPostBoot)的endTime中减去 10 秒来计算的

上图中29386 – 10000 = 19386 = 19.386秒。

根据我的实验,Bootvis 的“启动完成”标记似乎等于 Xperfview 的 ExplorerStartMenuReady 标记。

在此处输入图片说明

注意:上述跟踪是在运行在 VMware 中的 Windows XP 虚拟机上进行的。