关于SSD掉电处理的思考

原创内容,转载请注明:  [http://www.ssdfans.com]  谢谢!

作者简介

 

袁戎,Memblaze SSD研发总监。想要和袁戎还有全世界的大牛讨论SSD及存储相关技术?加nanoarch为微信好友,拉你进ssdfans微信群

 

昨日SSDFAN群中有人问掉电处理怎么做,也有人说掉电保护不重要,费这个钱干嘛。我认为这个是分场景的,某些场景确实不重要,希望读者看完本文后能搞清楚可能遇到什么问题,需要用什么级别的SSD。本文不涉及具体算法。

 

先从SSD的数据模型开讲吧。

 

一般SSD写在盘上的数据分两种:用户数据;元数据。

 

用户数据很好理解,就是来自host的数据,这些数据往往已经回了ACK给host, 暂时放在系统缓存里(缓存通常是片内SRAM或者片外DDR,缓存是必然存在的,不管是不是DRAM-Less的主控)

 

元数据通常就是FTL数据,典型的情况,会在写用户数据的时候,同步写下对应的FTL mapping, 采取何种形式是各个厂家FW的核心内容。

 

这两种数据通常不会混在同一个block上,假设主控内部是单线程的,通常会先写用户数据,再写元数据。假设主控内部有多线程,那么这两个stream很多时候会是完全独立的。

最终在见下图:

 

写干净了的case, Meta和User是sync的状态, User 的mapping在他楼上的Meta中有体现。

Meta

Meta

Meta

Meta

Meta

 

User

User

User

User

User

 

 

很常见的情况会是Meta没写完,User多几笔,此时上电恢复时需要扫描User绿区,找出他的Mapping,更新到FTL里面

Meta

Meta

Meta

     

User

User

User

User

User

User

 

还有比较少见的情况,User没写完,Meta多了,上电恢复时需要抛弃一部分FTL的更新。

Meta

Meta

Meta

Meta

Meta

Meta

user

User

User

     

 

有SLC cache的情况会更复杂,这里不需要展开讲,原理差不多。

上电恢复都是扫描-恢复元数据,再确认/扫描用户数据的过程。

 

那么在异常掉电的情况会发生什么用户想象不到的事情呢?

 

先看看典型的Client SSD吧, 自然是便宜是硬道理,电容什么的,省省吧。反正如上图所示,FTL总是能恢复的,盘是能继续工作的,一般不出bug是不会死的。

 

然而,however,

  1. Cache中的最新的数据丢了,没商量。虽然掉电前你告诉host ACK了,但是cache肯定保不住。
  2. 在上图User<Meta的情况下,不好意思,最后的用户数据也丢了
  3. 在上图User>Meta的情况下,你丢多少数据是需要看运气的。
    1. 最后一个page写到一半掉电,读不出来是常见现象。

Meta

Meta

Meta

     

User

User

User

User

User

User

  1. 还有更恐怖的现象,一般厂商不会告诉你,program upper page的时候会造成lower page corruption ,这两个page 在一个cell上,调电压时掉电大概率一起坏。

Meta

Meta

Meta

     

User 1

User 2

User 3

User 4

User 5

User 6

在FTL中处理LPC,根据FW设计不同有变化,一个好的设计应该以coherency为第一要务,不能出现silent error – 比如上图User 345是好的,但是2被6带坏了。假如FTL接受345的新数据 ,后续对User 2的读必须告诉host数据错误,不能回User2 LBA的老数据

另外一种方式就是FTL丢弃User2开始的所有用户数据,但是这样损失非常大。

 

从数据保护的角度看,消费级盘异常掉电损失数据是无法避免的,哪怕是前文所述完全sync的状态

Meta

Meta

Meta

Meta

Meta

 

User

User

User

User

User

 

FW感知道经过了一个正常掉电的sync and save; 然而依然有风险存在,FW永远没法得知在这个正常掉电handler结束后,host是否有曾再发一笔简单的4k写留存在cache里。

 

 

说了这么多,感觉没电容的消费级SSD没法用了对吧。其实不至于。

 

消费级最大的用途就是笔记本,存放系统,文件系统,OS通常都有比较完善的log, 可以把数据sync起来,通常host会找到他最后的可信数据,然后丢弃那些文件系统操作到一半的数据。

 

另外当前的超极本,大部分都设计成了一体机,不希望出现拔出电池或者拔出硬盘的情况,就是为了从系统层面避免异常掉电的发生。

 

说个题外话,如果你注意到了近几年智能手机都设计成不能换电池,其实原因也是一样的。

 

单独买SSD在主机上用,还是注意避免异常掉电为好,在数据写完后,多采取安全卸载以确保数据完整落到盘上。

 

如果你打算随便拿个消费级SSD放到企业级上使用,请务必在有异常掉电风险时,上电后做超过SSD 1/4容量的多盘一致性交叉验证,因为你不知道FW自己的coherency维护到底靠不靠谱,出现silent error在企业级应用是致命的,甚至超过挂盘对业务的影响。

 

风险自担!

 

 

再看企业级掉电保护的做法。

简单的说很简单,在足量电容的保护下,

  1. 正在写的数据写完,避免flash损坏
  2. cache里ACK过的数据也要写完
  3. coherent的元数据写下去

复杂的说里面的实现很复杂,有电容电量递减的风险需避免,有为了省电cancel掉很多操作,有最后时刻发生flash error的处理。

 

一个好的掉电保护设计能够避免出现flash的各种不可预知的风险,保证ACK过的数据都能落盘,

带掉电保护的SSD虽然价格贵不少,适用各种场景:

需要进行盘的热插拔的且数据关键的应用,比如大规模数据中心需要换盘,比如军用需要及时拔盘带走

需要数据一致性强要求的,有原子性要求的

土豪当然也可以用来做系统盘

最终选择还是取决于用户的实际应用了。

分类目录 SSD, 技术文章.
扫一扫二维码或者微信搜索公众号ssdfans关注(添加朋友->点最下面的公众号->搜索ssdfans),可以经常看到SSD技术和产业的文章(SSD Fans只推送干货)。
ssdfans微信群介绍
技术讨论群 覆盖2000多位中国和世界华人圈SSD以及存储技术精英
固件、软件、测试群 固件、软件和测试技术讨论
异构计算群 讨论人工智能和GPU、FPGA、CPU异构计算
ASIC-FPGA群 芯片和FPGA硬件技术讨论群
闪存器件群 NAND、3D XPoint等固态存储介质技术讨论
企业级 企业级SSD、企业级存储
销售群 全国SSD供应商都在这里,砍砍价,会比某东便宜20%
工作求职群 存储行业换工作,发招聘,要关注各大公司招聘信息,赶快来
高管群 各大SSD相关存储公司高管和创始人、投资人

想加入这些群,请微信扫描下面二维码,或搜索nanoarchplus,加阿呆为微信好友,介绍你的昵称-单位-职务,注明群名,拉你进群。SSD业界需要什么帮助,也可以找阿呆聊。