可用的内存量对总体用户体验有重大影响,包括系统的整体响应能力、在 Microsoft Store 式的应用之间切换时的响应能力,以及电池寿命。 当评估在内存不足的情况下的整体体验时,这些都是需要考虑的重要因素。 (内存不足是指在 32 位 Windows 上只有 1 GB RAM,在 64 位 Windows 上只有 2 GB RAM。)
注意事项
在针对内存不足设备时,OEM、IHV 和 ISV 需要考虑几个方面。
驱动程序和应用
总体基线内存占用情况
典型的基线 32 位零售 Windows 映像在启动后消耗大约 400 MB 的使用中内存(通过使用 ADK 中的内存占用情况评估来测量)。 如果有 10% 的余量或每 1 GB 留出 100 MB,则会为 2-3 个应用留出足够的物理内存,以便在应用之间启用快速切换。 基本操作系统内存占用空间越大,用户和应用可以使用的内存就越少。
影响基线操作系统内存占用量的主要因素是驱动程序和预加载软件,包括反恶意软件应用、设备桌面应用程序和软件更新程序。
驱动程序占用情况:包括驱动程序代码和关联的分配。 由于大多数驱动程序始终存在于内存中,因此不可分页内存(或需要位于物理内存中且不能被分页的内容)极为重要,因为它构成了系统整个生命周期内内存利用率的固定成本。 目前的硬件认证要求涵盖了不可分页的分配:MDL/连续内存分配、非分页驱动程序代码,以及基于各驱动程序的非分页池。 有关详细信息,请参阅 Device.DevFund.Memory.DriverFootprint。
硬件内存预留:其中包括内存“分割”,它减少了 Windows 可用的操作系统可见内存量,这在内存不足的设备环境中极为重要。 当前的硬件认证要求为不同的 RAM 配置提供预算: System.Fundamentals.Firmware.HardwareMemoryReservation。
预加载软件和反恶意软件应用:其中包括在开机过程中启动并在会话的生存期内保持活动状态的服务/其他进程。 需要认真考虑启动时引入进程的一组预加载软件并纳入预算。
从操作系统的角度来看,已进行了多项改进,以减少 Windows 的运行时内存占用量,使更多内存可供用户及其应用使用。 务必要确保 OEM、IHV、ISV 和 Microsoft 合作伙伴在其中每个方面都改进了内存占用情况,并在配置设备时仔细考虑,以提供一个良好的客户体验。
存储
磁盘性能
在内存不足的配置中,Windows 依赖于分页和交换内存中的内容,因此底层磁盘的性能对于提供流畅且响应迅速的用户体验至关重要。 硬件认证要求为连接待机设备上的存储提供了关键性能指标的指导。 有关详细信息,请参阅 Device.Storage Requirements。
Windows 有一些机制可以降低暂停的 Microsoft Store 应用的内存使用率,并通过有效的顺序磁盘 IO 将其恢复。 例如,假设需要从恢复时从磁盘读取的 120 MB 应用;提供 60 MB/s 顺序读取性能的磁盘需要 2 秒钟才能从磁盘中读回该应用,而提供 120 MB/s 的磁盘只需 1 秒即可将其内容引入内存。 eMMC 和 SSD 存储提供大约 120-150 MB/s 的顺序读取速率,而典型的旋转磁盘的速度大约为 50 MB/s。 Windows 中的运行时策略基于存储性能和速度较慢的磁盘(例如,HDD 和 HHDD)进行权衡,这将导致应用切换/多任务体验速度变慢和应用终止次数增加。
磁盘耐用性
非旋转存储(如 SSD 和 eMMC 磁盘)的耐用性或生存期与写入设备的数据总量以及其他一些因素(如工作负载和写入的排列)成比例。 在一个 1 GB 的设备上,考虑到内存限制,到存储的写入量会更大,这是选择部件时需要考虑的一个重要因素。
耐用性根据制造商(块大小选择、闪存类型等)有很大的不同。目前还没有标准化的方法来衡量耐用性。 建议合作伙伴在做出设备选择决定之前,先评估磁盘耐用性。
建议的目标
重要
下表提供了运行 32 位 Windows 系统的目标。 存储性能指南适用于启动存储介质,并以 2% 或 1 GB 可用磁盘空间中的较小者进行测试。
类别 | 指标 | 目标 |
---|---|---|
基线内存占用情况 | 系统级 | |
驱动程序非分页代码 |
< 20 MB | |
驱动程序非分页分配 |
< 30 MB | |
硬件内存预留 |
< 130 MB | |
启动应用、服务和任务的活动专用总页面数 |
< 40 MB | |
按驱动程序(非分页分配) | ||
驱动程序已锁定/连续内存分配 | 为所有驱动程序类型分配 12 MB | |
非分页分配 |
为 GPU 驱动程序分配 <= 6 MB 为其他驱动程序分配 <= 4 MB |
|
非分页驱动程序代码 | 为 GPU 驱动程序分配 <= 10 MB,为其他驱动程序分配 <= 1.66 MB | |
启动应用内存占用空间 | 启动应用程序、服务和任务(包括反恶意软件) | < 40 MB |
磁盘性能 | 随机性能 | |
4 KB 写入 IOPS,在 1 GB 的区域内测量 |
>= 200 IOPS | |
4 KB 写入 IOPS,在 10 GB 的区域内测量 |
>= 50 IOPS | |
64 KB 写入 IOPS,在 1 GB 的区域内测量 |
>= 25 IOPS | |
4 KB 读取 IOPS,在 10 GB 的区域内测量 |
>= 2000 IOPS | |
4 KB 2:1 读取/写入混合 IOPS,在 1 GB 的区域内测量 |
>= 500 IOPS | |
4 KB 2:1 读取/写入混合 IOPS,在 10 GB 的区域内测量 |
>= 140 IOPS | |
顺序性能 | ||
写入速度 (64 KB I/O),在 10 GB 的区域内测量 |
>= 40 MB/s | |
写入速度 (1 MB I/O),在 10 GB 的区域内测量 |
>= 40 MB/s | |
读取速度 (64 KB I/O),在 10 GB 的区域内测量 |
>= 60 MB/s (120 MB/s) | |
设备 I/O 延迟 | ||
最大延迟 |
< 500 毫秒 | |
磁盘耐用性 | 生存期 | >= 2-3 年 |
使用 Windows 评估和部署工具包 (ADK) 度量内存
与零售操作系统映像相比,ADK 中的内存占用情况评估为不同配置的基线内存占用情况提供了量化评估。
相关资源
指南
对于 OEM
OEM 对硬件/驱动程序和预加载软件的选择有很大影响,这直接影响到系统的内存占用情况:
在部署之前,请了解并量化基于干净映像安装的驱动程序和软件的影响,并确保它们符合前面所述的建议目标:
通过减少驱动程序数量或选择内存要求较低的硬件/驱动程序来减少驱动程序占用空间。
减少默认“始终运行”启动进程的数量(它们由预加载的软件和防病毒程序引入),并在需要时向使用者提供有关启用特定应用程序或功能的指导。
考虑使用其他驱动程序或软件供应商,以获得对系统内存影响较小的等效功能。
咨询驱动程序和软件供应商,了解其软件的最新版本。 此外,向合作伙伴提供关于内存使用量高于推荐值的特定驱动程序或软件的反馈,并提供来自评估工具包的跟踪和日志。
对于 IHV/ISV
能够提供内存效率高的驱动程序的 IHV 使 OEM 能够构建 1 GB 系统,从而为使用者提供出色的体验:
确保硬件部件满足前面所述的认证要求(尤其是驱动程序的不可分页占用情况、存储硬件的性能,以及应用程序的始终运行应用的内存使用情况)。
通过仅在需要时启用功能,采用“按需付费”模式,有效地使用内存:
避免将驱动程序配置为支持仅在 1 GB 系统中需要的功能(例如,创建特定于平台的驱动程序包,检测硬件并加载特定于程序包的代码)。
通过在需要时分配所需的最小内存,并在完成后立即释放,将运行时成本降到最低(例如,除非用户明确配置,否则不需要支持 RAID 存储的缓冲区)。
利用工具了解和改进内存占用情况。 下面的讨论介绍了减少占用空间的方法以及可用的工具:减少驱动程序和应用的内存占用空间。
对于反恶意软件应用 ISV
如果不进行性能优化,反恶意软件应用会对操作系统的内存占用基线和用户体验产生显著影响:
确保“始终运行”服务和进程的数量和占用空间尽可能地少。 例如:
理想情况下,仅运行一个进程/服务进行实时扫描。
其他用于更新防病毒定义的进程(例如显示用户的 UI)应仅在需要响应用户输入或通知时创建,并且应在操作完成后退出。
对“始终运行”进程高效地使用内存:
保持一个数据结构来表示签名,仅按需加载特定部分。
除非用户明确要求,否则不应启动 UI(例如,启动后立即打开的弹出窗口)。
Windows 提供了一组核心 Windows API 和相关文档以优化性能:
使用此压缩优化签名加载和维护:Xpress Compression。
为以前扫描的文件保持缓存,以最大程度地减少工作量。
使用低 CPU/磁盘和内存优先级,尽量减少影响。 例如:
专注于空闲内存占用,以确保处于空闲状态以及完全系统扫描期间以及实时扫描期间的内存占用量为 < 15 MB。 这样做将尽可能地减少这些情况下的内存占用。
验证
若要评估和验证进程和驱动程序的内存使用情况,请使用 ADK 中的内存占用情况评估。 执行评估后,在 Windows Assessment Console (WAC) 工具中打开报告,并按以下指南提取相关指标。
系统级别
可以在评估报告中查找系统范围的内存指标。 以下屏幕截图突出显示了“总使用内存”、“驱动程序非分页代码”和“分配”指标。
按驱动程序
非分页代码
若要获取各个驱动程序的特定非分页代码占比,请展开“驱动程序非分页代码”指标。
非分页分配
若要获取各个驱动程序的特定非分页分配,请展开“驱动程序非分页分配”指标,然后选择“分组依据”-> (无)。
每进程
若要获取系统上各个进程(应用程序、服务或任务)的活动专用页数量,请展开“进程专用页”指标,然后选择“活动”子指标。
在下面的屏幕截图中,Microsoft Defender(MsMpEng.exe 进程)的专用工作集占用了 14.9 MB 内存。
若要验证是否实现了启动应用程序、服务和任务的 40 MB 目标,请确定此列表中与预加载软件关联的每个进程,然后计算总和。