Windows 8 加快了启动速度

谈到“基本功能”时,我们希望从启动时间开始,因为与其他功能相比,有关该功能的讨论更为激烈,需要更为慎重地权衡利弊。在设计 Windows 8 时,我们力图减少计算机的启动频率(并且我们一直致力于减少修补运行代码所需的重新启动次数)。同时,我们也在致力于尽可能地提高启动速度。这是一个非常深刻的主题,并且获得了大量读者的关注。Windows 8 在此领域取得了期待已久的重大突破,这在很大程度上要归功于整个生态系统的合作。Windows 项目管理总监 Gabe Aul 撰写了本博文(并将负责撰写一系列有关基本功能的后续博文)。
--Steven

Windows 中很少有功能会像启动功能这样引起如此程度的关注、权衡和意见分歧。出现这种情况也在情理之中,启动时间是衡量整体系统性能的一个重要指标,并且我们都意识到启动体验对于赢得用户的青睐至关重要。数据显示,57% 的台式计算机用户和 45% 的笔记本电脑用户会选择关闭他们的计算机,而不是让计算机进入睡眠模式。总体来看,半数用户会选择关闭其计算机,而不是让计算机进入睡眠模式。

Windows 7 笔记本电脑电源转换的饼图,显示睡眠比例为 45%,休眠比例为 11%,而关机(包括重新启动)比例为 45%
Windows 7 台式计算机电源转换的饼图,显示睡眠比例为 42%,休眠比例为 1%,而关机(包括重新启动)比例为 57%

本质上,人们倾向于关机是由于他们希望 PC 彻底“关闭”,不再消耗任何电量,以便延长电池使用时间或降低能源消耗。休眠也是一个不错的选择,在这种模式下也不会消耗电量,因此获得了很多人的青睐。但是,这种模式显然并非适合所有人,因为我们听说许多人希望启动计算机后迎来一个“全新的开始”,而不是继续运行上一次会话中的全部事务。在当今的 PC 上,睡眠/恢复是快速开/关转换的最佳选择,但在这种模式下仍会消耗少量电量以便保存 RAM 中的内容,虽然在经过良好优化的系统上只会消耗极少电量,但同样有可能耗尽电池电量。但是回顾一下我们目前使用手机的方式,您会发现我们很少会将其重新启动,并且始终会让手机处于类似睡眠的状态。

因此,我们所面临的挑战就是在不需要某种特殊新硬件支持的情况下,设计出一种可满足当今 PC 所有这些需求的方式。以下是我们的目标:

  • 关机时完全避免电源消耗
  • 启动后进入全新的会话
  • 按下电源开关后很快就可以使用 PC。

在 Windows 7 中,我们对启动过程进行了大量改进,包括设备驱动程序的并行初始化和触发启动服务,但是很显然,想要让启动速度进一步接近于满足所有这些需求,我们必须进行更多创新和简化。

我们的解决方案是一种全新的快速启动模式,该模式是传统冷启动和休眠恢复的混合体。

在详细介绍该模式的工作方式之前,了解一些目前 Windows 7 所采用的关机和启动方式的有关信息可能会对您有所帮助。

关机过程包括以下操作:

  1. 用户从“开始”菜单选择“关机”或按下电源按钮启动关机过程;或者应用程序通过调用 ExitWindowsEx()InitiateShutdown() 等 API 启动关机过程。
  2. Windows 向正在运行的应用程序广播消息,通知这些应用程序保存数据和设置。应用程序也可以请求一小段额外的时间,以便完成正在处理的事务。
  3. Windows 关闭每个已登录用户的用户会话。
  4. Windows 向服务发送消息,通知它们已开始关机,并陆续将这些服务关闭。具有依赖关系的已订购服务将串行关闭,其他服务将并行关闭。如果某项服务未响应,则将被强制关闭。
  5. Windows 向设备广播消息,通知其关闭。
  6. Windows 关闭系统会话(也称为“会话 0”)。
  7. Windows 会将所有待处理的数据传入系统驱动器,确保数据获得完整保存。
  8. Windows 通过 ACPI 接口向系统发送信号以关闭 PC。

启动过程包括以下操作:

  1. 按下电源按钮后,PC 的固件启动开机自检 (POST) 并加载固件设置。检测到有效的系统磁盘后,这一预启动过程结束。
  2. 固件读取主启动记录 (MBR),然后启动 Bootmgr.exe。Bootmgr.exe 查找并启动 Windows 启动分区上的 Windows 加载器 (Winload.exe)。
  3. 系统加载启动 Windows 内核所必需的驱动程序,同时内核开始运行,将系统注册表配置单元和标记为 BOOT_START 的其他驱动程序加载到内存。
  4. 内核会将控制权移交给会话管理器进程 (Smss.exe),该进程将初始化系统会话,加载并启动未标记为 BOOT_START 的设备和驱动程序。
  5. Winlogon.exe 启动,显示用户登录界面,服务控制管理器启动服务,并运行所有组策略脚本。用户登录后,Windows 为该用户创建会话。
  6. Explorer.exe 启动,系统创建桌面窗口管理器 (DWM) 进程,该进程会初始化桌面并进行显示。

如果您希望进一步了解更多相关信息,请访问以下网址:https://msdn.microsoft.com/en-us/windows/hardware/gg463386

您应该注意的关键点是:在传统关机模式中,我们会关闭所有用户会话,并在内核会话中关闭服务和设备,以便为彻底关机做准备。

以下是 Windows 8 的主要差异:与 Windows 7 中一样,我们会关闭用户会话,但我们不再关闭内核会话,而是将其休眠。完全休眠包含大量正在由应用程序使用的内存页,相比之下,会话 0 休眠数据要小得多,这将大大降低写入磁盘所需的时间。如果您对休眠的概念不太熟悉,简单来说,休眠就是将系统状态和内存内容保存到磁盘上的一个文件 (hiberfil.sys) 中,然后在恢复时重新读取该文件,并将内容恢复到内存中。借助此项技术,我们得以将启动时间显著缩短,因为在大多数系统中,读取休眠文件并重新初始化驱动程序的方式将大大加快启动速度(在我们测试过的大部分系统中,速度普遍提高了 30-70%)。

比较 30 种不同 PC 配置下 Windows 8 快速启动时间与 Windows 7 冷启动时间的条形图。Windows 8 启动时间全部介于 15 至 33 秒之间,而 Windows 7 冷启动则介于 25 至 72 秒之间。
来自系统集成测试实验室系统的测试结果样本。
单击可查看本图表的放大版本。

与执行完整系统初始化相比,恢复休眠的系统会话的工作量将大大减少,这是启动速度加快的原因之一。同时,我们添加的多阶段恢复功能可以并行利用多核系统的所有核心,将读取休眠文件和解压内容的工作分割处理,这是启动速度加快的另一个原因。这对于偏好休眠的各位读者也是一个好消息,因为该功能也会加快休眠的恢复速度。

展示各启动阶段所需相对时间的条形图。对于 Windows 7 冷启动,POST/预启动会耗费大约 1/3 的时间,系统初始化会耗费一半多一点的时间,而用户会话初始化会耗费大约 1/5 的时间。对于 Windows 8 快速启动,POST/预启动会耗费大约 1/3 的时间,而休眠文件读取和用户会话初始化各耗费大约 1/4 的时间,启动器初始化耗费的时间略少于休眠文件和用户会话初始化。
冷启动和快速启动各阶段的展示。
单击可查看本图表的放大版本。

或许我应该简单介绍一下我们处理休眠文件的方式 — 如果您读到这里并立即访问 dir /s /ah hiberfile.sys,您将发现这是磁盘上的一个相当大的文件。休眠文件的默认大小为物理 RAM 的 75%。该文件实质上是用于保存休眠数据,会在系统进入休眠的同时写入。通常,实际使用的空间要小很多,对于快速启动,使用的空间通常为物理 RAM 的大约 10%-15%,但会根据具体的驱动器、服务或其他因素而有所不同。系统处理休眠文件的方式也与处理磁盘上其他文件的方式略有不同,例如,卷快照服务会忽略该文件(略微提升性能)。您可以从提升的命令行提示符运行 powercfg /hibernate off 来禁用休眠并回收此空间。但是请注意,如果您选择这样做,则将彻底禁用休眠(包括一些非常实用的功能,例如,快速启动和混合睡眠),混合睡眠功能允许桌面系统同时进入睡眠和休眠状态,这样如果出现电源中断的情况,您仍可从休眠状态中恢复。您也可以运行 powercfg /hibernate /size 并指定一个介于 0 到 100 之间的值,该值表示休眠文件的预留大小为物理 RAM 的百分之几,但请慎重指定该值!指定的值过小可能会导致休眠失败。通常来说,除非系统的磁盘空间极为有限,否则建议您保留默认值。

关于 Windows 8 的快速启动模式,您还应该注意以下事实:我们并未针对所有驱动器执行完整的“即插即用”枚举,在此模式下,我们仍将初始化驱动器。对于那些偏好冷启动以便“刷新”驱动器和设备的读者,当您得知该特性在此新模式中仍然有效后一定倍感欣慰,虽然该过程与冷启动略有不同。

这一全新的快速启动模式可使几乎所有系统受益,无论其安装的是旋转式硬盘驱动器 (HDD) 还是固态驱动器 (SSD) 都是如此,但对于安装高速 SSD 的新一代系统效果尤为明显。您可以通过以下视频来亲眼见证其效果:

您的浏览器不支持 HTML5 视频。

请下载此视频以便在您常用的媒体播放器中观看:
高质量 MP4 | 低质量 MP4

您将在视频中注意到,从 POST 切换到 Windows 的速度有多快。与使用传统 BIOS 的系统相比,使用统一可扩展固件接口 (UEFI) 构建的系统更容易实现非常快速的预启动。这并非因为 UEFI 在本质上更快,而是因为 UEFI 编写者从零开始,其实现相对于构建于陈旧的 BIOS 上的实现更易于优化。好消息是大部分系统和主板制造商开始采用 UEFI,因此新系统将普遍实现此类快速启动。

当然,偶尔您还是需要执行彻底关机,例如,当您打开系统以添加或更换某些硬件时。我们在用户界面中提供了恢复到 Windows 7 关机/冷启动行为的选项,或者由于极少会执行这一操作,您也可以在 shutdown.exe 中使用 /full 新开关。请从命令行提示符运行以下命令:shutdown /s /full / t 0 以调用即时完整关机。同样,通过用户界面选择重新启动也会执行完整关机,然后执行冷启动。

启动模块主要由我们的内核平台小组开发,但在 Windows 8 中也有许多其他团队参与其中,以便对整个操作系统进行更改,以支持这一新模式和我们即将介绍的其他激动人心的启动变化。在内部使用过程中,我们对于 Windows 8 的启动性能感到非常满意,并非常希望您能亲自尝试一下,以便告诉我们您的感受。

Gabe Aul