了解存储池缓存

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

存储空间直通是 Azure Stack HCI 和 Windows Server 背后的基础存储虚拟化技术,具有内置的服务器端缓存,可最大程度地提高存储性能,同时降低成本。 It's a large, persistent, real-time read and write cache that is configured automatically upon deployment. 在大多数情况下,不需要手动管理。 缓存的工作原理取决于存在的驱动器类型。

驱动器类型和部署选项

存储空间直通目前适用于四种类型的驱动器:

驱动器类型 Description
PMem PMem refers to persistent memory, a new type of low latency, high performance storage.
NVMe NVMe (Non-Volatile Memory Express) refers to solid-state drives that sit directly on the PCIe bus. 常见外形规格为 2.5 英寸 U.2、PCIe Add-In-Card(AIC)和 M.2。 NVMe 提供比我们今天支持的任何其他驱动器类型(PMem 除外)具有更高的 IOPS 和 I/O 吞吐量,并且延迟更低。
SSD SSD refers to solid-state drives, which connect via conventional SATA or SAS.
HDD HDD refers to rotational, magnetic hard disk drives, which offer vast storage capacity at a low cost.

这些可以采用各种方式组合在一起,分为两个类别:“全闪存”和“混合”。 不支持使用所有 HDD 的部署。

Note

本文介绍 NVMe、SSD 和 HDD 的缓存配置。 有关将永久性内存用作缓存的信息,请参阅 了解和部署永久性内存

全闪存部署可能性

全闪存部署旨在最大程度地提高存储性能,不包括 HDD。

关系图显示了全闪存部署,包括用于容量的 NVMe,用于缓存的 NVMe 与用于容量的 SSD,以及用于容量的 SSD。

混合部署可能性

混合部署旨在平衡性能和容量或最大化容量,并包括 HDD。

关系图显示了混合部署,包括使用 NVMe 缓存和 HDD 实现容量、SSD 缓存和 HDD 实现容量,以及使用 NVMe 缓存和 HDD 加 SSD 实现容量。

Note

单服务器配置不支持混合部署。 所有平面单一存储类型配置(例如所有 NVMe 或全 SSD)是单一服务器唯一支持的存储类型。

自动选择缓存驱动器

在具有多种类型的驱动器的部署中,存储空间直通会自动使用速度最快的所有驱动器进行缓存。 剩余驱动器用于增加存储容量。

根据以下层次结构确定哪种类型为“最快”。

示意图显示磁盘类型按速度从快到慢的顺序排列为 NVMe、SSD 和未标记的磁盘(表示 HDD)。

例如,如果你有 NVMe 和 SSD,那么 NVMe 会为 SSD 提供缓存。

如果有 SSD 和 HDD,则 SSD 会为 HDD 提供缓存功能。

Note

缓存驱动器不会为群集提供可用存储容量。 缓存中存储的所有数据还会存储在其他位置,或者将在取消暂存后进行存储。 这意味着集群的总原始存储容量仅为容量硬盘的总和。

当所有驱动器都属于同一类型时,不会自动配置任何缓存。 You have the option to manually configure higher-endurance drives to cache for lower-endurance drives of the same type – see the Manual configuration section to learn how.

Tip

在某些情况下,使用存储池缓存没有意义。 例如,在全 NVMe 或全 SSD 部署中,特别是非常小规模的情况下,没有驱动器空间被占用用于缓存可以提高存储效率并最大化性能。 同样,小型远程或分支机构部署可能具有有限的缓存驱动器空间。

自动设置缓存行为

缓存的行为是根据正在缓存的驱动器的类型自动确定的。 为 U 盘提供缓存时(例如为 SSD 提供 NVMe 缓存),只缓存写入内容。 为旋转磁盘驱动器提供缓存时(例如为 HDD 提供 SSD 缓存),将同时缓存读取和写入内容。

此关系图比较了两种缓存机制:全闪存系统中仅缓存写入,读取不缓存;而混合系统中既缓存读取,也缓存写入。

全闪存部署的只写缓存

缓存可用于全闪存方案,例如使用 NVMe 作为缓存来加速 SSD 的性能。 在全闪存部署中,缓存操作仅限于写入。 这减少了容量驱动器的磨损,因为许多写入和重写可以在缓存中合并,然后仅根据需要进行卸载,从而减少容量驱动器的累积流量并延长其寿命。 For this reason, we recommend selecting higher-endurance, write-optimized drives for the cache. 容量驱动器可能合理地具有较低的写入持久性。

由于读取不会显著影响闪存的寿命,并且 SSD 普遍提供低读取延迟,因此读取不会被缓存:它们直接从存储器中提供(除非数据是最近写入的,因此尚未从缓存中卸出)。 这样,缓存就可以完全专用于写入,从而最大程度地提高其有效性。

这会导致写入特征(如写入延迟)由缓存驱动器决定,而读取特征由容量驱动器决定。 两者都是一致的、可预测的和统一的。

混合部署的读/写缓存

When caching for HDD, both reads and writes are cached, to provide flash-like latency (often ~10x better) for both. 读取缓存存储最近和频繁读取的数据,以便快速访问,并最大程度地减少到 HDD 的随机流量。 (由于寻道和旋转延迟,随机访问 HDD 所导致的延迟和时间损失非常大。)写入操作被缓存以应对突发的数据流,并且像以前一样合并写入和重写,并最大限度地减少容量驱动器的累积流量。

存储空间直通实施了一种算法,该算法在取消暂存写入操作之前对其去随机化,以便模拟出一种看似连续的磁盘 IO 模式,即使来自工作负荷(例如虚拟机)的实际 I/O 是随机的也不例外。 这将最大化 HDD 的 IOPS 和吞吐量。

在使用 NVMe、SSD 和 HDD 的部署中缓存

当存在所有三种类型的驱动器时,NVMe 驱动器为 SSD 和 HDD 提供缓存。 行为如上所述:仅缓存 SSD 的写入,而 HDD 的读取和写入都将被缓存。 HDD 的缓存负担均匀分布在缓存驱动器之间。

Summary

下表总结了用于缓存的硬盘驱动器、用于存储容量的硬盘驱动器,以及每种部署可能性的缓存行为。

Deployment Cache drives Capacity drives 缓存行为 (默认值)
All NVMe 无(可选:手动配置) NVMe 只写(如果已配置)
All SSD 无(可选:手动配置) SSD 只写(如果已配置)
NVMe + SSD NVMe SSD Write-only
NVMe + HDD NVMe HDD 读取 + 写入
SSD + HDD SSD HDD 读取 + 写入
NVMe + SSD + HDD NVMe SSD + HDD HDD 的读取 + 写入、SSD 的只读

Server-side architecture

缓存在驱动器级别实现:一台服务器中的单个缓存驱动器绑定到同一服务器中的一个或多个容量驱动器。

由于缓存位于 Windows 软件定义的存储堆栈的其余部分下方,因此它不具有任何对存储空间或容错等概念的认识。 你可以将其视为创建“混合”驱动器(部分是闪存,部分是磁盘),然后呈现给操作系统。 与实际的混合驱动器一样,物理介质的更快、较慢部分之间的热和冷数据的实时移动几乎对外部不可见。

鉴于存储空间直通中的复原能力至少是服务器级(这意味着数据副本始终写入不同的服务器,每个服务器最多只能有一个副本),缓存中的数据受益于与非缓存数据相同的复原能力。

关系图展示了存储空间层中通过三向镜像连接的三台服务器,该层访问 NVMe 驱动器的缓存层,这些驱动器访问未标记的容量驱动器。

例如,使用三向镜像时,任何数据的三个副本将写入不同的服务器,这些副本位于缓存中。 无论它们以后是否被取消暂存,三个副本始终存在。

驱动器绑定是动态的

缓存驱动器和容量驱动器之间的绑定可以具有任何比率,从 1:1 到 1:12 及更高。 每当添加或删除驱动器时(例如纵向扩展或发生故障后),它都会动态调整。 这意味着可以根据需要单独添加缓存驱动器或容量驱动器。

动画图显示了两个 NVMe 缓存驱动器,动态映射到前四个,然后是六个、八个容量驱动器。

建议将容量驱动器数提高到缓存驱动器数的倍数,以便进行对称。 例如,如果您有 4 个缓存驱动器,与使用 7 个或 9 个容量驱动器相比,使用 8 个容量驱动器(1:2 比例计算)时,性能表现得更均衡。

处理缓存驱动器故障

缓存驱动器发生故障时,尚未取消标记的任何写入都将丢失 到本地服务器,这意味着它们仅存在于其他副本(在其他服务器上)。 就像任何其他驱动器故障后一样,存储空间会自动利用现存的副本进行恢复。

在短时间内,绑定到丢失的缓存驱动器的容量驱动器看起来不正常。 一旦缓存重新绑定(自动)且数据修复完成后(自动),它们将恢复显示为健康状态。

这种情况是为什么每个服务器至少需要两个缓存驱动器来保持性能。

动画图显示两个映射到六个容量驱动器的 SSD 缓存驱动器,直到一个缓存驱动器发生故障,这会导致所有六个驱动器映射到剩余的缓存驱动器。

然后,可以像替换任何其他驱动器一样替换缓存驱动器。

Note

可能需要关闭电源来安全更换外形规格为附加卡 (AIC) 或 M.2 的 NVMe。

与其他缓存的关系

Windows 软件定义的存储堆栈中还有其他几个不相关的缓存。 示例包括存储空间写回缓存和群集共享卷(CSV)内存中读取缓存。

使用 Azure Stack HCI 时,不应修改存储空间写回缓存的默认行为。 For example, parameters such as -WriteCacheSize on the New-Volume cmdlet shouldn't be used.

可以选择使用 CSV 缓存,或者不使用 - 由你决定。 它默认在 Azure Stack HCI 中处于打开状态,但它不会以任何方式与本主题中所述的缓存冲突。 在某些情况下,它可以提供宝贵的性能提升。 有关详细信息,请参阅 将 CSV 内存中读取缓存与 Azure Stack HCI 配合使用

Manual configuration

对于大多数部署,不需要手动配置。 如果需要,请参阅以下部分。

如果需要在设置后更改缓存设备模型,请按照Health Service 概述中的说明,编辑 Health Service 的支持组件文档。

指定缓存驱动器模型

在所有驱动器都属于相同类型的部署(如全 NVMe 或全 SSD 部署)中,没有配置缓存,因为 Windows 无法区分同一类型的驱动器之间的写入耐力等特征。

To use higher-endurance drives to cache for lower-endurance drives of the same type, you can specify which drive model to use with the -CacheDeviceModel parameter of the Enable-ClusterS2D cmdlet. 该模型的所有驱动器都用于缓存。

Tip

Be sure to match the model string exactly as it appears in the output of Get-PhysicalDisk.

Example

首先,获取物理磁盘的列表:

Get-PhysicalDisk | Group Model -NoElement

下面是一些示例输出:

Count Name
----- ----
    8 FABRIKAM NVME-1710
   16 CONTOSO NVME-1520

然后输入以下命令,指定缓存设备模型:

Enable-ClusterS2D -CacheDeviceModel "FABRIKAM NVME-1710"

You can verify that the drives you intended are being used for caching by running Get-PhysicalDisk in PowerShell and verifying that their Usage property says "Journal".

手动部署可能性

手动配置可实现以下部署可能性:

关系图显示了部署可能性,包括用于缓存和容量的 NVMe、用于缓存和容量的 SSD 以及用于缓存的 SSD 和用于容量的混合 SSD 和 HDD。

设置缓存行为

可以替代缓存的默认行为。 例如,即使在全闪存部署中,也可将其设置为缓存读取。 除非你确定默认值不适合工作负荷,否则我们不建议修改该行为。

To override the behavior, use Set-ClusterStorageSpacesDirect cmdlet and its -CacheModeSSD and -CacheModeHDD parameters. The CacheModeSSD parameter sets the cache behavior when caching for SSD. The CacheModeHDD parameter sets cache behavior when caching for HDD.

You can use Get-ClusterStorageSpacesDirect to verify the behavior is set.

Example

首先,获取 Storage Spaces Direct 的设置:

Get-ClusterStorageSpacesDirect

下面是一些示例输出:

CacheModeHDD : ReadWrite
CacheModeSSD : WriteOnly

然后执行以下操作:

Set-ClusterStorageSpacesDirect -CacheModeSSD ReadWrite

Get-ClusterS2D

下面是一些示例输出:

CacheModeHDD : ReadWrite
CacheModeSSD : ReadWrite

调整缓存大小

缓存的大小应适应您的应用程序和负载的工作集(即在任何给定时间被主动读取或写入的数据)。

这在使用硬盘驱动器的混合部署中尤其重要。 如果活动工作集超过缓存大小,或活动工作集偏移过快,则读取缓存未命中的次数会增加,并且写入操作需要更积极地取消暂存,这会损害整体性能。

可以使用 Windows 中的内置性能监视器(PerfMon.exe)实用工具检查缓存未命中率。 具体而言,可以将群集存储混合磁盘计数器中的缓存未读数/秒与部署的总体读取 IOPS 进行比较。 每个“混合磁盘”对应于一个容量驱动器。

例如,绑定到 4 个容量驱动器的 2 个缓存驱动器会导致每个服务器有 4 个“混合磁盘”对象实例。

Performance-Monitor.

没有通用规则,但如果缓存中缺少太多读取,则缓存可能太小,你应该考虑添加缓存驱动器来扩展缓存。 可以根据需要单独添加缓存驱动器或容量驱动器。

Next steps

有关其他存储知识,另请参阅: