写在前面,为什么要写这个文章。近日有工程师误将fast cache 理解成了cache,然后就有了一些悲剧的操作,客户数据基本上都废了。写这个文章的目的就是普及一下fast cache的基本知识以及fast cache 的一些基本概念。
文章分两篇,第一篇是基本概念,后面还有一篇是和cache的详细对比。如果还有问题,添加vx: StorageExpert我们来进行进一步的探讨。
FAST Cache 是 EMC VNX 存储系统中的一项功能,利用企业级闪存驱动器(Flash Drives)作为二级缓存,位于 DRAM 主缓存和硬盘驱动器(HDD)之间,旨在提升存储系统的整体性能。以下是对 FAST Cache 的核心要点总结:
1. 功能与原理
- 作用:FAST Cache 通过将频繁访问的数据(热点数据)从 HDD 复制到闪存驱动器,提供更低的响应时间和更高的 IOPS(每秒输入/输出操作数),从而增强系统性能。
- 工作机制:
- 数据以 64 KB 的块(chunk)为单位进行管理。
- 当某个数据块被频繁访问时,FAST Cache 的策略引擎会将其从 HDD 提升(promotion)到闪存驱动器。
- 如果数据访问频率降低或需要腾出空间,较旧的数据会被写回(write-back)到 HDD。
- FAST Cache 命中(hit)时,数据直接从闪存驱动器读取,显著降低响应时间。
- 缓存页面状态:
- Dirty Page:缓存中数据比原始 LUN 数据更新,需同步回 LUN。
- Clean Page:缓存中数据与原始 LUN 一致。
- Invalid Page:缓存中无有效数据。
这段看完,感觉Fast cache和存储的内存有很多的相似点,但也有很多的不同点。
2. 优势
- 性能提升:特别适合随机小块 I/O 和高局部性(locality of reference)的工作负载,如 VMware View、Oracle OLTP 和 SQL Server,测试显示可显著降低延迟并提高事务处理能力。
- 成本效益(TCO):通过少量闪存驱动器处理热点数据,剩余存储需求可使用低成本、高容量的 HDD,优化性能与成本比。
- 全局性:FAST Cache 是系统级功能,受益于所有启用它的 LUN 或存储池,而非特定应用。
- 非侵入式:配置和启用过程在线进行,不干扰主机操作。
3. 配置与管理
- 硬件要求:至少需要 2 个闪存驱动器,配置为 RAID 1,容量从 100 GB 到 2 TB(视 VNX 型号而定)。
- 管理工具:
- Unisphere:通过图形界面管理 FAST Cache 的创建、启用/禁用及监控。
- Secure CLI:提供命令行接口,如 naviseccli cache -fast -create 创建缓存,chglun -fastcache 0 禁用特定 LUN 的缓存。
- 启用方式:
- RAID 组 LUN:逐个启用/禁用。
- 存储池:对整个池启用/禁用,影响池内所有 LUN。
- MetaLUN:需对组成 LUN 单独禁用。
- 监控:通过 Unisphere 的“Manage Cache”或 CLI 命令(如 naviseccli cache -fast -info -perfData)查看脏数据百分比和已刷新数据量。
4. 最佳实践
- 适合场景:随机小块 I/O、高数据重访问率、HDD 性能瓶颈的系统。
- 不适合场景:顺序或大块 I/O 工作负载(如数据库日志、VNX File SavVol LUN)。
- 操作建议:
- 在非高峰时段执行缓存刷新,以减少对主机 I/O 的影响。
- 优先使用闪存驱动器配置 FAST Cache,而非 FAST VP,因其全局效益更高。
- 确保 SP CPU 使用率低于 80%,避免性能瓶颈。
- 限制:
- VNX5100 不可同时启用 FAST Cache 和 Thin Provisioning。
- 某些私有 LUN(如 MirrorView 的写意图日志)建议禁用 FAST Cache,以避免不必要的缓存占用。
5. 刷新与禁用 FAST Cache
- 刷新过程:将脏数据写回原始 LUN,可能产生大量磁盘写入 I/O,需在低负载时执行。
- 禁用方法:
- 逐个禁用 LUN 或存储池的 FAST Cache,避免直接全局销毁。
- 使用 Unisphere 或 CLI(如 naviseccli chglun -fastcache 0)操作。
- 监控刷新进度,确保两存储处理器(SP A 和 SP B)的脏数据百分比降至 0% 后,再销毁缓存。
6. 与其他技术的关系
- 与 DRAM Cache 对比:
- DRAM Cache 响应时间更快(纳秒到微秒),但容量有限,易受断电影响。
- FAST Cache 容量更大(微秒到毫秒),非易失性,适合扩展缓存需求。
- 与 FAST VP 协同:
- FAST Cache 专注于即时性能提升,处理突发性负载,粒度为 64 KB。
- FAST VP 优化长期数据分布,粒度为 1 GB,适合可预测的工作负载。
- 两者互补,FAST Cache 避免重复提升 FAST VP 已分配到闪存的数据。
下面是关于Fast cache的一些重要概念
1. Flush(刷新)
- 定义:Flush 是将 FAST Cache 中的“脏数据”(dirty pages,即比原始 LUN 更新且尚未同步的数据)写回到其原始 LUN(通常位于硬盘驱动器 HDD 上)的过程,以确保数据一致性。
- 用途:
- 清空 FAST Cache 中的脏数据,为后续操作(如禁用或销毁 FAST Cache)做准备。
- 在缓存空间不足时,通过写回(write-back)操作腾出空间。
- 操作场景:
- 禁用 FAST Cache(针对特定 LUN、存储池或全局)。
- 销毁 FAST Cache 前。
- 自动触发:当 FAST Cache 需要提升新数据但缺少空闲/干净页面时,使用 LRU(最近最少使用)算法写回脏数据。
- 故障处理:如闪存驱动器降级时,加速脏数据写回。
- 特点:
- 是一个整体流程,包含多个数据写回操作(即 destage)。
- 会产生大量磁盘写入 I/O,可能影响性能,建议在非高峰时段执行。
- 可通过 Unisphere(System > Manage Cache)或 CLI(naviseccli cache -fast -info -perfData)监控进度,查看 Percentage Dirty(脏数据百分比)和 MBs Flushed(已刷新数据量)。
2. Destage(卸载/写回)
- 定义:Destage 是将 FAST Cache 中的脏数据(dirty pages)从闪存驱动器写回到原始 LUN(HDD 或存储池)的具体动作,是 flush 过程中的核心操作。
可以把destage和flush理解成一个概念就可以了。
这里要特别强调一下,如果触发了flush或者destage的动作,不要重启控制器,如果这个时候重启控制器,落盘的动作正在进行中,是很可能导致dirty cache的,pool 或者LUN的内部状态乱掉。
3. Disable(禁用)
- 定义:Disable 是指关闭 FAST Cache 功能,使其停止为特定 LUN、存储池或整个系统提供缓存服务。禁用后,FAST Cache 中的脏数据需要通过 flush(包含 destage)写回到原始 LUN。
- 用途:
- 停止特定 LUN 或存储池使用 FAST Cache(例如,优化性能或排除低优先级应用的缓存占用)。
- 为销毁 FAST Cache 做准备(逐个禁用 LUN/存储池可加速全局 flush)。
- 操作场景:
- LUN 级别:对 RAID 组 LUN 或 metaLUN 的组件 LUN 禁用 FAST Cache。
- CLI:naviseccli chglun -l <LUN_ID> -fastcache 0
- Unisphere:LUN 属性 > Cache 标签,取消勾选 FAST Cache。
- 存储池级别:对整个存储池禁用 FAST Cache,影响池内所有 LUN。
- CLI:naviseccli storagepool -modify -id <pool_ID> -fastcache off
- Unisphere:Storage > Storage Pools > Advanced 标签,取消勾选 FAST Cache。
- 禁用后,系统会自动触发 flush(包含 destage)以清空相关脏数据。
- LUN 级别:对 RAID 组 LUN 或 metaLUN 的组件 LUN 禁用 FAST Cache。
- 特点:
- 是一个配置操作,影响 FAST Cache 的启用状态。
- 禁用后,数据访问将直接从原始 LUN 或 DRAM 缓存处理,绕过 FAST Cache。
- 逐个禁用 LUN/存储池是最佳实践,不要一下子全部disable。
4. Destroy(销毁)
- 定义:Destroy 是指完全删除 FAST Cache 的配置,解除闪存驱动器与 FAST Cache 的 RAID 1 绑定,使驱动器恢复为可用状态,供其他用途(如创建新 RAID 组或存储池)。
- 用途:
- 停止 FAST Cache 功能,释放闪存驱动器资源。
- 更改 FAST Cache 容量(需先销毁再重新创建,docu32136 第13页)。
- 操作场景:
- 通过 Unisphere:System > Manage Cache > Destroy 按钮。
- 通过 CLI:naviseccli cache -fast -destroy。
- 前提条件:所有脏数据必须通过 flush(包含 destage)清空(SP A 和 SP B 的 Percentage Dirty 均为 0%)。
- 特点:
- 是一个全局配置操作,影响整个存储系统的 FAST Cache。
- 销毁前必须完成 flush,否则操作可能失败或卡住(How to flush and disable FAST Cache 第3页)。
- 销毁后需重新创建 FAST Cache(包括重新配置闪存驱动器和内存映射),并经历缓存预热(warm-up)期。
- 如果系统中存在离线 LUN 或未正确禁用的私有 LUN,销毁可能失败。
概念之间的关系
- Flush 和 Destage:
- Flush 是清空 FAST Cache 脏数据的整体流程,包含多个 destage 操作。
- Destage 是 flush 的核心动作,指具体的数据块从 FAST Cache 写回到原始 LUN。
- 例如,禁用 LUN 的 FAST Cache 会触发 flush,其中包含若干 destage 操作。
- Disable 和 Flush/Destage:
- 禁用 FAST Cache(disable)会触发 flush 流程,以 destage 脏数据到原始 LUN。
- 逐个禁用 LUN/存储池是最佳实践,可加速 flush,减少全局销毁时的等待时间。
- Destroy 和 Flush/Destage/Disable:
- 销毁 FAST Cache(destroy)需先确保所有脏数据通过 flush(包含 destage)清空。
- 建议先逐个禁用(disable)LUN/存储池,完成 flush,再执行销毁,以避免 flush 过慢或卡住。
- 如果直接销毁而未完成 flush,操作可能失败。
- 离线 LUN 的影响:
- 离线 LUN 无法 destage(因此也无法完成 flush),可能导致禁用或销毁操作卡住。
操作流程示例
假设需要销毁 FAST Cache,典型流程如下:
- 逐个禁用 FAST Cache(disable):
- 对 RAID 组 LUN:naviseccli chglun -l <LUN_ID> -fastcache 0
- 对存储池:naviseccli storagepool -modify -id <pool_ID> -fastcache off
- 对 metaLUN 的组件 LUN 逐个禁用。
- 监控 flush 进度(包含 destage):
- CLI:naviseccli cache -fast -info -perfData
- Unisphere:System > Manage Cache,确认 Percentage Dirty 降至 0%。
- 销毁 FAST Cache(destroy):
- CLI:naviseccli cache -fast -destroy
- Unisphere:System > Manage Cache > Destroy。
总结表
概念 | 定义 | 主要用途 | 触发场景 | 关键点 |
Flush | 将 FAST Cache 脏数据写回到原始 LUN 的整体流程。 | 清空脏数据,确保数据一致性。 | 禁用/销毁 FAST Cache、空间不足、故障处理。 | 包含多个 destage 操作,可能影响性能,需监控 Percentage Dirty。 |
Destage | 将 FAST Cache 脏数据从闪存驱动器写回到原始 LUN 的具体动作。 | 同步数据到后端存储,腾出缓存空间。 | flush 过程中、空间不足、故障处理。 | 是 flush 的子操作,依赖 LUN 可用性,离线 LUN 无法 destage。 |
Disable | 关闭 FAST Cache 功能,停止为特定 LUN/存储池或全局提供缓存。 | 优化缓存分配,准备销毁 FAST Cache。 | 逐个 LUN/存储池禁用,或全局禁用。 | 触发 flush/destage,逐个禁用可加速全局操作。 |
Destroy | 删除 FAST Cache 配置,释放闪存驱动器。 | 停止 FAST Cache 功能,重新分配闪存资源。 | 全局销毁 FAST Cache。 | 需先完成 flush/destage,失败可能因离线 LUN 或私有 LUN 未正确禁用。 |