剑客
关注科技互联网

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

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

一种NVMe 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 架构的存储系统框架如下图所示:

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

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 架构的数据布局图:

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

其中绿点表示读请求,红点表示写请求。从图中可以看出写请求在 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 是未来的发展趋势,随着 NVMe SSD 在主存储领域的大规模应用,面向 NVMe SSD 的存储系统设计必将是一个热门话题。 RISL 架构是一种 NVMe SSD 友好的存储系统设计方法,符合了 SSD 的读写特性,可以很好的发挥 SSD 的性能优势。

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址