当前位置:

OFweek电子工程网

缓冲/存储技术

正文

闪存技术大餐 架构/颗粒/接口/可靠性全面解析

导读: 闪存最明显特点就是稳定性能,低时延和高随机IOPS。对于闪存,在评估性能时,我们一般主要关注90% IO落入规定的时延范围。数据保护等追求所有软件特性都基于Inline实现,如Inline重删、压缩、Thin-Provisioning。

  OFweek电子工程网讯 闪存最明显特点就是稳定性能,低时延和高随机IOPS。对于闪存,在评估性能时,我们一般主要关注90% IO落入规定的时延范围(性能是一个线性范围,而不是某一个点)。数据保护等追求所有软件特性都基于Inline实现,如Inline重删、压缩、Thin-Provisioning(尤其是重删,一方面SSD价格还是偏高,重删压缩可以节约投入成本;另一方面也减少了IO下盘次数提高SSD寿命)。但对于闪存,我们所关注的特性和技术指标远远不止这些。

  闪存架构

  闪存的Scale out能力:横向扩展能力是应对并发访问和提升性能容量的最基本特性,所以闪存是必须具备的功能。目前XtremIO支持16控,solidfire已经支持但100个控制器节点。

  控制器对称A/A 能力:闪存的主要应用场景如OLTP等,传统的A/P、ALUA阵列在主控制器故障切换时都需要时间切换,并导致IO归零;并且在闪存阵列下,一般系统CPU是瓶颈,所以只有无归属、性能均衡的A/A对称架构才能更好应对。目前传统存储(如EMC VMAX/VNX,HP 3PAR, HDS USP/VSP)都已经支持,但是闪存阵列还没看见宣传;好多闪存产品,如 PureStorage还是 A/P模式。

  元数据管理

  闪存的设计主要是考虑如何发挥出SSD的随机访问性能,不像HDD那样,需要通过预取、IO聚合技术来提高下盘的顺序性,减少对机械盘的操作来提升性能。所以闪存在设计上要考虑如何优化元数据(系统元数据、重删压缩指纹、FTL映射等)管理,IO调度策略,垃圾回收和磨损均衡等设计。

  两层元数据管理架构是实现元数据管理的趋势,其基本思想是元数据映射基于LBA->块ID->Block位置的Map形式,卷的数据LBA映射到块ID,而不是磁盘上的物理Block地址;数据变化后只需改变对应块ID映射关系,块ID就可以映射到新的物理空间,这样相比单层方式就简化重删压缩实现和效率。

  SolidFire采用两层元数据管理架构实现元数管理,元数据管理采用Key-Value方式;元数据映射基于LBA->块ID->位置的Map形式,卷的数据LBA对应块ID,而不是磁盘上的物理地址;所以数据变化后计算指纹只需改变对应块ID映射关系,天然就支持重删。在垃圾回收时,是采用块标记法实现对未使用块的清除。

  GFTL功能

  GFTL称作Global FTL,闪存阵列可以配合SSD控制器(需要SSD开放内部接口给阵列),通过阵列完成一些如ROW写满条带下盘,全局负载均衡,整块对齐擦除、垃圾回收等高级优化功能。另外,GFLT也可记录重删压缩数据库,指纹元数据管理,实现RAID功能,进行IO聚合,通过元数据记录实现RAID满条带下盘,从而规避读、修改、写放大操作,解决Write-Hole问题等。

  SSD自身的FTL只能完成数据LAB/重删后数据块、到真实颗粒块(block)的影射,只能实现简单的垃圾回收和ROW数据写,内部把不同Block组织在一起组成RAID。很多外购SSD磁盘的闪存厂商都还不支持GFTL技术,但是该技术是提高闪存效率和竞争力的有力武器。

  重删特性

  重删是闪存最基本特性之一,分为Inline和Postline,但对闪存Inline才能体现真正价值。重删一般分为HASH指纹算法(以SHA-1为例说明,存在碰撞问题)和按字节对比法两种,逐字节对比可靠性高,但会严重影响闪存性能,所以很少使用,只在数据一致性要求非常严格的场景下使用。

  SHA-1算法会有Hash冲突的概率,Hash输出长度一般为160字节的数字,对不同数据块(大小可设置)其输出是随机的,在0-2^(160-1)间分布,不同数据产生相同Hash值的概率2^(-160),只有数据量(固定数据块大小)超过这些数字能表示的值时,才会发生Hash冲突,但到目前位置,所有产生的数据量总和都不至于产生Hash冲突。

  所以Hash方式在产品中最为常见。场见的强Hash算法有SHA-1, SHA-256等;常见的弱Hash算法有Murmur3, CRC, MD5等;强Hash发生冲突的概率低。

  但是在某些场景,如在8K业务数据块大小的数据库场景下,Key值基本上是唯一的,如果重删粒度也是8K则根本起不到重删的效果,可以让客户选择关闭该功能(XtremIO的Inline重删功能是无法关闭的),只开启压缩。

  IO基本流程

  数据从主机下发到闪存阵列控制器,对于非A/A架构的闪存来说,首先盘判断IO对应LUN的归属,如果LUN归属在在本地控制器,IO就写到到对应Cache并镜像,否则转发给LUN归属控制器处理。Cache到水位时再切分块LBA为相应大小后,交给增值模块(如重删压缩模块)处理,计算出指纹后,将指纹和数据(重复数据只保留指纹)交给归属控制器来完成下盘,相关模块下盘时分配分条,凑满条带后顺序写入磁盘,记录真实地址和指纹关系,保存指纹到指纹数据库。

  Block磨损均衡

  Block磨损均衡是为了让数据均匀分布在SSD的所有Block中,从而能达到冷热点均匀分布提高SSD寿命的目的。闪存必须提供磨损均衡来实现,磨损均衡分为动态磨损均衡和静态磨损均衡;动态磨损均衡是由主机更新数据触发的,通过主机读写保证数据的擦写平均分布到所有的Block上,因为每种应用都有冷热数据,所以静态磨损均衡并不能保证冷热度均匀分布。

  静态磨损均衡是由SSD内部机制实现,将冷Block上的数据进行转移(不同于垃圾回收),擦写冷Block上面的数据来接受经常变化的热点数据,使冷Block有机会成为热Block,从而使SSD中所有Block的冷热度达到平衡。

  SSD掉电保护

  为了防止SSD磁盘中缓存数据由于掉电丢失,SSD还需要提供掉电保护功能。一般SSD会设计电压检测模块来实时检测电压值,当电压低于设置阈值时,SSD电压检测模块会通知SSD控制器进入掉电数据刷写流程,此时会有超级电容作为备电源供电,把磁盘缓存数据刷到Flash颗粒中,防止数据丢失。

  另一方面,闪存阵列也应该提供一种机制,当阵列主动下电或升级维护时,下发命令给SSD,让SSD进入掉电缓存数据刷新流程,保证数据一致性。

  闪存(Flash)是相对于HDD而言的一种非易失性存储器,Flash分为NOR Flash和NANDFlash,NOR Flash可以当作内存使用直接执行程序,相比DDR 、 SDRAM 或者 RDRAM具有掉电数据不丢失等特点,所以在嵌入式设备(ARM/MIPS等体系架构)中,一般采用NOR Flash存储BootLoader和OS程序。但今天我们的重点是NAND Flash。

1  2  3  下一页>  
责任编辑:Trista
免责声明: 本文仅代表作者个人观点,与 OFweek电子工程网 无关。其原创性以及文中陈述文字和内容未经本站证实, 对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅 作参考,并请自行核实相关内容。

我来说两句

(共0条评论,0人参与)

请输入评论

请输入评论/评论长度6~500个字

您提交的评论过于频繁,请输入验证码继续

暂无评论

暂无评论

文章纠错
x
*文字标题:
*纠错内容:
联系邮箱:
*验 证 码: