Take the 2-minute tour ×

I got the program to work, but I can't seem to figure out how to get boot events. I tried actions, but Microsoft's documentation is severely lacking.

I was able to use the boot manager with the following command:

xbootmgr -trace rebootCycle -noPrepReboot -traceFlags BASE+CSWITCH+DRIVERS+POWER+REGISTRY -resultPath C:\

This works, but I can't seem to find out how much time it took to boot the system. In BootVis, this was really easy and it showed you explicitly when the boot process was completed and what took up that processing time. In the new version in Microsoft Windows Performance Toolkit, it doesn't seem to be that easy but maybe I'm missing something.

How do I know when the boot process is done?

Update: I have been looking more and more at those graphs and charts with no luck of finding a definitive boot time (not time since last boot, but the time it took to boot up the system). Does anyone actually use this tool? It seems like no one is interested in this issue at all!

Update 2: Here is a screenshot of how easy it is in BootVis:

alt text

Now when I run xperf –i "boot_base+cswitch+compact_cswitch_1.etl" –o boot_1.xml –a boot" I get the following error:

alt text

share|improve this question

3 Answers 3

up vote 5 down vote accepted

At first, I’d like to recommend the following document about the Windows boot process and performance analysis:


It's quite long, but it describes almost everything you need to know. While you're at it, take a look at the Xbootmgr documentation on MSDN:


The quick solution is:

  1. Run Xbootmgr to capture a timing trace

    xbootmgr –trace boot -traceFlags base+cswitch+compact_cswitch

    (setting –traceFlags to this results in smaller trace file sizes and less impact on boot performance)

  2. Run Xperf to process the trace file to XML


    where -i stands for input file and -o stands for output file

  3. Open the XML file with Internet Explorer and accept the security warning, so you can collapse and open XML nodes

    enter image description here

The boot process consists of five phases:

  • PreSMSS
  • SMSSInit
  • WinLogonInit
  • ExplorerInit
  • PostExplorerPeriod

The end of ExplorerInit means the desktop is displayed (ExplorerDesktopReady mark in Xperfview). The user can interact with the desktop, but the system is still busy starting background services and startup applications.

During the last phase, PostExplorerPeriod Xperf samples the system every 100ms and checks if it's 80% or more idle. The PostExplorerPeriod phase ends when the system accumulates 10 seconds of idle time (100 time slices).

The total boot time is therefore calculated by subtracting 10 seconds from the endTime of PostExplorerPeriod (or from bootDoneViaPostBoot)

That's 29386 – 10000 = 19386 = 19.386 seconds on the above picture.

Based on my experiments, it seems the "boot done" mark of Bootvis equals the ExplorerStartMenuReady mark of Xperfview.

enter image description here

Note: the above traces were taken on a Windows XP virtual machine running in VMware.

share|improve this answer
I don't see ExplorerStartMenuReady, etc ... in my CPU Sampling by CPU diagram! Any reason this might happen. Also, when I run the command to generate the XML file I got an error, see the new image in my post. –  Brian T Hannan Feb 16 '10 at 22:41
BTW, you are close to getting the bounty points for this if I can just get either of the two to work properly. –  Brian T Hannan Feb 16 '10 at 22:41
For the Explorer marks right click on CPU graph and choose Overlay Graph / Marks / Mark. This will only work with traces taken on XP. The proper and more flexible way is to generate the XML output. Make an empty folder (eg. C:\Traces) run Xbootmgr and Xperf from there. Use the resulting .etl file as an input parameter to Xperf. –  Ryck Feb 17 '10 at 10:15
I thought this tool was only for Vista and Win7? –  Brian T Hannan Feb 17 '10 at 16:15

The command you used is supposed to only trace the boot process, so basically everything you see is (in theory) part of the boot process.

See this article: Speed up boot time in Windows Vista using Windows Performance Toolkit.

It specifically shows how to run the xperfview program, which is the visual analyzer that allows you to visually see the entire boot process:


share|improve this answer
Been there, done that! None of those charts show the definitive time when the boot process was done. If you can point me in that direction it would be great. These charts are nice, but they don't provide me with the information I need. In bootvis it used to be so simple ... it would explicitly show you the end time of the boot process. –  Brian T Hannan Feb 11 '10 at 18:36
@Brian T Hannan: What do you mean by "time the boot process was done"? If this is the elapsed time, it can be seen on the time axis. –  harrymc Feb 11 '10 at 19:53
@harrymc: Yes, I am talking about the elapsed time but I need a marker or indication of when the boot process finished. I don't see anything that says "Boot done" or something to that effect. Take a look at the snapshot I recently added from Bootvis to see how easy this is to do with Bootvis but not Windows Performance Toolkit. –  Brian T Hannan Feb 12 '10 at 18:02
@Brian T Hannan: I'll try this on my machine and get back in touch tomorrow. –  harrymc Feb 12 '10 at 19:15
@Brian T Hannan: I did it (and I now understand why nobody uses it). In any case, the time axis is in seconds. In the example included in my answer, the boot process takes 7.6 seconds. On my machine it's supposed to take 36.4 seconds, so it's only left to me to wonder what's going on during the other 4 minutes where my machine is still unusable ... –  harrymc Feb 12 '10 at 23:05

These are "human" requirements and are easily handled with a fuzzy controller. You can even estimate the startup completion percent and the remaining seconds by means of it. This is a simple and free app that implements it:


This application has been completely ideated, designed, developed and distributed by me.

share|improve this answer
Since you're the creator, please edit your post to disclose your affiliation. You might also want to include a bit more detail, and explain that it's free to use. Also note that posting multiple answers referring to your own product will surely get you banned from using the site. –  Arjan Apr 19 at 16:09
First of all, thanks for you gentle answer. I think that the main problem in the topic is that the Disk Usage is hardly "humanly" readable, and better results can be achieved just by looking at the CPUs and memory usage. This is why I suggested my own algorithm. As Brian T Hannan told at Feb 12 '10 at 23:05: "so it's only left to me to wonder what's going on during the other 4 minutes where my machine is still unusable ..." I was actually reading the disk usage in my application some months ago, when I realized that this value's range was quite unpredictable on different machines. –  Alfa Vassallo Apr 24 at 13:07

Your Answer


