一种NVMe SSD友好的数据存储系统设计

闪存介质的大规模使用给传统存储系统的设计带来了强烈的冲击,传统存储系统的很多设计理念不再适用于闪存存储系统。传统存储在设计过程中紧紧围绕磁盘抖动问题,所以在数据布局方面会适应磁盘的顺序读写特征。在设计过程中会大量采用内存作为磁盘缓存,利用数据局部性特征过滤掉大量的磁盘操作,并且将小写聚合成大写;在IO调度器方面,通过LBA的调度将地址临近的IO进行聚合,从而可以优化IO Pattern,使得磁盘的读写操作具有更强的顺序性;在磁盘内部,通过NCQ方式减少磁头的抖动,根据磁头当前所在位置对输入IO进行重新排序与调度,从而达到减少磁盘抖动的目的,提升磁盘访问性能。但是在SSD这种介质上,磁盘所存在的IO特性已经荡然无存,传统对磁盘所做的大量优化并不能给SSD带来价值,在有些情况下反而会影响性能。在基本存储介质、存储原理发生变革的情况下,存储系统软件的设计也需要做出调整,闪存系统设计一方面需要充分利用SSD带来的价值,另一方面需要规避SSD所存在的问题。总的来说,如下图所示,存储系统设计需要紧紧围绕应用与介质特性。磁盘和SSD相比存在一些共同的特性,但是各自又存在自己独特的特性。为了更好的发挥SSD特性,满足应用需求,需要设计面向SSD的存储软件系统。

面向SSD设计的存储系统软件,一方面需要发挥SSD的特性,另一方面需要规避SSD的问题。NVMe SSD具有的特性可以归纳如下:

1,  具有极高的顺序写性能,一般的随机写性能。SSD内部采用日志型的写入方式,新写入的数据都会被写入到新的NAND单元,并且建立LBA与PBA之间的映射关系。正因为如此,SSD内部存在垃圾回收机制,对无效LBA映射单元进行回收。垃圾回收会对SSD性能产生重大影响,通常所说的SSD稳态性能,就是在SSD内部垃圾回收单元正常运行情况下的测试结果。对于大块顺序写来说,每次写入的LBA都是连续的,因此可以大大简化SSD内部的垃圾回收运行机制,减少垃圾回收过程中的数据搬移操作,从而提升SSD的整体性能。对于随机写操作,LBA地址与PBA进行杂乱映射,垃圾回收过程中存在大量的数据搬移操作,一方面影响SSD的写放大;另一方面会造成SSD性能下降。因此,对于NVMe SSD来说,顺序写性能要高于随机写性能。为了最大程度的发挥SSD性能,对SSD尽可能采用顺序写入的方式,并且采用与SSD内部Data Frame对齐的大数据块方式,这是对SSD最为友好的IO模式。

2,  具有极高的随机读性能。SSD内部采用NANDFlash存储介质,对于这种介质不存在类似磁盘的随机读问题。对于读请求,在SSD内部的固件首先将LBA转换成PBA,然后从NAND介质上读取数据。

通过SSD的读写特性分析,我们设计了以RISL架构为核心的存储系统。RISL是Random Input Stream Layout的缩写,该架构最大的特性是充分利用NVMeSSD的读写特性,将业务的随机IO写请求转换成顺序数据流写入SSD。在RISL层将写请求进行聚合,转换成顺序数据流之后再写入存储层,对于SSD而言可以做到顺序写入的效果,提升了SSD内部固件的工作效率,从而提升系统整体性能。在读请求处理方面,RISL内部建立了请求映射表,通过请求映射表将用户请求转换至SSD请求,对于SSD而言实现了读请求随机访问的目的。RISL架构的存储系统框架如下图所示:

RISL系统分成两大部分,一部分是StorageService System,该部分负责写请求顺序化以及读请求的映射处理,并且在写请求处理过程中可以加入数据去重、压缩等机制,更加高效的使用SSD存储空间;另一部分是FlashRAID存储层,对外提供存储对象Container。FlashRAID提供的存储对象分为两大类,一类为Sealed Container,该类对象具备只读特性;另一类为Active Container,具备可写特性。写数据流只会往Active Container中写入数据,当Active Container被写满之后,该类对象会转换成Sealed Container。为了保证在系统突然断电情况下的数据一致性,设计采用了NVDIMM存储介质,通过该介质对用户数据进行聚合处理,将随机的业务写数据转换成顺序数据流。聚合完成的顺序数据流通过数据去重引擎以及数据压缩引擎进行数据缩减操作,提升SSD的利用率。在数据写过程中会产生大量的元数据,这些元数据都具有小数据的特性,通过NVDIMM的聚合首先将元数据转换成大数据块,然后再写入持久化SSD介质,这样可以避免元数据操作引入的小写问题。

对于读操作,逻辑处理过程比较简单,在RISL架构中维护了一个数据映射表格,通过该表格实现业务请求与SSD请求之间的映射。SSD请求在存储介质上随机分布,获取并发读取效果。RISL架构中的数据映射表格容量与存储容量相关,为了提升IO性能,该映射表格通常会全部加载在内存中。此外,该表格在写处理过程中会对其进行修改,在读操作过程中会对其进行检索,因此,如何保证该表格的并发访问是设计与实现的重点。

存储系统的设计本质上就是数据布局的设计。从数据布局的角度来看RISL,其可以很好的与NVMe SSD的特性进行匹配。下图所示是RISL架构的数据布局图:

其中绿点表示读请求,红点表示写请求。从图中可以看出写请求在SSD上具有很强的局部性,具备顺序写的特点;读请求在SSD上具有很强的离散性。读写请求在SSD上没有冲突,但是在NVDIMM中具有混合访问特性,也就是说热点数据在NVDIMM中进行处理,避免读写在SSD中冲突,从而可以缓解读请求由于写请求而引入的延迟的问题。从图中也可以看出RISL架构的数据布局与磁盘存储系统的数据布局完全不同,从而也说明了RISL是一种面向SSD设计、SSD友好的存储系统设计方法。

RISL架构设计还需要考虑的一个问题是数据回收(GarbageCollection)。由于RISL将用户随机写请求转换成了顺序IO流,简化了SSD内部的数据回收操作,该问题被转移到了系统层面去解决。由于系统层面离业务层更近,因此可以与业务进行配合更好的实现垃圾数据的回收。在面向Flash的存储系统设计中,有一种设计思路是将底层的FTL转移到系统层去实现,该想法的一个缺陷是需要定制化SSD,将NAND Flash的接口直接暴露给系统层。RISL架构可以在标准SSD上实现,但同样可以在系统层实现垃圾数据块的回收,并且可以与业务配合提升闪存存储系统的性能。这是RISL架构的优势。

在RISL架构设计的基础上,我们实现了闪存存储系统的原型系统。如下图所示,在多块Intel NVMe SSD盘的基础上,当写IOPS达到80万时,IO的平均延迟可以控制在160us左右。达到了高IOPS、低IO延迟的设计目标。

NVMe SSD是未来的发展趋势,随着NVMe SSD在主存储领域的大规模应用,面向NVMe SSD的存储系统设计必将是一个热门话题。RISL架构是一种NVMe SSD友好的存储系统设计方法,符合了SSD的读写特性,可以很好的发挥SSD的性能优势。

时间: 2024-11-04 10:15:17

一种NVMe SSD友好的数据存储系统设计的相关文章

session的官方定义是:Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。 说白了session就是一种可以维持服务器端的数据存储技术。session主要有以下的这些特点: 1. session保存的位置是在服务器端 2. session一般来说是要配合cookie使用,如果是浏览器禁用了cookie功

session的官方定义是:Session:在计算机中,尤其是在网络应用中,称为"会话控制".Session 对象存储特定用户会话所需的属性及配置信息. 说白了session就是一种可以维持服务器端的数据存储技术.session主要有以下的这些特点: 1. session保存的位置是在服务器端 2. session一般来说是要配合cookie使用,如果是浏览器禁用了cookie功能,也就只能够使用URL重写来实现session存储的功能 3. 单纯的使用session来维持用户状态的话

三种iOS应用程序用户数据存储方法

本文通过偏好设置,plist文件,归档解档三种方法来演示iOS应用程序用户数据存储机制. 首先,我们创建一个Person类,并定义三个成员属性,用来存储数据 @property (nonatomic,copy) NSString *name; @property (nonatomic,assign)NSInteger age; @property (nonatomic,assign)BOOL isTrue; 一.通过偏好设置 1.通过偏好设置存储数据 //获取偏好设置的对象 NSUserDefa

[转帖]深度: NVMe SSD存储性能有哪些影响因素?

深度: NVMe SSD存储性能有哪些影响因素? http://www.itpub.net/2019/07/17/2434/ 之前有一个误解 不明白NVME 到底如何在队列深度大的情况下来提高性能, 现在看来是因为 比AHCI多了 多队列的控制来提高性能. 导读: NVMe SSD的性能时常捉摸不定,为此我们需要打开SSD的神秘盒子,从各个视角分析SSD性能影响因素,并思考从存储软件的角度如何最优化使用NVMe SSD,推进数据中心闪存化进程.本文从NVMe SSD的性能影响因素进行分析,并给出

在北美闪存峰会上的报告——NVMe SSD数据保护技术

今天在Flash Memory Summit(FMS)峰会上做了关于NVMe SSD数据保护的技术报告.今年是NVMe SSD大规模使用的元年,NVMe SSD在服务器得到了大量支持.互联网大规模部署NVMe SSD.传统行业开始使用NVMe.存储阵列开始向NVMe的方向努力,NVMe SSD将会成为未来的主流存储介质.在NVMe SSD向前推进的过程中,有一个问题不得不需要面对与解决,这个问题就是NVMe SSD盘的数据保护问题.传统SATA/SAS SSD可以使用硬RAID来解决数据保护问题

浅析数据存储的“那些事儿”

写在前面 对于运维来说,数据读取.安全与存储,也是至关重要的一点,数据存储的技术点也是相当的多,面比较广,今天,民工哥来给各位小伙伴聊一聊有关于数据存储的"那些事儿" 存储的概念介绍 数据存储对象包括数据流在加工过程中产生的临时文件或加工过程中需要查找的信息.数据以某种格式记录在计算机内部或外部存储介质上.数据存储要命名,这种命名要反映信息特征的组成含义.数据流反映了系统中流动的数据,表现出动态数据的特征:数据存储反映系统中静止的数据,表现出静态数据的特征,解释来源于百度百科.民工哥用

iOS 应用数据存储

iOS 开发中,经常会有将数据存储到本地的需求.比如一些数据的缓存,或者记录下用户的账号密码,记录下下次是否自动登录等,这些都需要将数据记录到本地.iOS中,数据存储到本地的常见方式有三种: 一: 使用plist 存储到本地: 二:Preference(偏好设置) 三:归档解档. 举例介绍一下三种方式. 在介绍数据存储之前,需要先了解下iOS 中app的沙盒机制 方式一: 使用plist将数据存储到本地,实际上就是将数据写到一个文件中,文件中的数据是以xml格式保存.使用plist存储数据非常方

硬RAID可以为NVMe SSD数据可靠性保驾护航吗?

随着NAND Flash价格的不断下降,NVMe SSD正在慢慢普及.NVMe SSD由于极高的性能常被用作数据缓存,即使NVMe SSD发生故障,数据还在持久化介质中存储,不会导致数据丢失等严重事件.随着NVMe SSD的大量使用,其逐渐被用作持久化存储介质,替代传统磁盘.一旦NVMe SSD被用作持久化介质,便提出了数据保护的需求.传统磁盘采用RAID或者多副本的方式实现数据保护,那么在NVMe SSD上如何进行数据保护?是否还可以采用传统的硬RAID卡为NVMe SSD提供数据保护服务?

Andriod中数据存储的五种方式

数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据5 网络存储数据 下面将为大家一一详细介绍. 第一种: 使用SharedPreferences存储数据 SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在 Activity中 重载窗

Android数据存储的五种方法汇总

本文介绍Android中的5种数据存储方式. 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据 5 网络存储数据 下面将为大家一一详细介绍. 第一种: 使用SharedPreferences存储数据 SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置