使用 CSV 内存中读取缓存

适用于:Azure Stack HCI 版本 22H2 和 21H2;Windows Server 2022、Windows Server 2019、Windows Server 2016

重要

Azure Stack HCI 现在是 Azure 本地的一部分。 产品文档重命名正在进行中。 但是,旧版 Azure Stack HCI(例如 22H2)将继续引用 Azure Stack HCI,不会反映名称更改。 了解详细信息

本主题介绍如何通过缓存频繁读取的内容来使用系统内存提高 Azure Stack HCI 和 Windows Server 的性能。 写入内容不能缓存在内存中。

Azure Stack HCI 和 Windows Server 与群集共享卷 (CSV) 内存中读取缓存兼容。 对于使用未缓冲 I/O 访问 VHD 或 VHDX 文件的应用程序(如 Hyper-V),使用系统内存缓存读取可以性能。 (未缓冲 I/O 是未由 Windows 缓存管理器缓存的任何操作。)

由于内存中缓存是服务器本地缓存,因此它改进了数据本地性。 最近读取会缓存在运行虚拟机 (VM) 的相同主机上的内存中,从而减少通过网络进行读取的频率。 这可实现更低的延迟和更好的存储性能。

请注意,CSV 内存中读取缓存与存储池缓存不同。

规划注意事项

内存中读取缓存对于读取密集型工作负载(如虚拟桌面基础结构 (VDI))最有效。 相反,如果工作负载是极端的写入密集型,则缓存引入的开销可能会高于获得的价值,因此应禁用。

可以将多达 80% 的总物理内存用于 CSV 内存中读取缓存。 请注意为 VM 留出足够的内存!

注意

某些微基准工具(如 DISKSPD 和 VM Fleet)在启用了 CSV 内存中读取缓存时得到的结果可能比未启用时更差。 默认情况下,VM Fleet 会为每个 VM 创建一个 10 GiB VHDX(100 个 VM 总共将近 1 TiB),然后对它们执行均匀随机读取和写入。 与实际工作负载不同,读取不遵循任何可预测或重复的模式,因此内存中缓存不起作用,只会产生开销。

配置内存中读取缓存

CSV 内存中读取缓存在具有相同功能的 Azure Stack HCI、Windows Server 2019 和 Windows Server 2016 中可用。 在 Azure Stack HCI 和 Windows Server 2019 中,它在默认情况下处于打开状态,分配有 1 GiB。 在 Windows Server 2016 中,它在默认情况下处于关闭状态。

OS 版本 默认 CSV 缓存大小
Azure Stack HCI 1 GiB
Windows Server 2019 1 GiB
Windows Server 2016 0(禁用)

使用 Windows Admin Center 配置缓存

若要使用 Windows Admin Center 配置缓存,请执行以下操作:

  1. 在 Windows Admin Center 中连接到某个群集,然后从左侧的“工具”窗格中选择“设置”。
  2. 在“设置”窗格的“存储”下选择“内存中缓存”。
  3. 在右窗格中,可以使用复选框来启用或禁用缓存,还可以指定每个服务器要分配给缓存的最大内存。
  4. 完成后,选择“保存”

在 Windows Admin Center 中,可使用复选框来启用或禁用缓存。还可指定每个服务器要分配给缓存的最大内存。

使用 PowerShell 配置缓存

若要查看使用 PowerShell 分配的内存量,请以管理员身份运行以下命令:

(Get-Cluster).BlockCacheSize

返回的值针对每台服务器,以 MiB 为单位。 例如,1024 表示 1 GiB。

若要更改分配的内存量,请使用 PowerShell 修改此值。 例如,若要为每台服务器分配 2 GiB,请运行:

(Get-Cluster).BlockCacheSize = 2048

若要使更改立即生效,请暂停,然后继续 CSV 卷,或在服务器之间移动它们。 例如,使用此 PowerShell 片段将每个 CSV 移动到另一个服务器节点,并再次返回:

Get-ClusterSharedVolume | ForEach {
    $Owner = $_.OwnerNode
    $_ | Move-ClusterSharedVolume
    $_ | Move-ClusterSharedVolume -Node $Owner
}

后续步骤

如需相关信息,另请参阅: