首页/系统与基础设施/存储速查/存储写缓存与断电保护设计
存储运维与性能60 条

存储写缓存与断电保护设计

写缓存是存储用易失内存换写性能的手段,断电保护决定这份缓存能不能在掉电后不丢数据。判断一台存储是否敢开回写,先看它有没有电池、超级电容或非易失缓存兜底,以及兜底部件是否被监控。

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​​​‌​‌‌​​‌‌‌​‌‌​​‌​‌​​‌​‌‌‌‌​‌‌‌​‌‌‌​‌‌‌​​‌​​‌‌​‌​​‌​‌‌‌​‌​​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌​​​‌‌​‌‌​​​​‌​‌‌​​​‌‌​‌‌​‌​​​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌‌​​​​​‌‌​‌‌‌‌​‌‌‌​‌‌‌​‌‌​​‌​‌​‌‌‌​​‌​​​‌​‌‌​‌​‌‌​‌‌​​​‌‌​‌‌‌‌​‌‌‌​​‌‌​‌‌‌​​‌‌​​‌​‌‌​‌​‌‌‌​​​​​‌‌‌​​‌​​‌‌​‌‌‌‌​‌‌‌​‌​​​‌‌​​‌​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

写缓存与断电保护

写缓存把待落盘的数据先暂存在控制器或盘上的易失内存里,主机写请求因此能立刻返回,控制器再合并、排序、批量下刷。代价是这份数据在掉电瞬间只存在于内存。断电保护就是补上这个缺口:用电池、超级电容或非易失缓存把缓存内容撑过一次掉电,使「回写」既快又不丢数据。

基本信息

缓存位置操作系统页缓存 / 控制器缓存 / 盘内缓存 / 分布式存储缓存,四层各管一层
两种策略回写(Write Back):先入缓存即返回;透写(Write Through):落盘后才返回
保护手段BBU 电池、超级电容 + 闪存、NVRAM / 日志盘(journal)
保护窗口只覆盖掉电瞬间的缓存内容,不覆盖误删除与逻辑损坏
监控对象电池健康与充放电自检、电容容量衰减、缓存写盘完成率
降级行为保护部件失效时多数阵列自动切透写,性能下降但数据不丢

典型使用场景

  • 数据库与虚拟化这类小随机写密集负载,需要缓存合并写、压低写延迟时
  • 评估采购或上线前,需要确认「回写能不能开」也就是有没有断电保护时
  • 电池或电容报错后,判断当前阵列处于何种降级状态、性能为何突然下跌时
  • 性能压测对比中,需要区分「有保护的开缓存」与「无保护的裸开缓存」两种口径时
  • 做高可用方案时,判断存储缓存与数据库自身 WAL 是否重复承担了同一份持久化责任时

查当前缓存与保护状态

查当前缓存与保护状态
# 看块设备层报告的写缓存模式:write back 还是 write through
cat /sys/block/sda/queue/write_cache
blockdev --getwritecache /dev/sda
# 看盘自身是否启用写缓存(SATA/SAS 通用做法,具体参数以厂商文档为准)
hdparm -W /dev/sda
# RAID 卡侧查看控制器缓存、电池与自检状态
storcli /c0 show all | grep -Ei 'cache|bbu|battery'
perccli /c0 show all | grep -Ei 'cache|bbu'
# 核对阵列级策略与降级原因(各厂商字段名不同,以官方手册为准)
storcli /c0/v0 show all | grep -Ei 'write|cache'

三种保护手段对照

手段掉电后数据在哪运维要点
电池备份(BBU)缓存内存仍供电,恢复后可继续下刷电池有寿命,需监控健康与定期充放电自检
超级电容 + 闪存掉电瞬间把缓存刷入非易失闪存恢复上电需一段写回时间,期间缓存策略可能降级
非易失缓存 / 日志盘写入即落在非易失介质上容量有限,需关注日志盘自身故障与磨损
无断电保护的盘内或控制器写缓存等于把数据放在一张纸上:掉电即丢,且主机可能已收到「写成功」的应答,导致上层事务与文件系统状态不一致。生产环境要么不开裸回写,要么确保保护部件在监控之内。
保护部件失效后阵列通常自动切透写,业务会感到写延迟上升而不是数据出错;这类「性能变差」的告警往往是最容易被忽略的真实隐患,需要和电池告警一起看。

易错点

  • 只看电池灯是绿的就不看自检日志:电池可能长期未进入自检循环,真掉电时才发现无法支撑缓存下刷
  • 把控制器缓存保护当成全链路保护:盘内缓存、机架供电、双路电源任一处出问题,风险依然存在
  • 为跑分临时关闭写缓存保护又忘记恢复,压测数据漂亮,恢复生产后策略仍是裸回写
  • 忽略降级期间的性能基线变化:切透写后 IOPS 与延迟都不在同一量级,用旧基线判断会得出错误结论
  • 缓存策略变更不走变更窗口:切策略影响的是全部业务 IO,应在低峰执行并留可回滚步骤

数据来源与参考

  • NVM Express 官方规范《NVMe Base Specification》易失写缓存与 Flush 语义
  • INCITS T10 SBC-4《SCSI Block Commands》SYNCHRONIZE CACHE 命令
  • Dell PowerStore / NetApp ONTAP 官方文档写缓存掉电保护说明

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/storage/write-cache-power-loss-protection.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​​​‌​‌‌​​‌‌‌​‌‌​​‌​‌​​‌​‌‌‌‌​‌‌‌​‌‌‌​‌‌‌​​‌​​‌‌​‌​​‌​‌‌‌​‌​​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌​​​‌‌​‌‌​​​​‌​‌‌​​​‌‌​‌‌​‌​​​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌‌​​​​​‌‌​‌‌‌‌​‌‌‌​‌‌‌​‌‌​​‌​‌​‌‌‌​​‌​​​‌​‌‌​‌​‌‌​‌‌​​​‌‌​‌‌‌‌​‌‌‌​​‌‌​‌‌‌​​‌‌​​‌​‌‌​‌​‌‌‌​​​​​‌‌‌​​‌​​‌‌​‌‌‌‌​‌‌‌​‌​​​‌‌​​‌​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​