The following is taken from my book Windows System Performance Through Caching.
When the Windows OS boots, it uses information from previous boot experiences to speed up the boot process. Microsoft calls this “ReadyBoot”.
The process of booting up the OS involves both a lot of disk access and CPU instructions. But left alone, the resources used at boot time would alternate between periods of heavy IO and periods of heavy CPU use while the disk is idle. In talking about performance in today’s systems, File I/O is the performance bottleneck.
So to improve the boot performance, as it does to improve performance in so many areas, Microsoft uses caching. ReadyBoot pre-caches files that will be needed into memory before they are requested. It uses information gathered from recent boots to know when and what are needed. This isn’t static information determined in a lab, but from actual data on the patched version you are running now, and on your hardware. This keeps the disk reading and avoids the alternating behavior for nearly the entire boot process.
I built a tool to look at the boot performance effect of ReadyBoot. Called Whats My Boot?, this tool provides a graphical analysis of previous boot activity.Below is a screen shot of a fairly new system that shows the improvements in boot time made after the first few boots. The middle graph shows the time it took to boot each of the previous boots, with the first boot after OS installation being on the far left.
ReadyBoot typically can reduce the boot time 50 – 80%. Eventually, this can be enhanced by the defragmentation process that will place the boot files at the fastest portion of the disk for quick access. The topmost graphic in the image shows the effectiveness of the pre-read caching, with green indicating data read in advance of being requested and red indicating data that was needed too soon.
You can click on an event to see the details of the event.
The detail can be useful to determine why a particular machine is booting slowly. For example, a bad driver might show up as a large DriverInitTime.
The tool also shows data with boots from hibernation…
… or sleep mode
This stuff normally happens automatically, which is great. But if you use virtual machines with either a master image or snapshots, whether for VDI or as I do for Sequencing, you want to make sure that you go through several reboot cycles before cutting that snapshot. To be effective, you must boot, log in, and wait 3 minutes before rebooting again. As ReadyBoot uses data from for last 5 boots, you want to do about 7 to achieve best results.
You can read more on this, and other forms of caching in my book.