高性能及高效率的SSD内外部软件支持外文翻译资料

 2022-03-30 09:03

英语原文共 16 页,剩余内容已隐藏,支付完成后下载完整资料


高性能及高效率的SSD内外部软件支持

摘要

过去的十年,在研究范围涉及电路到计算机系统的众多研究机构中,闪存已经成为了它们的研究焦点并取得了重大的进展。这使得闪存在信息技术的各种基础设施中更为普遍,从消费类电子产品到云计算及超级计算都有所应用。本文旨在对闪存转换层(FTL)、操作系统和应用程序相关领域的重要进展和里程碑进行全面详尽的调查。随着存储硬件的迅速商品化,软件在充分挖掘闪存潜力方面的重要性可见一斑。因此,对研究机构以和整个行业,一份以软件为重点的、全面且详尽的调查是十分有价值的。我们希望这份调查报告能够为系统从业人员和研究人员提供一个好的参考。

关键词:闪存转换层;NAND闪存;软件;固态存储器

1.引言

数十年来,计算机存储系统一直以传统的旋转存储接口为主。在过去的十年中,我们见证了存储技术的一大转变——以NAND闪存为代表的固态存储,其应用范围迅速由消费类电子产品(如手机、PAD、数码相机)扩展到个人计算机、服务器及数据中心系统。如今,能在众多计算环境中应用闪存存储,如移动系统、数据库、虚拟化、因特网服务和高性能计算等等。

这一转变创造了巨大的创新空间,也引起了学术界和工业界的广泛关注。例如,在Google
Scholar上简单搜索“闪存”能够获得超过2,000,000个结果,且工业界也经历了一波固态数据存储的创业热潮(仅举几例:SandForce, Fusion-io, Pure Storage,Kaminario, Nimble Storage)。在过去的十年里,研究机构在基于闪存的存储设备和系统的各个方面都取得了显著的进步,其中包括闪存电路、闪存信号处理和纠错编码(ECC)、存储设备固件、操作系统和文件系统以及应用。这些进展带领着固态存储设备和系统走入了一个成熟的研究领域,在现实世界中它具有更为广泛的影响力。因此,对这一广阔领域现状的调查成为当务之急。这份调查应具备全面的参考价值(面向从业者),另外,还应对未来的研究工作有所帮助。本调查报告以软件方面为核心,内容范围由存储设备内部软件到应用程序均有所涉及。我们希望下面的讨论能够指导研究人员和系统从业人员快速理解闪存设备对当今计算系统的影响。本文对从前的研究工作和成果进行下述两类调查:

bull; 存储设备内部软件:如下图1,固态存储设备(如固态硬盘(SSD))主要包括一个控制器和多个NAND闪存芯片,其中运行在控制器中的软件负责SSD内部的全部智能处理。为简化讨论,我们将运行在控制器上的整个软件栈称作闪存转换层(FTL),它提供了一系列极其复杂的机制来解决闪存的技术限制并优化了设备的性能。按如下讨论,FTL的主要设计目标包括:1)管理地址映射;2)减少写放大;3)处理设备的损耗;4)提高速度。本文,我们将讨论以上四个方面具代表性的研究工作。

bull; 存储设备外部软件:FTL上层是应用层。需要注意的是,这里的应用程序不仅仅限制在“用户模式”下的软件,而是指通用范围内的软件,它包括运行在系统级的软件,如文件系统和虚拟机管理程序。大多数闪存设备向主机提供了一个向后兼容的块接口,这使得当今计算系统能够在不进行显著软件更改的情况下大规模地采用闪存设备。然而,为了充分地利用闪存设备的巨大潜力和独特性能,往往需要消除设备和应用程序间所谓的“语义鸿沟”。这里的“语义鸿沟”是指应用程序在通过特定请求及提示设备高性能、高效率这两方面的能力较弱。现已有大量关于优化闪存设备应用程序的研究。本文中我们将讨论与以下三个主要闪存优化应用程序有关的代表研究:高速缓存系统、文件系统及数据库系统。

图1 固态硬盘(SSD)结构

2 固态硬盘(SSD)内部软件

在SSD内部,控制器上运行有一系列复杂的软件组件,它们共同负责闪存资源的管理、闪存操作的处理、闪存性能的优化及日常管理维护的执行。本文将SSD内部的整体软件栈看作FTL。FTL执行程度的好坏直接决定了SSD服务的整体质量。本节将讨论FTL设计的基本原理并调查其最先进技术。

A.FTL设计目标

我们首先简要地讨论FTL设计的主要目标,为此,有必要对NAND闪存基础设备的特性进行回顾。每一个NAND闪存单元都是一浮栅晶体管,通过向浮栅注入一定量的电荷,能够配置(或编程)其阈值电压。任一存储单元被编程之前都必须先被擦除(即将其阈值电压设定为最低窗口电压)。NAND闪存受限于存储单元的损耗,该损耗由编程/擦除操作(P/E)造成且是逐步形成的。这使得P/E循环的耐久性有所限制。为增加比特密度并进一步降低成本,人们将技术进行扩展。但随着技术的不断扩展,P/E循环的耐久性不断降低。

图2 NAND闪存结构

如上图2所示,NAND闪存单元被组织在一个“阵列→块→页”的层次结构中,其中一个NAND闪存阵列(array)被分割成块(block)且每一块中包含多页(page)。在一个NAND闪存块中,每个存储单元串中包含多个闪存单元(通常是64-128个),且由相同字线(wordline)驱动的所有存储单元在同一时间被编程、感测。同一块中的所有存储单元必须被同时擦除。数据以页为单位进行编程和提取,页大小由4KB到32KB。所有的存储块共享位线(bitline)及一片上页面缓存器,其中,页面缓存器用于保存正在被编程和提取的数据。总之,上述描述决定了以下SSD的重要特征:

bull; 无就地更新功能:SSD无法直接得就地重写或更新单个闪存页的内容,它必须利用写时复制(copy-on-write)的原则将更新的内容写入新的物理闪存页。因此,地址映射不断变化,这使得映射信息的管理成为一项重要的任务。

bull; 基于块的擦除操作:SSD必须在同一时间擦除整个块中的内容(其中存有数百个页面)。擦除块之前,任一包含实时数据的页面都要复制到其他的位置,这就造成了写放大。

bull; 设备损耗:NAND闪存设备的存储可靠性逐渐降低且设备的损耗与单个存储块承受的P/E循环次数密切相关。SSD的总寿命通常是根据SSD不能再确保其指定存储容量(如数十千兆字节)前能够写入SSD的总数据量(如数百太字节)来定义的。

同样的,速度性能是SSD的一个重要指标,FTL对此至关重要。因此,SSD FTL在实质上是围绕以下四个目标进行设计的:1)以合理的实施成本管理地址映射;2)减少写放大;3)处理设备损耗;4)提高速度性能。在本节的其余部分中,我们将从这四个方面讨论并考察FTL的设计技术。下图3供读者参考,它说明了这四个FTL的设计目标并列举了实现这些目标的主要选项,我们将在下面讨论以上内容。

图3 四个FTL设计目标及实现该目标主要选项的说明

B.地址映射管理

存储设备在内部以恒定大小的扇区(如512B或4KB)为单位管理存储在物理存储媒介(如HDD中的盘片和SSD中的闪存芯片)上的数据。每个物理扇区都分配有一个唯一的物理块地址(PBA)。存储设备给出一个逻辑块地址(LBA)阵列并在内部管理/维持LBA及PBA之间的单射,而不是直接将PBA暴露给外部主机。引入这种额外的地址映射层的原因是多重的,并且在不同类型的存储设备(如HDD对SSD)中有所改变。对于HDD来说,主要原因是为了方便缺陷扇区的容错。这种缺陷扇区可能由磁盘表面的划痕、磁性涂层材料的不充分以及磁性材料的劣化造成。且不论原因,HDD的缺陷可能是主要缺陷也可能是生长缺陷,前者在HDD制造过程中被检测到,后者则是随时间推移逐渐发展的。内部的LBA-PBA映射使得HDD控制器能够屏蔽掉缺陷扇区的PBA,同时仍然向外部主机提供连续的存储地址空间。

SSD采用这种额外的地址映射层,不仅仅是为了提高容错能力,更重要的是为了满足上面所讨论的NAND闪存的独特设备特性。LBA-PBA的映射管理看似简单,其实并非易事且涉及到大量的设计空间。参考文献[26]中已经调查有大量的映射策略。设计一方面是块映射,它简单得在每个闪存块中使用了线性的LBA-PBA映射。举例说明,假设每个存储块存储个扇区且每个LBA包含有n位比特[],其中表示n-m位比特向量,表示m位比特向量。在块映射下,分享相同的个LBA线性映射给属于相同NAND闪存块的个PBA。令表示由的个不同取值组成的集合,P表示所有PBA的集合。因此在块映射下,FTL只需管理→P的映射。设计的另一方面是页映射,它可以将一个LBA映射给任意的PBA。令L表示所有的个LBA的集合,则页映射FTL管理L→P的映射。

与页映射相比,块映射FTL需要管理的映射条目少个,这大大降低了其实现的复杂性(尤其是当FTL需要将整个映射表保存在SRAM或DRAM中时)。同时,块映射的缺点也很明显。因为块映射的性质,它有更糟糕的写放大,这使得SSD的速度性能和寿命更差。直观地说,人们期望通过适当地结合块映射和页映射来实现优良的SSD性能与FTL实现复杂性之间的平衡,这可以从参考文献[32], [46], [51], [56], [57], [74], [92], [96]中较好地学习。不讨论具体的设计细节,大多数先前的工作分享了以下的常见主题:1)为大幅度降低写放大,将页映射应用于小规模闪存块中并将其与适当的数据写入调度结合;2)为保持映射表大小相对较小,将块映射应用于大规模闪存块中。数据写入调度能够最大程度上的运用页映射来减少写放大,它的发展将是最关键的挑战。在参考文献[32]和[96]中,FTL通过观察工作负载的特性来主动评估数据的热度并据此决定将该数据写入块映射区域或是页映射区域。[46], [51], [56], [57], [74], [92]这些先前的工作侧重于使用页映射区域作为块映射区域的写日志缓冲区。数据先写入写日志缓冲区,之后再移至正常的存储块中。这样的两层结构阻止了由块映射管理的存储块直接接触随机写入,进一步减少了写放大。

由于写映射FTL管理着大量的映射表条目,它的直接实现需要一个大容量的存储器(SRAM或DRAM)来存储整个映射表。其经验法则是,页映射表的大小约为SSD存储容量的1/1000。例如,对于每个1TB的存储容量有1GB的页映射条目。先前的研究[28], [40], [76], [107]使用许多实际应用中固有的运行时间负载、空间及时间局部性提出了解决方案,该解决方案只缓存了整个页映射表的一小部分来减少存储成本。其关键概念在实质上与在CPU上使用转换后援缓存器(TLB)一致。举个例子,Gupta等人开发了一种基于需求的FTL(DFTL)设计解决方案,该方案利用近期最少使用(LRU)原则有选择地缓存页映射表中的内容。参考文献[107]中提出了更多的复杂且适应工作负载的缓存替换策略。

不考虑具体的地址映射方案,映射信息与存储在SSD中的数据之间的一致性的保证是至关重要的。因为每个映射表条目的大小相较于闪存页大小要小很多,FTL应先将多个更新的映射表条目汇总在SRAM/DRAM中,之后再将它们存入闪存中。因此,突然的断电可能会导致最新映射信息的丢失,尤其是对于没有超级电容等内部储能设备的SSD。为了缓解这个问题,FTL总是将反向映射信息整合到每一个已经写入闪存的扇区中,即FTL在每个闪存物理页的空余空间中记录相应的LBA信息。因此,在映射表损坏/丢失的情况下,FTL可以通过扫描整个闪存页来重建映射表。

C.减小写放大

在要被擦除的NAND闪存块中仍含有实时数据时会产生写放大。在FTL中,一种称为垃圾回收(GC)的操作负责选择被回收/擦除的块并负责复制实时数据到其他块中。一般来说,为减小SSD中的写放大,我们只有两个选项:1)提高GC的效率,即减少擦除存储块中实时数据的数量;2)降低GC操作的强度,即减少调用GC操作的频率。据此,现存的所有为减少写放大的FTL设计手法被分为两类,它们将在下面阐述。

1)提高GC效率的设计手法:最直接的方法是使用贪婪GC策略,它旨在使回收的存储块总是SSD中包含实时数据数量最少的存储块。通常情况下,在空闲存储块数量低于阈值(该阈值远远小于存储块总数量)时FTL调用GC操作。因此,为找到所有填有数据的存储块中的最佳候选者,严格的贪婪GC策略需要消耗大量的CPU周期(尤其是大容量SSD)。为减少CPU的负担,可以部署一些贪婪GC算法的变化,只是简单地从全部存储块的子集中选择被回收的块。值得注意的例子是基于年龄的贪婪GC策略,它仅仅在近期无数据写入的块中搜寻含有最少量实时数据的块。同时,考虑到由P/E循环造成的闪存损耗,闪存块如何被GC回收也影响着所有存储块的损耗速度。为使SSD的寿命最大化,全部存储块都应该具备大体一致的损耗速度并尽量在同一时间接近其寿命终点。尽管如此,由于贪婪GC策略没有明确地考虑闪存块的损耗,它不能保证全部的存储块都能够保持均衡的损耗速度。写放大的减少与闪存损耗的均衡可能会相互冲突。因此,许多前期研究工作专注于开发集中考虑写放大和存储损耗的GC算法,这将在II-D部分中详细讨论。

如果FTL能够获取存储数据的确切特性信息,GC效率可以显著地提高。为此,引入了TRIM命令。通过TRIM命令,文件系统能够通知FTL哪些数据已经被其删除。假设文件系统在时刻向LBA 写入一个扇区,该扇区在FTL映射表中映射给PBA 。在时刻从LBA 中删除该数据,然后在时刻向LBA 写入一个新的扇区()。若没有TRIM命令,FTL不会知道时刻文件系统中的删除操作,则直到时刻FTL都将其当作存储于PBA 的实时数据。因此,如果在与之间的任何时间,GC需要回收包含PBA 的块,它必须从中将其复制到另一位置。与之相比,若由TRIM命令,如上所述的数据复制操作可以直接被消除,从而减少写放大。

如果FTL能够将相近寿命的数据写入相同的存储块中,GC效率可以进一步的提高。尽管如此,

全文共21011字,剩余内容已隐藏,支付完成后下载完整资料


资料编号:[14747],资料为PDF文档或Word文档,PDF文档可免费转换为Word

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。