Designing for PCs that boot faster than ever before
While we're hard at work making sure you never have to turn off your PC and can run in a connected standby state, we know that there will still be reboots for updating key system components. We've previously talked about reengineering the Windows boot experience and how we modernized and touch-enabled the core boot loader and choices. We've also made boot go by very fast . In fact, it is now so fast that we had to look at the design to enable the kinds of diagnostic boots required by those who do want to dig into their BIOS or load in alternative ways.
In this post, Chris Clark, a program manager on our User Experience team, talks about the design of an incredibly fast boot experience.
Windows 8 has a problem – it really can boot up too quickly.
So quickly, in fact, that there is no longer time for anything to interrupt boot. When you turn on a Windows 8 PC, there’s no longer long enough to detect keystrokes like F2 or F8, much less time to read a message such as “Press F2 for Setup.” For the first time in decades, you will no longer be able to interrupt boot and tell your PC to do anything different than what it was already expecting to do.
Fast booting is something we definitely want to preserve. Certainly no one would imagine intentionally slowing down boot to allow these functions to work as they did in the past. In this blog I’ll walk through how we’re addressing this “problem” with new solutions that will keep your PC booting as quickly as possible, while still letting you do all the things you expect.
Too fast to interrupt
It’s worth taking a moment to watch (again, if you’ve already seen it) the fast boot video posted by Gabe Aul in his previous post about delivering fast boot times in Windows 8. In this video you can see a laptop with a solid state drive (SSD) fully booting in less than 7 seconds. Booting this fast doesn't require special hardware, but it is a feature of new PCs. You'll still see much improved boot times in existing hardware, but in many PCs, the BIOS itself (the BIOS logo and set of messages you see as you boot up) does take significant time. An SSD contributes to the fast boot time as well, as you can imagine.
If the entire length of boot passes in just seven seconds, the individual portions that comprise the boot sequence go by almost too quickly to notice (much less, interrupt). Most of the decisions about what will happen in boot are over in the first 2-3 seconds – after that, booting is just about getting to Windows as quickly as possible. These 2-3 seconds include the time allowed for firmware initialization and POST (< 2 seconds), and the time allowed for the Windows boot manager to detect an alternate boot path (< 200 milliseconds on some systems). These times will continue to shrink, and even now they no longer allow enough time to interrupt boot as you could in the past.
On the Windows team, we felt the impact of this change first, and perhaps most painfully, with our own F8 behavior. In previous versions of Windows (as far back as Windows 95), you could press F8 at the beginning of boot to access an advanced boot options menu. This is where you’d find useful options such as Safe Mode and “Disable driver signing.” I personally remember using them when I upgraded my first PC from Windows 3.1 to Windows 95. F8 helped me quickly resolve an upgrade issue and get started using Windows 95.
However, the hardware and software improvements in Windows 8 have collapsed the slice of time that remains for Windows to read and respond to the F8 keystroke. We have SSD-based UEFI systems where the “F8 window” is always less than 200 milliseconds. No matter how fast your fingers are, there is no way to reliably catch a 200 millisecond event. So you tap. I remember walking the halls and hearing people frantically trying to catch the F8 window – “tap-tap-tap-tap-tap-tap-tap” – only to watch them reboot several times until they managed to finally get a tap inside the F8 window. We did an informal study and determined that top performers could, at best, sustain repeated tapping at about a 250ms frequency. Even in this best case, catching a 200 millisecond window still depends somewhat on randomness. And even if you eventually manage to catch this short window of time, you still have to contend with sore fingers, wasted time, and just how ridiculous people look when they are frantically jamming on their keyboard.
The problem we saw with our F8 key extends to any other key you may want to press during boot. For example, in the Windows 8 Developer Preview release, the F8 key led to a full set of repair, recovery, and advanced boot options. A different key allowed developer-focused options, such as enabling debugging or disabling driver signing. And on most PCs, there are additional keystrokes used by the firmware and advertised by messages during POST: “Press F2 for Setup” or “Press F12 for Network Boot.” Now, POST is almost over by the time these instructions could be displayed. And in many cases, the keyboard wouldn’t be functional until so late in POST that it’s almost not worth the time it would take the firmware to look for these keystrokes. Some devices won’t even try.
Even so, every one of these keystrokes plays an important role, and we have historically counted on them to provide important interrupt functions in boot. However, now, there is no longer time to do any of them.
Defining the problem space
We looked at these problems from many angles, and took a holistic approach to solving them. This effort spanned across developers, testers, and program managers, examining everything from the deepest parts of the kernel to the overall user experience. Approaching this first as an engineering problem, we identified the situations and scenarios that depended on keystrokes in boot and considered literally dozens of ways to restore functionality to each scenario in Windows 8.
Here are some of the key scenarios pulled from this list:
- Even when Windows is booting up correctly, you may want to do something different – for example, you may want to boot from an alternate device such as a USB drive, go to the firmware’s BIOS setup options, or run tools from within the protected Windows Recovery Environment image on a separate partition. In general, these scenarios were accomplished in the past mainly without the involvement of Windows, using firmware-specific keys such as F2 or F12 (or some other key that you couldn't quite remember!).
- You may need to troubleshoot a problem after something goes wrong, or want to undo something that just happened. Windows has many tools that assist with situations like these, such as allowing you to refresh or reset your PC, go back to a restore point using System Restore, or perform manual troubleshooting via the always-popular Command Prompt. In the past, these troubleshooting options were accessed primarily via the Windows boot manager, by pressing F8 at the beginning of boot.
- Some error cases in startup are difficult to automatically detect. For example, the Windows boot process may have succeeded, but errors in components that are loaded later actually make Windows unusable. These cases are rare, but an example of where this might happen is a corrupt driver installation causing the login screen to crash whenever it loads. On previous-era hardware, you could interrupt boot with a keystroke (F8, for example) and reach a suitable repair option before the crashing component was even loaded. Over time, it has gotten harder to interrupt boot in this way, and in Windows 8, it’s virtually impossible.
- We needed to enable certain startup options that are mainly used by developers – both inside and outside of Windows. Previously you could access these by pressing a key like F8 at the beginning of boot. These developer-targeted options are still important and include disabling driver signature enforcement, turning off “early launch anti-malware,” as well as other options.
One key design principle we focused on was how our solutions would fit in with the rest of Windows 8. We believed that these various boot options were more alike than they were different, and shouldn’t be located in different places within Windows. To look at this from the opposite direction, no one should need to learn how Windows is built, under the hood, to know where to go for a certain task. In the purest sense, we wanted it to “just work.”
Three solutions – one experience
We ultimately solved these problems with a combination of three different solutions. Together they create a unified experience and solve the scenarios without needing to interrupt boot with a keystroke:
- We pulled together all the options into a single menu – the boot options menu – that has all the troubleshooting tools, the developer-focused options for Windows startup, methods for accessing the firmware’s BIOS setup, and a straightforward method for booting to alternate devices such as USB drives.
- We created failover behaviors that automatically bring up the boot options menu (in a highly robust and validated environment) whenever there is a problem that would keep the PC from booting successfully into Windows.
- Finally, we created several straightforward methods to easily reach the boot options menu, even when nothing is wrong with Windows or boot. Instead of these menus and options being “interrupt-driven,” they are triggered in an intentional way that is much easier to accomplish successfully.
Each of these solutions addresses a different aspect of the core problem, and together they create a single, cohesive end-to-end experience.
A single menu for every boot option
The core vision behind the boot options menu is to create a single place for every option that affects the startup behavior of the Windows 8 PC. Portions of this menu were discussed in detail in our previous blog post titled Reengineering the Windows boot experience. That post has the complete details and describes the fundamental changes made within the boot menus to enable touch interaction, Windows 8 visuals, and a cohesive user experience across the many surfaces that make up boot. Here is a screenshot of the boot options menu on one of my UEFI-based PCs:
Booting to an alternate device (such as a USB drive or network) is one of the most common scenarios that previously required interrupting boot with a keystroke. With Windows 8 UEFI-based firmware, we can now use software to trigger this. On these devices, you’ll now see the “Use a device” button in the boot options menu, which provides this functionality directly. As you can see in the above image, this functionality sits side-by-side with the other boot options. Windows no longer requires a keystroke interruption to boot from an alternate device, (assuming, for the moment, that you can reach the boot options menu itself without requiring a keystroke in boot. More on this in a minute.)
Into this same menu, we’ve added new functionality that allows you to reboot directly into the UEFI firmware’s BIOS setup (on Windows 8 UEFI hardware that supports this). On previous-era hardware, instructions for entering BIOS setup appeared at POST in messages like “Press F2 for setup.” (These messages have been around on PCs longer than perhaps any other type of UI.) They will still occur on systems that were made prior to Windows 8, where they will continue to work (primarily because these devices take several seconds to POST.) However, a Windows 8 UEFI-based PC won’t stay in POST long enough for keystrokes like this to be used, so the new UEFI-based functionality allows this option to live on in the boot options menu. After looking at the other items in this menu, we decided to place the button that reboots the PC into the UEFI firmware’s BIOS setup under the “Troubleshooting” node, within the “Advanced options” group:
A quick note about older, non-UEFI devices: legacy hardware that was made before Windows 8 will not have these new UEFI-provided menu features (booting to firmware settings and booting directly to a device). The firmware on these devices will continue to support this functionality from the POST screen as it did in the past (using messages such as “Press F2 for Setup”). There is still time for keystrokes like this to work in POST on these legacy devices, since they won’t have the improvements that enable a Windows 8 PC to POST in less than 2 seconds.
The next item appears on all Windows 8 devices – UEFI and non-UEFI alike. In the image above, you can see that we’ve added Windows Startup Settings. This new addition brings the entry point for the developer-focused Windows startup options into the unified boot options menu, and allows us to satisfy the scenarios that previously required the separate key during boot. These include items such as “disable driver signing” and “debugging mode,” as well as Safe Mode and several other options. Here is a close-up view of the informational page for these options:
The boot options menu creates a single place for every option that affects the startup behavior of the Windows 8 PC. By bringing these together into a single place, the boot options menu has become a familiar, unified, and highly usable place for these related items. Tasks such as changing Windows Startup settings, entering the UEFI firmware’s BIOS setup, or booting to a USB drive no longer require interrupting boot with a keystroke – assuming you can get to the boot options menu itself. So let’s look at how you get there.
Getting to the boot options menu (automatically) when there is a problem
There are two main situations where you’ll need to get to the boot options menu on a Windows 8 PC. The first case is when something has gone wrong and a repair action is necessary to restore the PC to full functionality. The second case (which I’ll cover in the next section) is when nothing is wrong, but you want to change some aspect of startup behavior or firmware configuration, or boot from a different device than usual.
In the first case, something has gone wrong and repairs are needed. The previous model of PC hardware required you (or someone you trust) to begin this troubleshooting process by pressing one of the several possible keystrokes during boot. For example, the options in the Windows Developer Preview release were split between Shift+F8, F8, and firmware-dependent keys such as F2 or F12, (which often varied across different PCs).
Each of these keystrokes represents the first step in troubleshooting that will lead to eventual repair. Unifying all of these in a single boot options menu removes the need to use multiple keys for the many available options. And to take this even further, we’ve removed even this one remaining keystroke by automatically loading the boot options menu when there is no way to successfully complete Windows startup.
In Windows 8, this automatic failover behavior will take you directly to the boot options menu whenever there is a problem that would otherwise keep your PC from loading Windows. This even includes cases where it appears (to Windows) that boot has succeeded, but in actuality the PC is unusable. An example of how this could occur would be a faulty driver installation that is causing the main logon screen to appear completely blank. Windows may not be aware that the screen is blank, but anyone looking at the screen knows this immediately. We now algorithmically detect when this has occurred across multiple boots, and automatically boot directly into the boot options menu inside the Windows Recovery Environment (WinRE). Since the source image for WinRE contains drivers and files that are kept separate from the main Windows installation, it’s not affected by any software changes and is a reliable environment to begin troubleshooting from the boot options menu.
Could this behavior ever result in Windows going to the boot options menu in Windows RE when nothing is actually wrong? Requiring two consecutive occurrences certainly reduces this chance, but it’s definitely possible. With this in mind, we designed the boot options menu to have a prominent Continue button in the first position, as a clear escape path for anyone not actually experiencing problems with their Windows 8 PC. We studied this in our usability lab to see what people would do when this boot options menu appeared unexpectedly. We were happy to find that the Continue button served its purpose and provided an important escape hatch against false positives.
In certain situations, Windows 8 can be even more specific about taking appropriate action to a specific problem. For example, if the core boot sequence itself fails to complete, we automatically try a second time. If this also doesn’t succeed, then Windows RE is automatically loaded and launches the specialized Startup Repair Tool. Even though this tool is tailor-made to fix many errors in the boot process, we still provide a pathway to all the other troubleshooting tools within the boot options menu for cases when the Startup Repair Tool is unsuccessful.
These automatic detection behaviors ensure the repair and recovery tools within Windows are always available, even when Windows itself is unable to load properly. Without needing to press a key or take any action, Windows RE is automatically loaded when it’s needed, allowing repair and recovery using the troubleshooting tools from the boot options menu itself.
Getting to the boot options menu whenever you want (even when nothing is wrong)
Even in non-error situations, we wanted an easy pathway to the boot options from within Windows. Many of the items in the menu are necessary even when everything is fully functional: booting to an alternate device, changing firmware configuration, and changing the developer-focused Windows Startup Settings, for example.
We wanted to make it easy to get to the boot options menu whenever you needed it, in a way that would logically fit within a fully-functional Windows 8.
In general, our preference is to create one method to do a certain thing, and make this one method the best possible. Even when there are multiple ways to do something, there is always a primary method – usually the most commonly used one, which covers the majority of cases. By choosing one way to do a certain thing, this way can be designed for a specific set of usage scenarios, and we can reasonably expect it to remain useful, usable, and desirable across these scenarios. Sometimes there are other cases that are not covered by the primary method. If these cases are not compelling enough to address, the primary method may truly be the only way.
However, in our case, we built a primary method and then added two more pathways: one to ensure we covered all the necessary scenarios, and a second to maintain a consistent pattern with existing Windows components.
The primary method of reaching the boot options is from Advanced startup on the General tab of PC settings. You can get to PC settings from the Settings charm, or by searching from the Start screen using specific search terms, such as boot, startup, safe mode, firmware, BIOS, or several others. On the General tab, you’ll see a short description of the options that will be available in the boot options menu, as well as a Restart now button. The descriptions shown on this screen are fully dynamic, and will change based on the hardware, firmware, and software available on your specific Windows 8 PC.
Pressing the Restart now button under Advanced startup begins the primary pathway to reach the boot options on a fully functional system. The system begins the normal restart process. Then, just before Windows has finished shutting down and is about to fully restart and enter POST, the entire process is paused and the boot options menu fades into view. This is the latest point that UI can even appear during the shutdown/restart sequence. We decided to pause the restart process at this middle point, so that you can choose your destination before the PC goes through another POST. By choosing the desired boot option before POST occurs, we can jump directly to the firmware setup or device-boot (when these are chosen) without needing to go through a second restart and a second POST. You can even use this menu to quickly boot into a second Windows installation if you want to. Since Windows pauses the restart sequence to show the boot options menu, this is one of the fastest ways to boot to a second OS.
For even quicker access, there’s another way of reaching the boot options menu: from within the shutdown menu. If you hold down the Shift key while clicking Restart, Windows 8 will go through the same sequence of events as if you had clicked Advanced startup from within PC settings. Since you can open the shutdown menu from any part of Windows 8 using the Settings charm, this is an especially quick way to directly reach the boot options menu. As you watch the video at the end of this post, you will notice that we've moved this command so there is a straight linear flow with your mouse to reach these options — a flow that is less demanding than in Windows 7.
The reason that we added this Shift+Restart option to the shutdown menu was because the boot options need to be available even when no one has signed in to the PC. In the old hardware model that allowed keystrokes in boot, anyone with physical access to the PC could press a key to interrupt boot and use the available boot options. To preserve those scenarios, we needed a way for someone who hasn’t signed in (but is still physically using the PC) to use the boot options menu.
The shutdown menu fits these requirements perfectly – it’s always available from the login screen, even when no one is signed in. Also, the use of the Shift modifier on Restart fits with the pattern of using Shift on other items in that same menu. You may notice that the shutdown menu appears in many other places as well, for users who are signed in as well as users who aren’t. In all of these places, the same Shift+Restart behavior still works – we felt it was important for the shutdown menu to behave consistently and predictably, wherever it appears.
There’s one other way to trigger the boot options menu during shutdown, and this way has the added bonus of working from Command Prompt. We’ve added a new flag to shutdown.exe: /o. The /o flag only works in conjunction with /r (for restart), so the full syntax is:
Shutdown.exe /r /o
We added this new flag to shutdown.exe because we wanted to keep this part of Windows consistent and predictable. Not everyone uses Shutdown.exe, but those who do, depend on it for the full set of shutdown-related tasks.
- Chris Clark