英语原文共 17 页
Flshblox:实现虚拟化固态盘的性能隔离与磨损均衡统一生存期
摘要
固态盘虚拟化的一个长远目标是在共享设备的租户间提供性能隔离。然而, 虚拟化固态硬盘传统上一直是一个挑战,因为资源隔离和设备寿命之间存在着根本的矛盾——现有的固态硬盘旨在统一老化闪存的所有区域,而这会降低隔离性。我们提出利用闪存并行性提高虚拟固态盘间的性能隔离,方法是以专用的通道和晶圆划分它们。此外我们同时管理磨损情况以提供一个完整的解决方案。我们提出按一定的规则允许不同的通道与晶圆在精细的时间粒度有所不同而偏向于隔离性,而在粗时间粒度调整这种不平衡。实验表明,与软件隔离的虚拟固态硬盘相比,新的固态盘磨损均匀,在各种各样的多租户设置中99%的存储操作延迟减少高达3.1倍。
1介绍
固态盘的成本快速接近硬盘,已在大规模云服务中不可或缺。固态盘性能比硬盘高出多个数量级,并相比硬盘能以其百分之一的延时达到超多5000倍的IOPS[21]。快速缩减的工艺技术使固态硬盘能够通过增加芯片数量来提高带宽和容量。但是, 固态盘的管理算法的缺陷阻碍了这些并行趋势有效地支持同一固态盘上的多个租户。
在多租户设置中的固态盘尾延迟是缺陷之一。云存储和数据库系统已开始在同一固态盘上对多个租户进行共置,这进一步加剧了我们熟知固态盘的尾延迟问题[14,25,26,58,60,78,79]。
导致尾延迟的原因是固态盘主控中的一组复杂的闪存管理算法,成为闪存转换层(FTL)。这些算法的基本目标是几十年前当固态盘容量与并行性受限时指定的。这些目标旨在将闪存特质隐藏在一个间接的层次背后并暴露出一个块接口。但是, 这些算法将磨损均衡 (解决闪存的有限生存期) 和资源利用率 (利用并行性) 混合在一起, 从而增加了共享固态盘的租户之间的干扰。
虽然应用层闪存感知通过有效利用设备级并行性提高了吞吐量,但是这些优化并没有直接减少共享固态盘的多租户间的干扰[31,36,37,51,75]。这些租户不能有效地利用闪存并行性实现隔离,即使他们各自都是“闪存友好的”,因为FTL隐藏了该并行性。新型固态盘接口提出将原始的并行性直接暴露给上层,这为实现租户间隔离提供了更高的灵活度,然而这使跨不同并行单元的磨损均衡实现变得复杂[38,49]。
在本工作中,我们提出利用固态盘的固有并行性提升共享固态盘的多租户间的隔离性。我们建议根据租户的容量和性能需求,创建固定到专用通道和晶圆的虚拟固态盘。事实上,通道和晶圆操作的独立性有助于这些虚拟SSD避免对彼此的性能产生不利影响。但是,不同的工作负载可以以不同的速率和不同的模式写入,这可能使通道和晶圆以不同速率老化。 例如,固定到TPC-C数据库实例的通道比固定到TPCE数据库实例的通道磨损快12倍,从而大大缩短了固态盘寿命。这种非均匀老化会使SSD得生命周期不可预测,这使数据中心群集的配置和负载平衡方面变得复杂。
为了解决这个问题,我们提出了一个共有两部分的磨损水平模型,该模型使用不同的策略平衡每个虚拟SSD内和虚拟SSD之间的磨损。通过利用现有的SSD磨损平衡机制来管理虚拟SSD内磨损,同时通过使用新机制在粗略时间粒度上平衡虚拟SSD间磨损以减少干扰。我们使用数学模型来控制虚拟SSD之间的磨损不平衡,结果表明新的均衡模型确保了SSD的近乎理想的寿命,并且租户干扰可忽略不计。更具体地说,这项工作做出了以下贡献:
(1)我们提出了一个名为FlashBlox的系统,通过工作在专用的通道和晶圆上,该系统使租户的干扰降到最低
(2)我们提出了一种新的磨损平衡机制,可以通过测量不平衡的程度来实现这些租户之间更好的性能隔离。
(3)我们提供了一个分析模型和一个控制通道和晶圆之间磨损不平衡的系统,这样它们可以均匀地老化,对租户的干扰可以忽略不计。
我们在开放式通道SSD堆栈(来自CNEX实验室)内设计并实现了FlashBlox和新的平台机制,并展示了微软数据中心的多租户存储工作负载的优势:新型SSD可提供高达1.6倍的吞吐量并通过以下方式降低99%的延迟 高达3.1倍[18]。 此外,即使在存在对抗性工作的情况下,我们的服装水平也能提供95%的理想SSD寿命,并且只能在单个通道上进行写入,而只能在其他通道上进行读取。
本文的其余部分安排如下:第2章是对这项工作的挑战。FlashBlox的设计和实现在第3章中描述。评估结果显示在第4、5章中介绍了相关工作。我们在第6章中提出了结论。
2固态盘虚拟化:机会与挑战
高级存储基础架构即服务(IaaS)产品、持久平台即服务(PaaS) 系统和数据库即服务(DaaS)系统需要固态硬盘来满足其服务级别目标(SLO),这些目标通常是硬盘性能无法满足的[2,4,5,7,8,9,22,23]。例如,DocDB分别为S1、S2和S3产品保证每秒250,1000,000和2,50次查询 [5,6]。
存储虚拟化通过为多用户或实例划分资源, 帮助此类服务有效地利用 固态盘的高容量和性能。DaaS系统中的典型数据库实例为10GB–1TB,而现在每台服务器的固态硬盘容量可能超过20TB[6, 10]。
带宽、IOPS或两者的组合在每个实例上都是有限的,这些实例使用令牌桶速率限制器或智能IO节流来满足Slo[41,48,56,57,59,66,74]。但是,没有类似在保持低IO尾部延迟的同时共享固态盘的机制--实例的延迟仍然取决于前台的读/写和后台其他实例的垃圾回收[25,34,42,73]。
此外,越来越有必要对各种工作负载 (例如延迟敏感应用程序和批处理作业) 进行放置,以提高资源利用率,同时保持隔离[33,42]。虚拟化和容器技术正在不断发展, 以利用内存,CPU,缓存和网络的硬件隔离支持此类场景[11,16,28,30,40,47,52,72]。我们将这一研究范围扩展到固态盘, 通过提出硬件隔离的固态硬盘,并针对由于在租户间进行物理闪存分区而产生的磨损不平衡问题提供了解决方案。
2.1硬件隔离与磨损均衡
为了理解此问题, 我们比较了两种不同的共享硬件的方法。第一种方法将来自所有工作负载的数据组成条带,条带横跨所有的闪存通道(共八个),与目前的固态盘一样。这个方案为每个IO提供最大吞吐量,并使用软件速率限制器——用于Linux容器和Docker以实现资源的加权公平共享(如图2.1(a)中的场景)[12,13]。
图2.1 软/硬件隔离效果比较
请注意, 在软件隔离情况下的实例不与其他共置实例共享物理闪存块。这消除了一个实例的垃圾回收对另一个实例的读取操作产生的干扰[34]。第二种方法使用我们提出的机制的配置,即分配固定数量的通道给每个实例(如图2.1(b)中场景)。
在这两种情况下, 都有四个IO密集型工作负载。这些工作负载分别请求共享存储资源的1/8,1/4,1/4,3/8。速率限制器在第一种方法中使用这些作为权重,而FlashBlox分别为四个负载分配1、2、2和3通道。工作负载2和4执行100% 写入操作,工作负载1和3执行100%读取操作。所有工作负载都下发地址顺序且64KB对齐IO请求。
与软件隔离相比,硬件隔离不仅可将99%的延迟减少1.7倍(如图2.1(c)所示),而且还可将总吞吐量提高10.8%。但是,固定实例到通道,阻碍了硬件自动均衡通道间的磨损如图2.1(d)所示。我们放大了写入速率的差别以更好地说明磨损不平衡的问题,该问题来自虚拟化固态硬盘的硬件隔离。在后文中,我们将使用应用程序的典型写入速率(参见图2.2)来设计我们的最终解决方案。为了进一步推动这个问题,我们必须首先探讨SSD硬件中可用的并行性,以及在第一种方法中造成干扰的FTL方面。
2.2利用并行性进行隔离
典型的固态盘将其闪存阵列组织成通道、晶圆、plane、块和页面的层次结构 [1, 17]。
如图2所示, 每个固态硬盘都有多个通道,每个通道有多个晶圆, 每个晶圆有多个plane。通道、晶圆和plane的数量因供应商和一代而异。通常情况下, 每个通道有4-8个晶圆,每个晶圆有2-4个plane,每个固态盘有8-32个通道。每个plane有数千个块组成,每个块包含多个闪存页。
该架构在定义隔离边界时起着重要的作用。通道间只共享整个固态盘中共同的资源,因此能提供最强的隔离性。晶圆能完全独立地执行指令但它们共享同一根通道。Plane间的隔离性是有限的,因为它们所在的同一个晶圆只有一个地址缓存。
控制器可以将数据隔离到不同的plane,但对这些数据的操作必须在不同的时间或同时以相同的地址在同一个晶圆中执行[32]。
在目前的固态盘中,这些灵活性都没有用暴露给主机,而是对单个IO模式进行性优化——非常大的尺寸会顺序IO。FTL逻辑上将所有plane组成一个大的单元,构建“超级页”或“超级块”——尺寸比基本单元大小大数百倍。例如,一个块大小4MB共有256个plane的固态盘的一个超级块大小能达到1GB。
条带增加了大的、连续的IO的吞吐量, 但引入了共享固态盘的多个租户之间的干扰的负面副作用。由于所有数据是条带化的, 每个租户的读取、写入和擦除都可能与其他租户的操作发生冲突。
之前的工作已提出新式的技术以帮助租户放置数据,如底层闪存页从不同的闪存块中分配。这有助于通过减少写入放大因子(WAF)来提高性能[34]。减少块共享具有将垃圾聚集到更少的块中的副作用,实现更有效的垃圾收集(GC),进而减少SSD的尾延迟[25,42,43,73]。
然而,租户之间仍然存在严重的干扰,因为当数据被条带化时,每个租户均使用所有的每个通道、芯片和plane来存储数据,并且一个租户的存储操作会导致其他租户的延迟。软件隔离技术[57,67,68]公平地分配了固态盘的资源。但是,当资源争用存在于下层时,它们无法最大限度地利用闪存并行性,因为诸如通道、晶圆和plane等独立资源的强制共享。
新式固态盘设计,诸如开放管道(open-channel)式固态盘显示地暴露出通道、晶圆、plane给操作系统[44,38,49],可以通过使用专用通道帮助共享固态盘的租户避免其中的一些陷阱。然而,不同租客以不同速率写入的通道之间导致的的磨损不平衡问题仍未得到解决。我们提出了一种通过暴露闪存通道和晶圆作为虚拟固态盘来解决这个问题的整体方法——系统整体磨损低于各虚拟固态盘内部的磨损程度,并在粗糙的时间粒度上平衡通道和晶圆间的磨损。
FLASHBLOX仅涉及在单个NVMe固态盘内共享资源的处理。在多个NVMe设备、网络接口卡、图像处理单元上分划分PCIe总线带宽的公平共享机制不再本工作的范围内。
图2.2 固态盘内部并行性
3设计与实现
图3.1 FlashBlox系统结构
表3.1 FlashBlox支持的vSSD类型
图3.1 显示了FlashBlox的结构。在高层,FlashBlox由以下三个部分组成:(1)一个允许租户分配和释放虚拟固态盘的资源管理器;(2)一个主机层级的闪存管理器,通过在粗略时间粒度平衡通道和晶圆磨损实现虚拟固态盘内的磨损均衡;(3)一个固态盘层级的闪存管理器,实现虚拟固态盘内的磨损均衡和其他FTL功能。
FlashBlox提供的关键新抽象之一是虚拟固态盘(VSSD),它可以减少尾延迟。它使用专用的闪存硬件资源,如可以相互独立执行操作的通道和晶圆。以下API用于创建一个vSSD:
vssd t AllocVirtualSSD(int isolationLevel, int tputLevel, size t capacity)
FlashBlox不要求租户指定绝对数字,而是允许他们创建具有不同隔离级别和吞吐量的不同大小和类型的vSSD(参见表1)。这些参数与诸如DaaS系统中公布的那样的性能和经济成本水平兼容,以简化使用和管理[3,6]。租户可以通过创建多个vSSD来增加容量,正如今天在DAAS系统中完成的一样。使用以下指令可解除分配VSSD:
void DeallocVirtualSSD(vssd t vSSD)
通道、晶圆和plane用于提供不同级别的性能隔离。这给多租户场景带来了显著的性能优势(第4.2节讨论的详细信息),因为它们可以彼此独立地操作。较高的隔离级别具有更大的资源分配粒度,因为通道比晶圆隔离性更好。然而,对于FlashBlox的设计来说,这并不是一个值得关注的问题,因为以下几个原因。首先,一个典型的数据中心服务器可以容纳8个NVMe固态盘[46]。因此,在使用一个有16个通道的固态盘时,我们能提供的通道隔离和晶圆隔离的vSSD的最大数量分别为128和1024。此外,具有32个通道的SSD很快会出现(在市场上),这可以使VSSD的数量增加一倍,这个结论基于我们与Microsoft的服务提供商的对话。
其次,DaaS的区别化的产品使得租户能从有限的性能和容量级别中进行选择[3, 6, 10]。这使得云服务提供商能降低复杂性。在这种应用程序中,通过改变专用于应用程序的分区数,可以获得动态变化的容量和IOPS的灵活性。FlashBlox的大容量通道/晶圆分配设计与这种模型很好地匹配。
第三,差异隔离级
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。