Windows Server 虚拟磁盘缓存设置

Windows Server 虚拟磁盘缓存设置

在 Azure 或 Hyper-V 下的 Windows 中,虚拟磁盘的磁盘策略写入缓存设置始终会从服务器配置中显示为已启用,而不管底层磁盘系统上的写入缓存设置的实际状态如何。但是,还有第二个设置与第一个设置相关,在虚拟磁盘的情况下,其效果尚不清楚,第一个设置已在设置中选中/启用,但实际上在虚拟磁盘硬件中已禁用。磁盘设置如下所示:

[x] Enable Write Caching on the device
    [ ] Turn off Windows write-cache buffer flushing on the device 

直觉上,我认为没有理由启用此功能,因为该设备实际上并未启用写入缓存,并且如果它是物理磁盘,则此设置将被禁用。但是本文建议启用它可以让操作系统和硬件免于执行无意义的工作,从而提高性能,同时保持相同的数据完整性,在这种情况下,在设置中启用了写缓存,但实际上在硬件中已禁用:

...由于虚拟硬盘实际上根本不是磁盘,因此就虚拟磁盘而言,该设置毫无意义。但第二个设置不同,并且确实有意义,因为它控制磁盘的缓存刷新开/关设置。当您选择第二个设置时,缓存刷新基本上会假装成功 - 至少在软件堆栈级别。...当您在虚拟机中的虚拟硬盘的客户机操作系统中选择此设置时,您可能会看到在虚拟机中运行的应用程序的性能有所提高。但请始终记住,就数据完整性而言,主机的磁盘缓存设置才是最重要的。

有人可以确认这个说法是否属实以及对于 WRT 数据完整性来说是否安全吗?

答案1

我认为,如果您的数据磁盘最初配置了“读取/无”缓存,那么这些设置实际上没有任何意义。这文章指出这更多的是一个主机缓存的问题,可以通过服务管理 API 或 Powershell 命令进行修改。

答案2

我建议仅在电源/UPS 或存储系统级别具有冗余的情况下,使用启用了“关闭设备上的 Windows 写入缓存缓冲区刷新”选项的 VM。如果启用该选项,则应考虑在断电或硬件故障的情况下数据丢失。我建议使用 S2D、StarWind 或 HPE VSA 作为软件定义存储,它们可以在节点级别为您提供冗余,以便您可以在本地 VM 中使用写入缓存功能。

对于这种情况,“关闭设备上的 Windows 写入缓存缓冲区刷新”选项将提高整体 VM 系统性能:RAM 用作热数据的来源,仅当 RAM 已满时才会执行数据刷新到设备。

我建议禁用写入缓存,以防您正在运行 Hyper-V 独立主机并且 PSU 连接到单条线路。

这些假设仅对本地虚拟化主机可靠。云供应商有自己的功能来为其实例提供冗余,因此,我仅对我的 Amazon VM 使用写入缓存功能。

编辑:要点该功能可减少执行 I/O 操作的延迟

  • 一旦 WB 缓存被禁用,I/O 请求将直接进入底层存储,从而导致最大延迟。
  • 如果启用“在设备上启用写入缓存”,则 I/O 首先进入 RAM,一旦数据变为“冷”,Windows 操作系统就会将其刷新到存储中。在这种情况下,它减少了延迟。
  • 当两个 WB 选项都选中时,由于热数据和冷数据位于 RAM 中,因此延迟最小。只有当 RAM 已满时,数据才会刷新到存储中。

相关内容