关注公众号

关注公众号

手机扫码查看

手机查看

喜欢作者

打赏方式

微信支付微信支付
支付宝支付支付宝支付
×

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

2020.10.26

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


  闪存最明显特点就是稳定性能,低时延和高随机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。




推荐
热点排行
一周推荐
关闭