本部分概述了快速启动体验以及我们对合作伙伴的建议,旨在为客户提供最佳开/关机体验。
我们每天可以打开和关闭电脑很多次。 根据设备的使用模式和电池的剩余使用寿命,电脑可能会关机、睡眠或休眠。 系统启动是用户对设备的首次体验,同时也是设备生命周期内的一个反复出现的体验。 通过客户遥测数据了解到,用户每天至少会启动和关闭电脑一次。 虽然连接待机功能降低了设备必须启动的频率,但在软件和固件更新、电池电量低以及设备配置发生了重大更改时,仍可能需要启动。
从 Windows 8.x 开始,开/关机转换的速度明显快于以前的 Windows 版本。 之前使用的用户交互模型是使用按键来指示备用启动路径来中断启动。 由于启动速度大幅度提升,中断启动是不现实的,还会对启动体验产生负面影响。 在以前的版本中,对于决策点来说,尽早停止启动过程是很重要的,例如启动到一个备用操作系统,因为向后移动是一个漫长而缓慢的过程。 在启动速度较慢的情况下,创建可以检测和激活按键的时间段也要容易得多。 在 Windows 8.x 和 Windows 10 中,这种情况不再存在了。
利用休眠技术,默认的启动性能得到了大幅提升。 有关对开/关机体验的性能所做的改进,请参阅休眠 (S4) 暂停和恢复。 本主题中的注意事项概述了快速开/关机转换的用户模型、与这些转换相关的选项,以及 OEM/ODM 提供该体验所需的组件。
注意事项
启动延迟的主要原因是 OEM 软件预加载。 快速启动占整个启动时间的 50% 左右,并且直接受到以下开机时启动的第一方和第三方进程的影响:
正在恢复的服务
启动的应用,如托盘运行的快捷方式、OEM 状态指示灯等
防病毒活动
这些进程会消耗 CPU 和磁盘系统资源,并可能导致瓶颈问题,从而会使设备无响应、延迟应用启动时间或使应用运行缓慢。
在优化开/关机性能时,请考虑以下建议:
确定哪些非自带第一方或第三方进程已加载并在系统上运行。
确定开机时通过注册表运行键启动的进程;它们通常与 IHV 的硬件相关。
避免在启动路径中包含托管代码进程。
使用相关技术在开机时延迟启动进程。
考虑将传统桌面应用转换为 Microsoft Store 应用,这不会对启动产生影响。 与 IHV 合作,利用 Microsoft Store 设备应用。
了解内存消耗对开/关机转换时间的影响,并遵循以下建议:
优化内存消耗以减小休眠文件的大小。
使用新的休眠文件诊断模式。
避免在笔记本电脑和超轻薄可携型计算机上启用混合睡眠,因为它会在待机暂停 (S3) 时生成休眠文件。
迁移更新程序进程,使用 AM 来减少加载的进程数。
了解磁盘吞吐量对于开/关机性能至关重要。 例如:
平均来说,休眠文件读/写时间占启动“开始”屏幕用时的 50%。
大多数系统在启动时都会受到磁盘的限制。
速度更快的 HDD/SSD 可以降低在启动时加载和初始化大量软件预载的影响。
考虑均衡 CPU、磁盘性能和内存容量。
了解混合驱动器对于开/关机性能有利,并考虑使用新的混合驱动器提示功能。
快速启动
从 Windows 8.x 开始,默认的关机和重启方案已更新,并命名为“快速启动”。 快速启动从关闭进程开始,并包括将数据写入磁盘,类似于休眠进程。 主要区别在于所有用户会话(会话 1)都已注销,剩余的信息被写入休眠文件。 当你从这个状态启动电脑时,Windows 通过读取休眠文件来加载先前的初始化状态,而不是运行完整的启动过程(在其中初始化 Windows、驱动程序、设备和服务)。 这种方法加速了初始化锁定或“开始”屏幕的过程。
此外,休眠技术的使用也得到了扩展,创建了一种新的默认启动和关机体验,比完全启动要快得多。 有关详细信息,请参阅下图:
更快的启动和关机序列使用休眠基础结构将电脑置于休眠状态。 与完全关机和启动不同,用户会话将关闭,并执行休眠。 因此,休眠文件要小得多,这可以确保休眠和恢复过程也更快。 此序列还利用了并行优化的优势。
创建带有系统服务的驱动程序或应用的开发人员,以及系统集成商,应监视驱动程序的质量问题,例如内存泄漏。 尽管驱动程序质量始终很重要,但请注意,内核重启之间的运行时间可能比以前版本的 Windows 要长得多,因为在用户发起的关机过程中,系统会保留和还原内核、驱动程序和服务,而不仅仅是重新启动。
完全启动
为了获得最佳启动体验,请考虑以下建议:
平衡 CPU 性能、磁盘性能和内存容量。
优化 UEFI 读取路由性能。
确保叶节点设备的驱动程序遵循快速恢复原则。
确保驱动程序尽快完成其 S0 设置电源 IRP,以防其他设备启动它们的 S0 设置电源 IRP。
针对内存泄漏验证驱动程序和服务。
除非绝对必要,否则请避免注册服务来接收电源管理事件通知。
确保驱动程序不会等到其 D_IRP 完成后才完成 S_IRP。 这样做可以阻止其他设备接收其 S_IRP,否则会导致序列化延迟,并增加整体暂停时间。
关机 API 行为
为了确保与应用的最佳兼容性,同时为新应用提供最佳体验,已创建新标志用于请求关机以便快速启动。 下表介绍了关机 API 的新标志和行为。 MSDN 上提供了有关这些 API 和标志的详细信息。
API | 关机行为 |
---|---|
InitiateSystemShutdownEx | 始终执行完全关机 |
InitiateSystemShutdown | 始终执行完全关机 |
InitiateShutdown | 使用 SHUTDOWN_HYBRID 标志执行关机以实现快速启动 |
ExitWindowsEx | 使用 EWX_HYBRID_SHUTDOWN 标志执行关机以实现快速启动 |
区分何时会发生休眠或关机以实现快速启动
设备驱动程序将收到一条通知,在关机时转换到 S5 目标电源状态,而不是 S4 休眠状态,后者是实际的电源状态。 这使得驱动程序可以设置一个不同的唤醒行为,以便在关机后快速启动。 关于目标和有效状态,可以在 System_Power_State_Context 结构中找到。
对于大多数设备,S4 和 S5 唤醒行为之间的区别是在总线驱动程序层受控。 如果你实现了自己的总线驱动程序,并需要区分这两种行为,请联系 Microsoft 代表以获得更多信息。 为了提供快速启动体验,请遵循以下最佳做法:
平衡 CPU 性能、磁盘性能和内存容量。
优化 UEFI 读取路由性能。
确保叶节点设备的驱动程序必须遵循快速恢复原则。
确保驱动程序尽快完成其 S0 设置电源 IRP,以防其他设备获取它们的 S0 设置电源 IRP。
避免在开机时启动应用,但反恶意软件和设备应用除外。
不要使用 RunOnce 在开机时启动应用。
避免启动路径中出现托管代码应用。
使用任务计划程序延迟启动非关键应用。
针对内存泄漏验证驱动程序和服务。
只有在绝对必要时才注册服务以接收电源管理事件通知。
确保驱动程序不会等到其 D_IRP 完成后才完成 S_IRP。 这样做可以阻止其他设备接收其 S_IRP,否则会导致序列化延迟,并增加整体暂停时间。
休眠 (S4) 暂停和恢复
在休眠转换中,内存的所有内容都被写入主系统驱动器上的文件。 这一过程保留了 Windows、应用和设备的状态。 如果合并的内存占用量消耗了所有物理内存,则休眠文件必须足够大,才能确保有足够的空间来保存物理内存的所有内容。 由于数据被写入非易失性存储,DRAM 无需保持自我刷新,可以关机。 此行为会导致功耗非常低,类似于电脑处于关机状态。
休眠的用户场景
以下是运行新式版本 Windows 的电脑中需要休眠技术的关键场景:
轻度休眠到休眠:系统处于空闲状态,会自动转换为休眠状态。
电池电量严重不足:Windows 自动使电脑休眠,以防电池电量用尽时数据丢失。
热状况:系统达到预定义的温度,需要自动关闭系统电源以保护电路。
由用户发起:用户选择休眠来保存当前用户状态,耗电量非常小。
尽管此列表可能随着电脑的需求和功能的改进而不断变化,但预计很多电脑都将继续使用休眠,尤其是在连接待机无法使用时。
休眠阶段
在休眠阶段,Windows 通知各个组件正在进入休眠阶段,然后保存用户的上下文和系统状态。 数据被压缩并写入磁盘;系统使用系统上的所有处理器核心来压缩内存中的数据,并在将数据写入磁盘时使用一个处理器。 将所有数据写入磁盘后,Windows 会通知固件已准备好关闭电源。
固件通知是通过以下方式完成的:使用 ACPI 4、第 4.5 节、表 4-13 和第 7.3.4 节中定义的 S4 对象中提供的值写入睡眠类型寄存器。 这向固件表明,下一次接通电源后,将尝试恢复,而不是完全启动。
恢复阶段
休眠恢复从固件 POST 开始,这与完全启动类似。 Windows 启动管理器通过检测有效的休眠文件检测到需要从休眠状态恢复,并指示系统恢复,还原内存内容和所有体系结构寄存器。 在休眠恢复的情况下,将从磁盘读取内存的内容,对其进行解压缩和还原,使系统处于休眠时的确切状态。 在还原内存内容之后,将重新启动设备,计算机恢复到运行状态,准备登录。
请注意,尽管设备驱动程序和服务会收到通知,但不会重新启动;它们会还原到休眠阶段发生时所处的状态。
系统内存的还原分为两个阶段。 第一阶段是为了还原内核的最小部分,然后使用该部分来完成系统其余部分的内存还原。 第一阶段必须在单一的处理器环境核心下完成。 但是,还原系统内存的最小部分后,可以使用所有处理器核心来并行解压缩和还原剩余恢复的数据,从而显著加快该过程。
根据处理器的能力,将加密/解密算法调整至适当大小,进一步改善这一过程。
并行化优化仅适用于这样的系统:可以保证从可用的最小环境中获得它可能需要的所有数据。 因此,如果添加到故障转储堆栈的组件(在休眠恢复操作过程中使用)没有同时被声明为该最小环境的一部分,则无法使用它。 如果要创建此类组件,如故障转储筛选器驱动程序或使用单独的故障转储路径的设备,请与 Microsoft 联系,让他们指导你完成此过程。
固件 POST
更快的 POST 时间缩短了从开机到可用状态的总时间。 由于 Windows 快速启动速度显著提高,POST 时间可能在总启动时间中占据更大比重。 Windows 硬件认证要求中记录了有关 POST 时间要求的其他信息。 分析表明,在预操作系统环境中完全枚举并启用完整的硬件组件补充的平台上,POST 时间要求是可以实现的。
从 Windows 8 开始,所有电脑都必须根据统一可扩展固件接口 (UEFI) 规范 2.3.1 或更高版本发布其固件。 由于很多系统都是基于较早的传统固件设计的,因此有机会优化固件设计以更好地适应更快的 POST 时间。
UEFI 体系结构流经固件和平台初始化的几个阶段。 根据这些明确定义的阶段,有几个设计注意事项可能会缩短 POST 时间。
安全性 (SEC)
在 SEC 阶段,平台对存储在 SPI NOR 闪存上的平台微代码执行提取、解压缩和验证操作。 开机时,平台具有初始化 RAM 及其总线。 下面的列表包含此阶段需要考虑的一些问题:
微代码是特定于 SKU 的还是针对多个平台通用的? 微代码的大小会影响到 RAM 的解压缩传输和验证。
请考虑重构微代码,使其尽可能小。
是否可以提高 SPI NOR 闪存总线速度? 许多平台都支持 SPI NOR 闪存部分的多个时钟速度。 它们通常以较低的时钟频率(例如,16 MHz)运行,频率可以增加。
请考虑提高总线速度,以减少从 NOR 闪存到 RAM 的微代码传输延迟。
平台是否有足够的 NOR 闪存? 为了节省成本,许多平台都设计了最低限度的 NOR 部分,导致微代码的压缩率较高,解压缩的成本较高。
请考虑使用较大的 NOR 闪存部分,以较少的压缩来存储代码。
平衡微代码的压缩、设计和传输可能会提高 POST 时间的性能。 在 SEC 结束时,经过验证的微代码会将 UEFI 内核和环境的其余部分从 NOR 闪存复制到 RAM。
预 EFI 初始化 (PEI)
内核进入 RAM 后,平台初始化内核并开始验证代码、系统表和其他元素的完整性。 考虑设计一个针对平台优化的 UEFI 内核,而不是通用的非优化内核。 优化可以包括:
在内核生成期间编译标志,优化内存缓冲区
链接到平台初始化不需要的模块
有关如何优化 UEFI 内核的建议,请咨询固件设计人员。
驱动程序执行环境 (DXE)
初始化时,将加载内核 UEFI 驱动程序和第三方 DXE 驱动程序。 使用固件设计人员提供的工具,所有者可以确定哪些 DXE 驱动程序的性能最低,并评估是否可以优化代码。
这个阶段的另一个注意事项是已加载的 DXE 驱动程序的数量。 平台应只加载那些需要保证启动的驱动程序,而不是依赖于可选硬件。 最终设计取决于目标启动选择。
启动设备选择 (BDS)
在平台初始化过程中,启动设备选择是在移交给 Windows 之前的最后一步。 在此步骤中,固件确定哪些启动设备已存在,哪些启动设备要移交以执行。 对启动变量的精心设计和优化将影响到 Windows 启动加载程序的转换。
USB 枚举
POST 的 USB 枚举部分可能需要很长时间。 随着 Windows 8 中引入了新更改,默认启动情况下将不再需要 USB 枚举。 有关其他 POST 时间优化,请联系你的芯片和固件供应商。 如果启动序列设置为启动到任何其他路径,建议枚举 USB,例如以下场景:
在启动顺序中还有其他更高的选项,例如,当 Windows To Go 启动选项在启动顺序的顶部插入一个 USB 类启动条目时。
设置了启动下一个变量,导致使用其他启动设备。
故障紧接着之前的启动发生。
“应用”
启动路径中的桌面应用将影响开/关机转换和能源效率。 任务管理器将标记具有很大影响的桌面应用,并就始终运行的桌面应用通知用户。 有关详细信息,请参阅启动应用。 我们强烈建议自动维护桌面应用,并仅在需要时运行它们,而不是自动启动桌面应用。
建议的目标
重要
定义的所有目标均不包括 BIOS 初始化时间。
为了提供出色的开/关机体验,建议电脑满足下表中的目标。
方案 | 平板电脑 (CS) | 敞篷车 | 笔记本 | 一体机 |
---|---|---|---|---|
快速启动(秒) | < 25 | <= 15 | <= 15 | <= 15 |
休眠文件大小 (MB) | < 300 | <= 300 | <= 300 | <= 300 |
待机恢复(秒) | 不适用 | <= 7 | <= 7 | <= 5 |
指标 | 计价单位 | 目标 |
---|---|---|
通过注册表运行键启动的进程数 定义为每次开机时使用运行键启动的进程总数。 对 POST 开/关机的资源利用率(CPU 和磁盘)有直接影响。 可以通过查看快速启动跟踪中的一些 ETW 事件来找到(通过使用通用事件表): 提供程序名称:Microsoft-Windows-Shell-CoreTask: Explorer_ExecutingFromRunKeyOpcode: win:Start 事件(命令)的字段 #1 提供了用于启动进程的命令行。 |
count |
< 10 |
快速启动 POST 开/关机期间的正常优先级读取磁盘 IO 此指标可以直接从 Windows 评估控制台的评估结果中获得,具体位于: 总启动 > POST 开/关机 >总磁盘使用量 > 正常优先级读取量(字节) |
MB |
< 30 |
验证和测试
可以使用 Windows 评估工具包来提高电脑性能,使其超过最低要求。 与开/关机体验相关的 Windows 评估包括:
快速启动评估
完全启动和关机评估
待机评估
休眠评估
“快速启动”和“休眠”评估的新版本包括“休眠文件诊断”模式。 此模式有助于检测影响大型休眠文件大小的驱动程序和应用,并检测未实现多阶段恢复的存储驱动程序。
休眠文件中存储了两大类与系统评估有关的内存页面:驱动程序非分页池页面,以及应用/服务专用工作集页面。
新模式将帮助你了解必须改进哪些软件组件以改进内存的使用。
工具和技术参考
你可以详细了解开/关机体验,并从以下资源中下载工具来分析性能:
资源标题和链接 | 内容类型 | 说明 |
---|---|---|
启动应用 | 项目 | 强调了启动应用对 Windows 设备的一些影响,并向开发人员 (ISV/IHV) 和 OEM 提供指导,让他们重新思考启动应用的使用模式,从而改善电池使用寿命和响应能力。 |
开/关评估结果 | 文档 | 可帮助你解读开/关机评估产生的结果:启动性能(快速启动)、启动性能(完全启动)、待机性能和休眠性能。 |