本文主要是介绍闪存浪潮下不得不知的知识(3)-技术篇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
闪存最明显特点就是稳定/低时延,高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->位置的Map形式,卷的数据LBA映射到块ID,而不是磁盘上的物理地址;数据变化后只需改变对应块ID映射关系,块ID就可以映射到新的物理空间,这样相比单层方式就简化重删压缩实现和效率。
GFTL功能
GFTL称作全局FTL,闪存阵列可以配合SSD控制器(需要SSD开放接口给阵列)完成一些高级优化功能(如ROW写满条带下盘,全局负载均衡,垃圾回收、统一地址/数据管理和写入前整块对齐擦除实现垃圾回收等)。另外,GFLT也可记录重删压缩数据库,指纹元数据管理,实现RAID功能,进行IO聚合,通过元数据记录实现RAID满条带下盘,从而规避读-修改-写放大操作,解决Write-Hole问题等。
SSD的FTL只能完成数据LAB/重删后数据块->真实颗粒块(block/page)的影射,实现简单的垃圾回收和ROW数据写,内部把不同颗粒组织在一起组成RAID。很多外购SSD磁盘的闪存厂商都还不支持GFTL技术,但是该技术是提高闪存效率和竞争力的有力武器。
重删特性
重删是闪存最基本特性之一,分为Inline和Postline,但对闪存Inline才走真正价值。重删一般分为HASH指纹算法(以SHA-1为例说明,存在碰撞问题)和按字节对比法两种,但逐字节对比会严重影响闪存性能,所以很少使用,只在数据一致性要求非常严格的场景下使用。 SHA-1算法输出长度为160字节的数字,对不同数据块(大小可设置)其输出是随机的,在0-2^(160-1)间分布,不同数据产生相同Hash值的概率2^(-160),只有数据量(固定数据块大小)超过这些数字能表示的值时,才会发生Hash冲突,但到目前位置,所有产生的数据量总和都不至于产生Hash冲突。
场见的强Hash算法有SHA-1, SHA-256等;常见的弱Hash算法有Murmur3, CRC, MD5等;强Hash发生冲突的概率低。
但是在某些场景,如数据库场景下Key值是唯一的,在8K业务数据块大小时,如果重删粒度也是8K,可以让客户选择关闭该功能(XtremIO的Inline重删功能是无法关闭的)。
IO基本流程:
数据从主机下发到闪存阵列控制器,对于非A/A架构的闪存首先盘判断IO对应LUN的归属,如果在本地控制器就下到对应Cache,Cache到水位下盘时再切分块LBA为相应大小后,交给增值模块(如重删压缩模块)处理,计算出来的指纹后,将指纹和数据(重复数据只保留指纹)发送到归属控制器来完成下盘,相关模块下盘时分配分条,凑满条带后顺序写入磁盘,记录真实地址和指纹关系,保存指纹到指纹数据库。
Block磨损均衡:
为了让数据均匀分布在SSD的Block中,并且能达到热点均匀分布的目的,闪存必须提供磨损均衡来实现。磨损均衡分为动态磨损均衡和静态磨损均衡;动态磨损均衡是由主机更新数据触发的,并保证数据的擦写平均分布到所有的Block上;静态磨损均衡是由SSD内部机制实现,将冷Block上的数据转移(不同于垃圾回收)后,擦写冷Block上面的数据以便后续数据更新使用,使冷Block有机会成为热Block,从而使SSD中所有Block的冷热度达到平衡。
SSD掉电保护:
为了防止SSD磁盘中缓存数据由于掉电丢失,SSD还需要提供掉电保护功能。一般SSD会设计电压检测模块来实时检测电压值,当电压低于设置阈值时,SSD电压检测模块会通知SSD控制器进去掉电数据刷写流程,此时会有超级电容作为备电源供电,把磁盘缓存数据刷到Flash颗粒中,防止数据丢失。
温馨提示:
请搜索“ICT_Architect”或“扫一扫”下面二维码关注公众号,获取更多精彩内容。
这篇关于闪存浪潮下不得不知的知识(3)-技术篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!