高级概念

分析带溢出的 PVS RAM 缓存

本文提供了有关在使用具有 溢出到磁盘的 RAM 缓存功能时准确确定 RAM 缓存大小的信息。

具有溢出到磁盘的 RAM 缓存是一项 PVS 功能,在该功能中,虚拟磁盘写入操作会首先写入 Windows 非分页池 RAM。一旦用户指定的 RAM 高速缓存大小达到其指定大小,PVS 会将 RAM 缓存内容刷新到磁盘,以便为新数据腾出空间。RAM 缓存大小会根据工作负载模式和其他变化而波动。PoolMon 是一个工具,通过查找池标签 VhdR 来拍摄当前 RAM 缓存使用大小快照。

有关此 PVS 功能的其他信息,请参阅有关 使用带溢出的 RAM 缓存的博客。

重要

本文中介绍的工具适用于掌握 Provisioning Services 高级知识的管理员。此信息可用于帮助调试超出使用常用工具和进程(包括进程监视器 (ProcMon))之外的性能相关问题。有了这些信息,您将更好地了解 PVS 驱动程序的工作原理。

内存池监视器

PoolMon (poolmon.exe) 是指内存池监视器。它用于显示操作系统收集的数据(来自系统分页和非分页内核池的内存分配,以及用于终端服务会话的内存池)。此数据按池分配标记分组。

使用非分页的池内存,您可以使用 P oolMon 工具来验证 vHDR 表示的 池标记是否存在。VhdR 用于 RAM 缓存分配;此标记与池标记 VhdL 一起在创建脚本以帮助分析与非页面缓冲池内存中的 RAM 缓存相关联的数据时非常有用。

提示

开发人员和测试人员通常使用 PoolMon 在创建驱动程序、修改驱动程序代码或对驱动程序进行压力测试时检测内存泄漏。PoolMon 还可用于测试过程的每个阶段,以验证驱动程序的内存分配和空闲操作模式,包括用于确定驱动程序在任何给定时间使用的池内存量。有关使用内存池监视器的详细信息,请参阅 Microsoft 文档

使用 Windows Performance Analyzer

Windows Performance Analyzer (WPA) 是一个工具,允许您创建与 Windows Performance Recorder (WPR) 记录的事件(特别是 Windows 的事件跟踪)相关的图形和数据表。在调试与 PVS 驱动程序、存储堆栈相关的问题以及写入 VHDX 磁盘时出现的性能相关问题时,使用 WPA 帮助识别性能瓶颈。使用这些工具,您可以运行评估并打开任何事件跟踪日志文件进行分析。有关 Windows 性能分析器的详细信息,请参阅 Microsoft 开发人员网络站点。

注意

WPA 和 WPR 包含在 Windows 评估和部署工具包 (Windows ADK) 中;有关此部署工具包的更多信息,请参阅 Microsoft 网站。访问 Microsoft 网站以获取最新版本的 Windows 性能分析器

Windows Performance Analyzer 与 Provisioning Services 的工作原理

PVS 生成由 Windows 事件跟踪 (ETW) 机制捕获的事件。此功能提供了一种跟踪和记录由用户模式应用程序和内核模式驱动程序引发的事件的方法。ETW 在 Windows 操作系统中实现,它为开发人员提供了一种使用一组事件跟踪功能的简便方法。有关更多信息,请参阅 Microsoft 开发人员网络

安装 Windows Performance Analyzer

需要在主映像上安装 WPA。

WPA 是适用于 Windows 10 操作系统 的最新软件开发工具包 的一部分。您可以选择性地安装包含 WPA 和 WPR 的性能工具包:

选定要安装的 Windows 性能工具包功能的映像

安装 WPA 和 WPR 后,使用 WPR 模拟 PVS 磁盘和文件 I/O 活动。创建此流量后,使用 WPA 分析数据。要执行这些操作,请执行以下操作:

  1. 在目标设备上启动 WPR,然后单击添加配置文件

  2. 在“添加配置文件”屏幕中,浏览至特定于 PVS 的模板或配置文件。这允许您接收 PVS 事件提供程序生成的事件。导入配置文件后,返回 WPR 屏幕并选择要分析的任何其他选项,然后单击“开 ”按钮:

    Windows Performance Recorder 示意图

    添加选项并单击“开始”后,您可以模拟 PVS 活动。在此示例中,创建了一个具有较小内存缓冲区 (128 MB) 的新写缓存。更大的文件 (279 MB) 被复制到 C:\Users\User\Documents\test.bin,以强制 PVS 驱动程序将一些数据写入非分页池,以验证发生故障转移时会发生什么,从而开始写入本地磁盘(例如,D:\vdiskdif.vhdx)。复制文件并强制缓冲区超出容量后,您可以在 WPR 中停止捕获进程并使用 WPA 打开结果。

  3. 使用 WPA 打开图形资源管理器,展开系统活动并选择一般事件。使用下面的屏幕作为示例,查看WriteData 和 WriteRamData 部分中的内容。此信息显示写入到 C:\vDisk(2419 个文件)的确切文件数,包括 D: 驱动器上的 VHDX 文件(348 个文件):

    Windows Performance Analyzer 结果的示例

    提示

    WriteData 小于显示的值,因为它缓存在内存中并且尚未刷新到磁盘。

  4. 返回到图形资源管理器屏幕,然后展开文件 IO按类型计数。下图说明了 IO(文件计数)的减少以及写入到 C:\Users\User\Documents\test.bin 和位于 D:\vdiskdif.vhdx 的溢出写入缓存文件之间所需的时间。使用这些数据,您可以查看潜在的性能瓶颈,并有效地将 PVS 筛选器驱动程序排除为问题:

    显示文件 IO 和按类型计数的 Windows Performance Analyzer 结果的示例

  5. 在查看文件计数和两次写入之间(日志文件和溢出写入缓存之间)的持续时间后,您可以在调试过程中进一步了解使用磁盘偏移量最初写入数据的位置(以及最终写入的位置)。在 Windows Performance Analyzer 中,打开图形资源管理器,展开系统活动,然后选择通用事件。修改列视图以启用 WPA 工具在各个存储层中显示数据过渡。为了进一步调试,请返回到 PVS 环境并将 RAM 缓存缓冲区设置为 0 MB,然后重新运行记录器 (WPR) 和分析器 (WPA) 工具。下图说明了溢出到磁盘是如何发生的:

显示系统活动和通用事件的 Windows Performance Analyzer 示例

分析带溢出的 PVS RAM 缓存