通过软件定义的闪存来回收存储

背景

在现代云平台中,存储设备,如基于闪存的固态硬盘(SSD)已经被虚拟化为全系统的共享资源,以提供跨越多个应用实例的存储服务。这使得云平台能够通过在多个多租户虚拟机(VM)之间进行分片来有效利用存储容量和带宽。为了提高云平台中的资源效率,供应商提供可驱逐的虚拟机(即Spot VMs或Harvest VMs)。这些可驱逐的虚拟机允许用户以低优先级使用未分配的资源,也就是说,可驱逐的虚拟机的资源可以在任何时候被普通的虚拟机所回收。最近的研究通过用基于启发式的收集方法改进可驱逐虚拟机的资源分配和调度来推进这项技术。

现有的云平台通过在多租户应用之间按需切分存储资源,有效地利用了存储资源。然而,我们的研究披露,云存储在分配和未分配的存储方面仍然严重利用不足。尽管云供应商已经开发了采集技术,允许可驱逐的虚拟机(VM)使用未分配的再资源,但这些技术不能直接应用于存储资源,因为缺乏对存储设备的空间、带宽和数据安全隔离的系统支持。

在本文中,我们提出了BlockFlex,一个基于学习的存储采集框架,它可以在现代云平台中以细粒度的方式采集可用的基于闪存的存储资源。我们重新思考了存储虚拟化的抽象,并为可驱逐的虚拟机实现了分配和未分配的存储的透明采集。BlockFlex探索了启发式和基于学习的方法,以最大限度地提高存储利用率,同时在存储设备层面确保常规和可驱逐虚拟机之间的性能和安全隔离。我们利用可编程的固态硬盘(SSD)开发BlockFlex,并通过各种数据中心工作负载证明其效率。

问题

1. 资源采集技术无法直接使用到外部存储资源中

许多工作提出通过资源采集技术采集云上的内存和CPU资源供资源紧张的节点使用,从而提升系统的资源利用率。然而,先前关于资源采集的工作主要集中在CPU和内存资源上,这些资源不能直接应用于云存储。包含以下三点原因。首先,目前的云存储虚拟化方法不支持存储采集,资源的动态重新分配是不可行的。第二,云存储通常存储敏感的应用数据,这就需要对存储分配和取消分配进行仔细的管理。第三,由于块擦除和元数据更新,云存储可能会遭受巨大的收割开销,这需要特定的优化来实现高效的存储收割。

2. 现有的云平台中存储资源没有被充分利用

这篇文章对从流行的云平台中收集到的事件追踪的研究显示,存储I/O在未分配(未出售)和分配的存储方面仍然明显利用不足。例如,这篇文章发现40%的云存储服务器有25%的存储没有被分配,而分配的存储的I/O利用率平均低于33%(见图1)。云平台中的存储利用率低下是由于已分配的存储资源利用率低下和大量未分配的资源造成的。这篇文章根据阿里巴巴和谷歌的开源云trace来进行存储利用率研究。这些追踪记录跟踪了虚拟机和物理服务器上分配的存储资源的使用情况。阿里巴巴的云trace包含了4K服务器在8天内的虚拟机使用记录,而谷歌的云trace是从12.5K服务器在29天内收集的。由于不同的云trace强调了云存储使用的不同方面(例如,存储容量、I/O带宽、服务器利用率和虚拟机利用率)。

图1 分配的云存储的带宽利用率

如图1所示,所有虚拟机的分配存储的带宽利用率都低于33%,所有虚拟机在整个生命周期内的平均带宽利用率为9.2%。对于通常承载多个虚拟机的物理服务器,我们得到一个类似的趋势:物理存储设备的带宽利用率低于31%,平均带宽利用率为8.6%。如图2所示,20%的虚拟机几乎没有使用其分配的存储容量,50%的虚拟机平均只使用了26.4%的分配存储容量,而只有20%的虚拟机使用了高达90%的分配存储。

图2 分配的云存储的容量利用率

存储资源可采集性探索

可采集的存储资源包含两个来源:未分配的存储和已分配的存储。这篇文章分析了已分配和未分配的虚拟机中的可用存储随时间的变化,并检查(1)是否可以从虚拟机中的存储资源中采集一部分存储资源;(2)采集的存储资源可以持续多长时间;(3)可以采集多少存储资源。

1. 已分配的存储资源:

考虑到一个假设的采集型虚拟机从普通虚拟机中请求不同比例(10%、25%和50%)的存储带宽,调查有多少台服务器有这样的可用带宽,以及这些资源可用于采集的时间。如图3所示,超过91%的服务器在12小时内有可采集的带宽,大约76%的服务器在3天内有可采集的带宽。当我们在较短的时间内(即少于12小时)采集存储时,可用服务器的部分始终很高。这是由于分配的虚拟机的存储利用率一直很低,如图1所示。

图3 已分配的存储资源可采集性

2. 未分配的存储资源:

给定一个假设的采集型虚拟机,要求不同的存储容量(128GB、256GB和512GB),我们分析有多少台服务器可以满足这个采集虚拟机的请求,以及可用的存储能持续多久。如图4所示,32%的服务器可以满足12小时的128GB存储容量的要求。如果 harvest VM 请求的存储时间较短,比如 1 小时,50% 的服务器可以满足请求。随着 harvest VM 增加要求的存储容量,可采集的服务器的数量会减少。

图4 未分配的存储资源可采集性

方法和设计

1. 设计目标

这篇文章提出了BlockFlex来支持高效的外存资源采集,设计目标如下:

  • 存储采集应该满足采集虚拟机的存储需求,同时尽量减少普通虚拟机的意外抢占。
  • 存储采集对上层虚拟机来说应该是透明的,以尽量减少对虚拟机和应用程序的改变,并促进其生产部署。
  • 在提高全局存储利用率的同时,存储采集应该对普通虚拟机产生最小的负面影响,以保证云服务的质量。
  • 当它从已分配和未分配的存储中临时分配未使用的数据块给采集的虚拟机时,存储采集应确保数据安全。

图5展示了BlockFlex系统架构图。为了管理采集的存储,一个新的抽象名为ghost vSSD(gSSD)被提出,位于软件定义的闪存之上。ghost vSSD可以连接到创建的vSSD上,因此,不需要对虚拟机进行修改。BlockFlex将在每个vSSD中部署一个预测器。对于采集的虚拟机,BlockFlex将预测其需要的存储容量和带宽,以及需求将持续多久。对于常规虚拟机,BlockFlex将预测它们的可用存储容量和带宽,以及它们的可用时间。对于未使用的存储资源,BlockFlex将使用两种基于启发式的方法来预测可用于采集的持续时间。基于预测,BlockFlex将进行最适合的匹配,并将未使用的存储分配给采集的虚拟机。如果资源抢占发生在采集的虚拟机上(由错误预测引起),BlockFlex将把采集的存储释放给普通的虚拟机,并处理不同场景下的异常情况。

图5 BlockFlex的系统架构图

2. 存储采集的新抽象

BlockFlex提供了新的存储资源抽象gSSD。BlockFlex允许常规vSSD主动创建gSSD,并将其添加到由vSSD管理器管理的gSSD池中,而不是在请求时采集存储空间(见图5)。当vSSD的预测器预测它将有可用的存储资源用于采集时,它就会创建一个gSSD。这些预测是定期发生的(默认情况下是每三分钟一次)。为了创建一个新的gSSD,BlockFlex将从vSSD中获取空闲块并为它们创建一个映射表。尽管一个gSSD的闪存块可以从vSSD中获取,但相应的gSSD和vSSD不会共享这些获取的闪存块(如图6所示)。因此,不需要在运行时在gSSD和vSSD之间同步映射表项。

图6 gSSD抽象

如图7所示,为了便于快速查找gSSD,在vSSD管理器中把gSSD组织在一组列表中,并考虑在三个方面进行排序:存储带宽、容量和可用于采集的时间。根据观察来优化列表:(1)存储带宽和容量与一个vSSD中可用的通道数量相关;(2)每个gSSD的可用采集时间需要定期更新;以及(3)不会在gSSD的生命周期内更新最大存储容量和带宽。因此,如图7所示,BlockFlex维护一组按<容量、带宽>排序的gSSD列表。在每个列表中,gSSD按其过期时间从最远的一个到最近的一个进行排序。有一个定时器定期运行(默认情况下每15分钟一次)来更新gSSD池中的过期时间。对于过期但尚未分配给任何采集的虚拟机的gSSD,BlockFlex将从列表中删除它们。

图7 gSSD管理方式

在收到存储采集的请求后,BlockFlex将检查gSSD池,以确定与请求的存储容量、带宽和可用于采集的时间最适合的匹配。BlockFlex使用最适合的匹配策略来尽量减少存储资源的浪费。这些请求的参数来自于部署在相应采集虚拟机的vSSD中的预测器。由于gSSD池是排序的,我们使用二进制搜索,首先找到与请求的存储容量和带宽相匹配的相应列表。之后,我们走过这个列表,直到确定一个可用的gSSD,其过期时间与要求的可采集时间相匹配。

当采集的虚拟机完成其工作时,采集的gSSD将被回收到vSSD管理器的池中。在gSSD回收时,vSSD的地址映射表中的相应条目将被删除。BlockFlex将检查gSSD是否会很快过期(即默认情况下在30分钟内)。如果是,BlockFlex将擦除闪存块以保证数据安全,并删除gSSD实例。否则,BlockFlex将把该gSSD添加到gSSD池中,以供将来使用。由于擦除操作很昂贵,BlockFlex利用SSD的通道并行性来并行执行。

3. 储存采集的预测

对于未分配(未售出)的虚拟机,采用一种基于启发式的方法,基于对云平台中未分配存储的特征的研究。云计算供应商通常会过度配置虚拟机,为他们的服务提供弹性。他们以不同的存储容量保留不同的常规虚拟机。常见的尺寸包括128GB、256GB和512GB,以简化VM的管理和部署。根据本文的研究,它们的可用性因其容量而异。我们使用相同存储容量的未售出的虚拟机先前可用时间的直方图,给每个未售出的虚拟机标记一个预测的双倍时间。例如,对于存储容量为512GB的未售出的虚拟机,我们可以将其中的20%作为gSSD,其可用时间为12小时,20%为6小时,其余为1小时。这种分布可以根据相应云平台的启发式研究而改变。这些gSSD大小的分布取决于为未售出的虚拟机配置的存储容量。

作者预测分配的虚拟机的可采集存储资源,以及采集的虚拟机的需求存储资源。由于对分配的虚拟机和采集的虚拟机的预测都是由其工作负载决定的,它们使用相同的基于学习的方法,但学习参数不同。作者使用长短期记忆(LSTM)模型来开发我们的预测器,因为它们在时间序列预测方面的优势和相对低的开销。LSTM的输入是收集自带宽、IOPS(如maxiops、miniops)和存储利用率的统计措施。默认情况下,BlockFlex每三分钟使用之前15分钟收集到的统计数据对模型进行训练。这引入了最小的性能和内存开销。带宽预测器和容量预测器都使用相同的LSTM模型,但我们对其学习率和隐藏层大小进行了略微不同的调整,以提高准确性(如图8所示)。这些预测器将分别产生预测的带宽(以通道为单位)和预测的容量(以GB为单位)。

图8 预测器的工作流程

实验结果

实验性能对比包含两个方面,分别为存储资源利用率和性能。存储资源利用率包含容量、带宽和未分配资源利用率。

容量利用率:

图9展示了对未充分利用的存储容量的影响。作者将使用BlockFlex时的平均和最大利用率与没有收割的虚拟机的基线利用率进行比较。我们看到所有虚拟机的平均利用率提高了1.25倍(43%对54%的利用率),而那些存储利用率低于60%的虚拟机的平均利用率提高了1.75倍(20%对35%)。这显示了BlockFlex可以获得的好处,特别是在从存储利用率低的虚拟机中采集闪存块时。

图9 存储资源利用率实验图

带宽利用率:

图10展示了从带宽的角度来分析未被充分利用的存储资源。结果显示,所有的虚拟机都有1.34倍(22%对30%)的稳定改进。BlockFlex还将最大利用率提高了1.27倍(53% vs. 66%)。与利用不足的存储一样,通过不完全利用常规虚拟机的带宽来避免重占。这表明BlockFlex可以从未被充分利用的资源中改善云存储的带宽和容量利用率。

图10 带宽利用率实验图

未分配资源利用率:

图11展示了通过采集未分配的虚拟机来提高利用率。BlockFlex将总体利用率提高了1.17倍(69%对81%)。利用率低于60%的服务器提高了1.42倍(45% vs. 64%)。对于利用不足和未分配的存储资源,我们平均观察到1.25倍的改善,这表明BlockFlex可以显著利用利用不足和未出售的存储资源来提高利用率。对于利用率极低的情况(低于60%),观察到平均1.48倍的改善。这表明BlockFlex可以成功地将可采集的存储资源与采集的虚拟机的需求相匹配。

图11 未分配资源利用率实验图

性能:

图12展示了BlockFlex带来的性能改善。通过采集额外的通道,采集的虚拟机的带宽得到了明显的改善。当将已售方案与静态方案进行比较时,工作负载性能平均提高了16-51%。对于非卖出方案,由于缺乏对常规VM的干扰,存储带宽提高了22-60%。PageRank的改进效果最好,因为其工作负载在I/O上花费的时间比TeraSort或ML Prep工作负载多。未出售方案比已售方案平均提供了6%的额外带宽改进。当我们将其转化为端到端的执行时间时,我们看到使用已售存储的平均性能提高了20%,而使用未售存储的性能提高了25%。这表明在利用已售或未售存储时,BlockFlex可以为IO密集型应用获得显著的性能优势。额外的闪存通道可以使写量大的工作负载受益,因为增加了I/O的并行性。对于ML Prep和PageRank工作负载,我们看到在采集5分钟后,增加了10-21%。在整整60分钟后,读取带宽的平均增长趋于稳定,并达到22-60%的整体改善。

图12 性能实验图

总结

这篇文章引入了外存存储资源采集BlockFlex,这是一种提升存储资源利用率的方法,可以提升系统的性能。BlockFlex是基于对现有的云存储场景下,对存储资源利用率的观察发现利用率偏低,从而设计新的存储抽象,提升系统资源利用率。通过实验,BlockFlex在各种云存储负载下对外存的利用率上都有优势。同时,BlockFlex讨论了由于存储采集导致的异常情况,并提出将异常错误暴露给用户处理。最终,BlockFlex在存储资源利用率和性能上有很大改进。

致谢

感谢本次论文解读者,来自华东师范大学的博士生宋云鹏,主要研究方向为软硬件协同设计。