LightNVM :Linux 开放通道SSD子系统外文翻译资料

 2022-03-25 07:03

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


LightNVM :Linux 开放通道SSD子系统

MatiasBjoslash;rling Javier Gonzaacute;lez Philippe Bonnet

CNEX Labs, Inc IT University of Copenhagen

摘要

随着固态硬盘在数据中心和存储阵列中的普及,对于固态硬盘的可预测延迟的需求越来越高。传统的固态硬盘,服务块I/O无法满足这个需求。它们以不可预知的性能和不理想的资源利用率为代价提供高级的抽象。我们建议固态硬盘的管理权衡应该通过开放通道SSD来处理,开放通道SSD是一种新型的固态硬盘,可以让主机控制其内部。我们介绍了我们构建Linux open-channel SSD子系统LightNVM的经验,我们介绍一种揭示SSD并行性和存储媒体特性的新的物理页地址I/O接口。LightNVM集成到传统的存储堆栈中,同时也使存储引擎能够利用新的I/O接口。我们的实验结果表明,lightNVM具有适度的主机开销,它可以被调整来限制读取延迟变化,并且可以被定制以实现可预测的I/O延迟。

1介绍

固态硬盘预计在未来几年成为二级存储的主要形式,尽管由于优越的性能取得了成功,但是固态硬盘仍然存在许多不足之处:登陆日志、较大的尾部延迟、不可预测的I/O延迟和资源利用不足。这些缺点不是由于硬件的限制,固态硬盘核心的非易失性存储器芯片以受限制的操作和有限的耐用性/可靠性为代价提供了可预测的高性能。怎样在一个SSD内部管理数十个非易失性存储器芯片,提供与磁盘相同的块I/O接口,造成了这些缺点。

一种新型的固态硬盘,被称为开放通道固态硬盘,正在市场上出现,它们是解决SSD缺点和管理权衡与吞吐量、延迟、功耗和容量相关的极好的平台。事实上,开放通道固态硬盘揭露了其内部,使主机可以控制数据放置和物理的I/O调度。对于开放通道SSD,SSD管理的责任由主机和SSD共享。一段时间以来,开放通道SSD已经被一级云提供商所使用。例如,百度使用开放通道固态硬盘来精简键值存储的存储堆栈。另外,Fusion-IO 和Violin Memory 都实现了主机端存储堆栈来管理NAND媒体介质并提供一个块I/O接口。但是,在所有这些情况下,将开放通道SSD整合到存储基础架构中的做法已经被限制在设计空间的一个单一点,并进行固定的权衡。

管理SSD设计权衡可能允许用户重新配置他们的存储软件堆栈,以便针对需要块I / O接口的应用程序(例如,关系数据库系统,文件系统)或针对直接利用开放通道固态硬盘[55]。这里有两个问题:(1)在开放通道SSD上实现的块设备抽象应该提供高性能(2)应清楚地确定设计选择和权衡机会。 这些是我们在本文中讨论的问题。 请注意,演示特定于应用程序的SSD管理的优点超出了本文的范围。

我们描述了我们在Linux内核中构建LightNVM(Open Channel SSD子系统)的经验。LightNVM是第一个用于开放式通道SSD和基于主机的SSD管理的开放通用子系统。 我们做了四个贡献。 首先描述开放式SSD管理的特点。 我们找出与揭露SSD内部联系的限制因素,讨论存储行业的相关权衡和经验教训。

其次,我们介绍物理页面地址(PPA)I / O接口,这是开放式通道SSD的接口,它定义了分层地址空间以及控制和向量数据命令。

第三,我们介绍LightNVM,这是我们为开放式通道SSD管理而设计和实施的Linux子系统。 它提供了一个接口,可以实现特定于应用程序的抽象(称为目标)。 我们提供了一个基于主机的Flash翻译层,名为pblk,将开放式通道SSD作为传统的块I / O设备公开。

最后,我们展示了LightNVM在第一代开放式SSD上的有效性。 我们的结果是揭示物理页面地址I / O接口的开放通道SSD的第一次测量。 我们将比较最先进的块I / O SSD,并评估运行合成、文件系统和基于数据库系统的工作负载时的性能开销。 我们的研究结果表明,LightNVM实现了高性能,可以调整以控制I / O延迟变化。

2开放通道SSD管理

SSD由数十个存储芯片组成,通过所谓的通道与控制器并联。开放通道固态硬盘,通道和存储芯片暴露给主机。 主机负责及时使用SSD资源(I / O调度)和空间(数据放置)。 在本节中,我们将重点放在基于NAND闪存的开放式通道SSD上,因为管理NAND在今天既具有相关性又具有挑战性。 我们回顾了NAND闪存带来的约束,介绍了SSD管理面临的主要挑战,讨论了我们从系统早期采用者那里吸取的教训,并展示了不同的开放式SSD架构。

2.1 NAND闪存特性

NAND闪存依赖浮栅晶体管阵列(所谓的单元)来存储位。 晶体管尺寸的缩小使闪存容量增加。SLC闪存每个单元存储一位MLC和TLC闪存分别存储每个单元2或3位,QLC闪存中每个单元有四位。对于3D NAND而言,增加的容量不再是缩小单元尺寸,而是闪存阵列分层。

媒体架构。NAND闪存提供读取/写入/擦除接口。 在NAND封装中,存储介质被组织成裸片,平面,块和页面的层次结构。 一个芯片允许一次执行一个I / O命令。 一个物理封装内可能有一个或几个管芯。 一个平面允许类似的闪存命令在芯片内并行执行。

在每个平面内,NAND按块和页面组织。 每个平面包含相同数量的块,每个块包含相同数量的页面。 页面是读写的最小单位,而擦除的单位是块。 每个页面被进一步分解为具有额外的出界区域的固定大小的扇区,例如,一个16KB的页面包含四个4KB的扇区加上经常用于ECC和用户特定数据的出界区域。

关于内部时序,NAND闪存在读取和写入/擦除延迟之间表现出一个数量级的差异。 读取通常需要几百微秒,而写入和擦除操作需要几个毫秒。 但是,如果直接在写或擦除操作之后安排读操作,读延迟会出现尖峰,从而导致延迟数量级的增加。

写约束。 有三个基本的编程约束适用于NAND [41]:(i)写入命令必须包含足够的数据来编程一个(或几个)全闪存页面,(ii)写入必须在一个块内顺序进行,和(iii)在块内的页面可以被重写之前必须执行擦除。 编程/擦除(PE)周期的数量是有限的,极限值取决于闪存类型:TLC / QLC闪存的极限值是10^2,MLC 闪存的极限值是10^3或SLC闪存的极限值 10^5。

对于不同类型的NAND闪存,必须考虑额外的限制。 例如,在多级单元存储器中,存储在同一单元中的位属于不同的写入页面,称为下/上页面。 在较低页面可被成功读取之前,必须写入较高页面。 下页面和上页面通常不是连续的,为了防止写邻居干扰,必须写入页面之间的任何页面[10]。 此外,NAND供应商可能会引入任何类型的特殊约束,这些约束并未公开披露。 这对于跨供应商,基于主机的SSD管理的设计来说是一个明显的挑战。

失败模式。NAND Flash可能以各种方式失败[7,40,42,49]:

bull; 位错误。 缩小单元大小的缺点是存储位时出现错误。 对于SLC来说,每KB有2bits的误码率是常见的,但对于MLC来说,这个速率增加了四到八倍。

bull; 读写干扰。 随着位的写入或读取,介质易于泄漏到附近的单元。 这导致了上面描述的一些写约束。

bull; 数据保留。 随着单元耗尽,数据保留能力下降。 随着时间的推移,数据必须被重写多次。

bull; 写/擦除错误。 在写入或擦除期间,由于块级别的不可恢复的错误,可能会发生故障。 在这种情况下,块应该被取消,并且已经写入的数据应该被重写到另一个块。

裸片故障。 存储的逻辑单元(即,NAND芯片上的裸片)由于缺陷可能随着时间的推移停止工作。 在这种情况下,所有的数据都将丢失。

2.2 管理NAND

管理NAND强加的限制是任何基于闪存的SSD的核心要求。 对于开放通道SSD,这个责任是在主机上运行的软件组件(在我们的例子中是一个Linux设备驱动程序和在其上构建的层)和设备控制器之间共享的。 在本节中,我们介绍与NAND管理相关的两个关键挑战:写缓冲和错误处理。

写缓冲。当主机端(在Linux设备驱动程序中)定义的扇区大小小于NAND闪存页大小(例如,在16KB闪存页上定义的4KB扇区大小)时,写入缓冲是必要的。 为了处理这种不匹配,传统的解决方案是使用缓存:缓存扇区写入,直到收集足够的数据以填充闪存页面。 如果在填充缓存之前数据必须被持久化(例如,由于应用程序刷新),则添加填充以填充闪存页面。 读取被定向到缓存,直到数据被保存到介质。 如果缓存驻留在主机上,则两个优点是(1)写入全部由主机生成,从而避免了主机和设备之间的干扰,并且(2)写入在被命中时被确认。 缺点是在发生电源故障时,缓存内容可能会丢失。

写缓存也可以放在设备端。 主机可以将扇区写入设备,并让设备管理对介质的写入(当足够的数据累积到可以填充闪存页面时),或者主机明确控制对介质的写入,并使设备保持持久性。 使用前一种方法时,设备控制器可能会在工作负载中引入不可预测性,因为它可能会发出干扰主机发布读取的写入操作。 采用后一种方法,主机可以完全访问设备端缓存。 在NVMe中,这可以通过控制器内存缓冲区(CMB)来完成[43]。 因此,主机可以将(i)设备侧高速缓存上的数据分段与(ii)通过明确的清空命令写入媒体分离。 这种方法避免了控制器生成的写入,并使主机完全控制介质操作。 两种方法都要求设备固件具有电源失效技术,以失去电源的情况下将写入缓冲器存储到介质上。 高速缓存的大小受到SSD上可用的电力电容器的限制。

错误处理。 错误处理涉及读取,写入和擦除。 所有恢复扇区级数据的方法都已经用尽时:ECC,阈值调整和基于奇偶校验的保护机制(RAID / RAIN)[13,20],则读取失败。

为了补偿比特错误,有必要引入纠错码(ECC),例如BCH [53]或LDPC [16]。 通常,ECC编码的单位是一个扇区,小于一页。 通常将ECC奇偶处理为与页面关联的元数据,并存储在页面的带外区域内。

可以为每个块估计误码率(BER)。 为了将BER维持在一个给定的阈值以下,一些供应商可以调节NAND门限电压[7,8]。 应该重写BER高于给定的阈值进行冷写入和热读取的块,其中BER高于给定的阈值[47]。 也可能有必要进行读取清理,即时间表读取操作的唯一目的是估计冷写入和冷读取的块的BER [9]。

由于手动阈值调整会导致在页面上执行多次读取,因此添加RAID技术可以更快地恢复数据,同时也可以使SSD从裸片故障中恢复。

请注意,不同的工作负载可能需要不同的RAID配置。 通常,高读取工作负载需要较少的冗余,因为它们发出较少的PE周期。 这是基于主机的RAID实施的一个参数。 相反,对于高写入工作负载,RAID是开销的来源,可能会被硬件加速(即基于硬件的XOR引擎[14,48])来补偿开销。

在写入失败的情况下,由于过度充电或固有故障[51],在块级恢复是必要的。 当写入失败时,块的一部分可能已经被写入,应该被读取以执行恢复。 早期的NAND闪存芯片允许在部分写入的块上进行读取,但是多级NAND [10]要求在读取数据之前写入一组页面(低/高),从而防止在一般情况下读取部分写入的块。 在这里,应该有足够的缓冲空间来恢复部分写入的块的内容。

如果擦除发生故障,则不会重试或恢复。 该块被简单地标记为坏。

2.3得到教训

开放式通道SSD为SSD管理开辟了一个巨大的设计空间。 基于行业趋势和早期的LightNVM采用者的反馈,以下是对该设计空间的限制。

1.通过物理访问提供设备保修。 最终用户的保证在大批量市场中非常重要。 传统的固态硬盘保证三年或五年的运行。 在其生命周期中,必须有足够好的闪存介质来执行写入。 与旋转硬盘相反,NAND介质的使用寿命在很大程度上取决于对介质的写入次数。 因此,基于闪存的SSD通常有两种类型的保证:年保修和每日驱动器写入(DWPD)保修。 DWPD保证驱动器每天可以支持X次驱动器写入。 提供低于数千个PE周期数据传输到NAND闪存介质,每天的写入次数通常限制在不到十次,而在消费级驱动器中则更低。

如果在主机上管理PE周期,则不能开放通道固硬盘SSD进行保修。 实际上,SSD供应商无法评估设备是否合法有资格进行更换,或者由于过度使用而导致闪存完全无法使用。 为了提供保修,PE周期必须在设备上进行管理。 参见图1的插图。

2.向主机展示介质特征是低效的并限制介质抽象。传统SSD供应商使用NAND供应商进行媒体表征,以使其嵌入式闪存转换层适应给定NAND芯片的特性。 这种内部的NAND特性在IP下受到保护。 让应用程序和系统开发人员与特定的NAND芯片的内部细节,特别是阈值调整或ECC进行斗争既不可取也不可行。 这些必须在设备上进行管理。 这极大地简化了主机中的逻辑,并让开放式通道SSD供应商区分开其控制器的实施。

3.写入缓冲应根据用例在主机或设备上进行处理。 如果主机处理写入缓冲,则设备上不需要DRAM,因为如果需要,维护保证和物理媒体信息所需的小型数据结构可以存储在设备SRAM或持久性媒体中。 功耗因此可以大大降低。 通过CMB管理器件上的

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


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

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

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