SSD缓存掉电保护:3种方案的利与弊

存储在线专栏文章:在“存储技术之家”第一次线下交流活动中,关于闪存技术及市场发展趋势的讨论引出了《FPGA搞不定LDPC?分布式ECC助阵SSD》、《Host- Based和Device-Based闪存卡走向融合》这两篇。我曾承诺过还有一篇SSD掉电保护的,今天就咬咬牙把它写出来。

我按照自己的方式,把SSD异常掉电时需要保护的数据多少做了个大致的分类:

a. 大量写Cache数据(包括元数据)

b. 少量元数据、正在写入的页面

c. 只保护正在写入的页面

这3种除了需要的电容大小不同之外,技术上的实现方式也不同。常见的企业级SATA/SAS/PCIe SSD属于哪种分类?各自的优劣?相信您看完本 文能有一个基本的了解。对于SSD专家来说我又班门弄斧了:)

这几张图来自我的一位朋友@XeonPhiCluster上个月发的微博——“sTec企业级800GB SAS接口SSD,亮点是sTec自研的Controller,自带4* (2.7V/6F)超级电容,最多16个NAND颗粒,性能可靠性不错。”

在“sTec”主控右上方有1颗DRAM缓存芯片,它的背面(也就是前一张照片上)应该还有2颗相同的芯片,可以起到ECC的效果?

这里的重点讲的是电容——“四个2.7V/6F超级电容,个头不大见图(需要掰开塑胶件才能看到6F字样),使用这么大超级电容和SAS企业级应 用相关。以前接触Intel,前期产品如X25-M没用电容,SSD 320是6个470uF/6V的钽电容,后来S3500是3个45uF/35V的铝电解电容。说白了,看用 户,看场景,以前统一存储主板上还用超大的BBU电池呢。”

这款sTec SAS SSD使用电容之大,我觉得可以归为本文开头的分类“a”——大量写Cache数据(包括元数据)。记得我还曾询问过sTec关于 PCIe SSD上使用外置DRAM的原因,答复并不意外——“优化(合并)对NAND的写入,获得更好的性能和寿命”。

提到Intel SSD 320,使我想起前几年参加过的采访。

当时Intel的齐炜是这样解释的:“断电这块,今天我们会用电容,英特尔只是把内存里的数据存进去,有一些数据会放在我们控制器里面缓 冲区,所以在断电保护时间里面要完成数据的拷贝量是不大的,是相对小的。其他的厂家可能有很大的电容来提供保护,但他们面临着安全性的 问题,电容本身的寿命可能比不上整个固态硬盘,所以就是说你的电容大,很可能会成为里面最早坏的元件。”

如上图,几颗黄色钽电容保护的就是旁边那颗64MB Hynix DRAM中的数据。Intel当时表示,SSD主控里的Cache存放的是临时数据,而外置DRAM 则是元数据(映射表),而电容正是针对的后者。

我认为Intel SSD 320,包括他们后来的企业级SATA、PCIe产品都应该属于分类“b”——掉电保护少量元数据、正在写入的页面。

相比之下,当时SandForce(现在属于希捷了)控制器采用压缩方案,无外置DRAM因此控制器内置的缓存大一些。企业级产品可以加电容来保 护,消费级SSD通常不会配置。

上图为LSI Nytro的前身——SATA转PCIe的WarpDrive,卡背面有2颗0.6F 5.5V的电容,它们肩负着正面6个SandForce控制器SLC模块的掉电保 护。

那么这款WarpDrive估计也属于分类“b”或者“a”。

不久前,有朋友在网上询问“Fusion-io主机内存里的元数据每次更新是透写到卡里么?”

业内资深人士@jebtang回复说:“没有,只是把内存中的元数据的b+tree的头和尾写入在FPGA上的SDRAM里,这样可以在掉电的时候rebuild整 个tree出来就行了。”

可见Fusion-io卡上只需要少量电容,应该属于典型的分类“b”,不过正如我在《破解PCIeSSD进化:从踩坑到解决方案》一文中所写的, PCIe SSD恢复供电后rebuild元数据通常会有一段时间,“有的1-2分钟,也有的8-40分钟”。

接下来我们再看看国内两家PCIe SSD初创厂商是怎么说的,由于是技术讨论,具体品牌在这里只用代号表示。

F:“只有我们是写到flash的,呵呵,这可是技术活。

做Cache应用是不需要的,我们是需要保证的,一旦告诉业务层写入成功,那必须是。这涉及诚信问题。

元数据都不实时写flash,那还谈啥子可靠性。说到代价,基本可以忽略,我们的4k写IOPS还不是到35万,所以说是技术活呢。

一般电容保护不了这个,卡上电容的目的是保护正在写入的页,不是RAM里的数据。普通的SSD还行,PCIe的,用电容不现实。我们的系统级产 品倒是提供了RAM的数据保护,4个尺寸是30*30mm的电容,很大个的。异常掉电的恢复时间很快啊,分分钟搞定。”

K:“4个电容总备电量多大?单卡最大功耗多大?RAM容量多大?”

F:“这么说吧,我们的目的是保证给200瓦的系统20ms的时间,处理异常掉电的善后工作。”

K:“20ms 够不够?我们2.5寸的SSD2.5瓦,无外置缓存,备电电容90-400mF,保证200-300ms.PCIe卡最大35瓦,无外置缓存,0.8F超级电容。 总体来说,没有为跑分而设计外置缓存,减小备电要求,同时,安全冗余还是放的很大。以上供你参考。一起努力,中国闪存创业者雄 起!”

F:“每页的写入时间是1.5-2ms. 结合你的RAM大小,应该很容易算出电容的需求。”

K:“DRAM不只是存储一些页大小的数据,合并优化中的用户数据、映射表,否则没必要用那么大的缓存的。

我们为了可靠性,放弃FPGA了,是ASIC方案。外置DRAM其实很不错,对性能,寿命都有很大帮助。 但我们测试了多家的外置缓存的方案,发 现得到好处的同时代价和风险也很大,进行优化写入技术对掉电要求很高,风险很大,而电容,电池都有老化问题,安全冗余必须很大才行。最 终我们否了外置缓存方案。”

点评:上面这两家讨论的还算友好:)可以看出他们的产品有些共性——卡上电容的目的是保护正在写入的页,据称至少有一家的元数据是实 时写NAND闪存。也就是说,他们可能都属于本文开头的分类“c”。

看上去一切都很好,我也希望真的那样好。然而在3年多之前,我在一次和国内某PCIe SSD初创厂商交流时(那时他们的卡还只是样版),曾 经问过元数据直接写NAND是否会有性能问题,当时对方的答复相当肯定——不会。不过后来听到其掉电后第一次重启恢复的时间,又让我感觉有 点像Fusion-io rebuild元数据的方式,甚至时间更长。

再次声明,本文没有指责哪家的意思。正如一位业内朋友所说:“即使产品出现过问题,只要下功夫,半年一年之内基本也能解决。”

如果元数据真的100%直接写NAND,即使对IOPS影响不大的话,我还是有点担心写放大,还有延时。

上图是Intel最新一代PCIe(NVMe)SSD规格,在读/写延时数字中,这里的读“作弊”了,因为是在顺序I/O也就是说有Cache预读的情况下。

如果某家产品每一个写I/O都是直接到NAND的话,写延时就更不可能这样短了,特别是元数据立即写到闪存。

如上图,三星SFF-8639规格的XS1715 SSD PCB背面布满了大量的钽电容。如下图,它的DRAM缓存芯片是1颗256MB的,PMC主控中有多少缓存需 要做掉电保护我不太确定。但参考本文前面的经验,该产品可能又回到了“b”甚至“a”分类。

那么好处是啥呢?我觉得可能还是为了性能、简化设计等。没有一种方案十全十美,都是有取舍的。

看到这颗同样金属上盖的PMC NVMe控制器,我又想起了sTec——也包括他们的PCIe ASIC。在SAS企业级SSD陷入同质化竞争之后,PCIe又会怎 样呢。如今PMC被Micron、三星和Memblaze选用可谓风光无限,有人开玩笑说SandForce被LSI给搞废了:)不过Marvell和其他人还是会加进来玩 的。

最后这张图,来自Greenliant VP李炫辉的ppt,是讲如何做SSD掉电保护测试的。厂商说的再好,用户还是要通过自己的测试来验证。

本文出自黄亮的微信公众号,企业存储技术(微信号:huangliang_storage),欢迎大家关注!