你是否会遇到这样一种情况:
当你正在文思泉涌地敲打键盘赶稿件时,电脑突然抽风,然后,你就看到了绝望的蓝色(系统崩溃,电脑蓝屏了)。
其实office软件有自动保存的功能,当电脑重启,再次打开WORD文件时,会提醒你要不要导入最后自动保存的内容(这个方法不是100%管用)。
扯远了哈……
类似的情况,你是否想过,正在往SSD写入数据时,系统突然掉电了,那SSD的数据会怎么样呢?
总的来说,系统掉电会给SSD带来三种情况的灾难:
1. 用户写入数据丢失。我们在前面的文章提到“在Host写入数据时,并不会直接交给主控去写入NAND闪存,而是先把数据丢到DRAM缓存中,之后再传到主控内部的缓存中,最后再由主控写入NAND闪存”(详细内容请见本公众号历史文章“SSD内涵与外在俱佳—记SSD之结构与工作原理”)。我们假设Host写入的数据在放到DRAM这一步时突然掉电,由于DRAM是挥发性记忆体,只要断电,数据就会丢失。这对用户来说肯定会崩溃的,对企业级的用户更是不能容忍的。
2. FTL mapping信息丢失。SSD在完成一部分数据写入的时候需要更新闪存转换层FTL的mapping table(FTL相关详细内容请见本公众号历史文章“如何成为一个具有领导力的SSD主控?”), 如果在还未来及更新mapping table时,系统掉电,那么后果就是整块SSD对于系统不能识别。目前市场上SSD厂商都不会提供修复mapping table的工具。要想修复这块SSD就必须返厂维修,SSD厂商会通过特殊的方式对mapping table进行重建,并找到丢失的数据。
3.
造成SSD坏块增加。系统的突然掉电有可能会使NAND闪存中多个bit发生错误,如果错误的bit超过了ECC的纠错能力,主控就会将其标记为坏块,后续就不能用来存储数据。这也就是为什么在不正常断电之后,我们有时会看到坏块的增加。
在上一篇文章("你知道企业级SSD与消费级SSD的区别吗?")中,我们有介绍企业级SSD与消费级SSD区别。简单言之,企业级SSD更加注重数据的安全性,而消费级SSD更加注重的是成本。
对于消费级SSD,由于对数据的安全性要求不能那么的严格,并且ECC/LDPC纠错技术,Wear-leveling技术以及其他的Flash管理技术基本可以满足需求。
但是,对于企业级的SSD,这些措施并不能完全满足数据安全性的苛刻要求。
目前针对企业级SSD掉电保护的措施有两种:
1.增加电源储存电路(power hold-up circuit)。
2.关闭“回写缓存”(write-back caching)功能。
接下来,我们就这两种保护措施展开介绍:
1.增加电源储存电路(power hold-up circuit)
大多数的企业级SSD会有一块专门检测SSD供电电压的电路,如果检测到供电电压低于设定的阈值时,此时会给SSD主控发送预警。接着启动power hold-up电路,保证SSD正常的操作。
SMART公司的一款XceedIOPS SSD的掉电保护电路图如下:
Power hold-up电路中的电压源可以是超级电容(supercapacitor), 或者一系列的分离式电容(discrete capacitors), 甚至可以是一块电池(不过,目前市场上还没有产品采用这个方法)。这里主要分享超级电容和分离式电容。
(1)超级电容
超级电容是通过极化电解质实现储存能量的电化学元件。它可以在较小的三维空间存储惊人的能量。基于超级电容的掉电保护电路如上图所示。
由于设计基于超级电容的掉电保护电路相对简单,所以大多数的企业级SSD也是采用这个方法。但是超级电容想要在企业级SSD的应用中立于不败之地,并不容易。
超级电容大多数是铝电解电容。虽然铝电解电容具有较高的电容体积比,但是与所有的电解电容一样,铝电解电容同样具有可靠性顾虑。
超级电容会随着时间的增加,容量减小,并且电解液也会因为泄露和扩散而不断流失。温度对超级电容的影响不容忽视,环境温度每上升10度,超级电容的寿命就会折半。
(2)分离式电容
分离式电容会增加电路设计的复杂性,不过会克服超级电容可靠性的限制。基于分离式电容的掉电保护电路是采用了一系列的分离式电容并联,如下图。
分离式电容主要有氧化铌电容和聚合钽电容。这些电容不像超级电容那样采用电解液,所以不会有泄露相关的问题。氧化铌电容和聚合钽电容的环境温度可以达到85度。从这个角度讲,分离式电容更加利用企业级SSD的应用。
选择超级电容还是分离式电容,需要应用者根据成本与可靠性作出折中的决策。
2.关闭“回写缓存”(write-back caching)功能
我们先回顾一下什么叫write-back caching。看下图:
在Host写入SSD数据的整个流程是这样的:
(1)Host触发写入命令,并传入数据;
(2)SSD接收到数据之后,把数据放到DRAM缓存中,并开始写入NAND闪存;
(3)SSD发送完成报告给Host(注意,这时Data还没真正写入NAND闪存,SSD已经发送完成报告了);
(4)来自DRAM缓存的数据,这时才真正写入NAND闪存;
(5)NAND闪存完成数据写入之后给主控报告。
这样的一个过程,我们就称为write-back caching。
假设,系统在第(4)步掉电了,这时Host已经接收到完成报告,就认为数据已经写到了NAND闪存。但现实是骨感的,数据还在路上,这样,数据肯定丢失了。Host再去读它自己认为已经写好的数据,那么SSD会返回数据错误或者数据丢失。
如果,我们把这个功能关掉,把上面的流程调整一下:
(1)Host触发写入命令,并传入数据;
(2)SSD接收到数据之后,把数据放到DRAM缓存中,并开始写入NAND闪存;
(3)来自DRAM缓存的数据,这时才真正写入NAND闪存;
(4)NAND闪存完成数据写入之后给主控报告;
(5)SSD发送完成报告给Host。
关掉write-back caching之后,SSD要等到全部数据真正写入NAND闪存之后才会给Host发送完成报告, 这样,Host就不会错误的读取信息了。但是这样的做法会降低SSD的写入性能。在应用过程中,需要使用者作出折中的方案。
【结语】
掉电保护对企业级SSD尤为重要,目前掉电保护的措施有:
1.增加电源储存电路(power hold-up circuit),电容可以超级电容或者分离式电容。
2.关闭“回写缓存”(write-back caching)功能。
研发更加有效的掉电保护技术是一门科学,更是一门艺术,让我们拭目以待新科技。
更多精彩内容,敬请关注微信公众号: 存储随笔,Memory-logger.