【论文阅读】 SmartDedup: Optimizing Deduplication for Resource-constrained Devices

网址:https://www.usenix.org/conference/atc19/presentation/yang-qirui

Abstract

智能手机和物联网等智能设备中的存储在性能容量寿命都有限。考虑到设备各种资源的限制,重复数据删除(去重)有可能通过消除多余的IO数据来解决这些限制本文介绍的SmartDedup是一种给资源有限设备优化的去重方法。 它提出了一个新颖的架构,支持 in-lineout-of-lin的去重,利用它们的互补优势,并允许根据设备当前资源可用性进行调整。它还结合内存磁盘的指纹存储,在最大限度地减少内存开销,同时取得不错的去重水平。

SmartDedup在EXT4和F2FS上建立了原型,并使用benchmarks、从real-world device images中产生的workloads,以及real-world devices中收集的traces进行了评估。结果显示SmartDedup 大幅提高I/O性能(在重复率为25%的FIO实验中,写和读的吞吐量分别提高了31.1%和32%),减少闪存写入量(在重复率为75.8%的trace replay 实验中减少了70.9%),并节省空间使用(在重复率为46.1%的DEDISbench实验中节省了45%),与本地文件系统和相关重复编码解决方案相比,内存、存储和电池开销都很低。

1 Introduction

智能手机和物联网(IoT)等智能设备被广泛使用。 这些设备上不断增长的应用和传感器产生了大量和快速的数据给设备上的闪存带来了严重的挑战,因为它的性能、容量和寿命都有限。重复数据删除有可能通过减少由重复数据造成的i/o存储来解决这些限制。但在智能设备上采用重复数据删除必须解决独特的资源限制。特别是,设备上有限的内存在重复数据删除的速度和能找到的重复数量之间存在一个困难的权衡。有限的存储性能寿命要求重复数据删除操作产生最小的额外I/O。对于许多电力和能源容量有限的设备,重复数据删除的设计也需要注意其电力和能源的使用。

为了应对这些挑战,本文提出SmartDedup,一个为智能设备优化的重复数据删除解决方案,考虑到它们的各种资源限制。SmartDedup的架构被设计为支持共生的in-line和out-of-line重复数据删除。它在in-line采用在线重复数据删除,以减少冗余写入,并在out-of-line运行离线重复数据删除,以找到在线重复数据删除所遗漏的重复内容。这两种技术通过共享指纹存储和有关I/O请求信息(指纹)而协同工作。

SmartDedup的内存和磁盘指纹存储是协同设计的,能最大限度地减少内存开销,同时实现良好的重复数据删除水平。小型的内存指纹存储提供快速的指纹查询和减少写入磁盘指纹存储支持完整的重复数据删除指纹根据数据访问模式在这两个存储间动态迁移。SmartDedup还体现了几种技术,以有效利用两个指纹存储。为了进一步减少开销,两个指纹存储共享相同的索引数据结构,以节省内存的使用;指纹在内存中是以的形式清除,可以减少涉及的I/O和损耗。

为了支持这项研究,我们从现实世界的智能手机中收集了文件系统镜像长期的跟踪(2-6个月)。数据证实,在现实世界的工作负载中存在着良好的重复率:镜像中的数据平均重复率为33%,而痕迹中的写入量的重复率从22%到48%不等。导致重复率最高的具体应用和文件类型因设备而异,因此需要一个整体的系统级重复数据删除解决方案来充分利用这些I/O和数据减少的机会。

我们在智能设备常用的操作系统(Android和Raspbian)和文件系统(EXT4和F2FS)上制作了SmartDedup的原型。我们在两个有代表性的设备上进行了评估,一个是Nexus 5X智能手机,一个是Raspberry Pi 3设备,使用密集型基准(FIO)和DEDISbench从真实世界的智能手机图像采样和重放真实世界的智能手机I/O痕迹产生的现实工作负载。结果显示,与原生文件系统和相关解决方案相比,SmartDedup在性能、存储利用率和闪存耐用性方面都取得了大幅改善

例如,在Nexus上,对于重复率只有25%的密集型FIO工作负载,SmartDedup的吞吐量比原生EXT4高出16.9%,写入的第95百分位数延迟高出18.5%,读取的吞吐量高出38.2%,第95百分位数延迟高出18.7%;对于重复率为47.9%的跟踪段,它的写入延迟提高25.5%。在节省空间方面,在DEDISbench实验中,当复制率为46.1%时,SmartDedup比EXT4节省了45%的空间(在考虑了它自己的空间开销后)。在减少损耗方面,SmartDedup在重复率为75.8%的跟踪重放中,比EXT4减少了70.9%的写入量(在计入其自身的写入开销后)。SmartDedup也超过了最先进的相关作品Dmdedup ,在重复率为25%的FIO写实验中,吞吐量提高了1.5倍,第95百分位的延迟提高了57.1%,在重复率为75.8%的跟踪重放中,CAFTL 的平均写延迟提高了37.7%。所有的改进都是在低资源使用率的情况下实现的。在这些实验中,SmartDedup使用了不到3.5MB的内存,对于Nexus和Pi上的密集工作负载,它实际上分别减少了高达7.7%和49.2%的电池使用量

2 Analysis of Real-world Device Data

为了证实重复数据删除在智能设备上的潜力,我们收集并分析了不同真实用户使用的智能手机上的I/O痕迹和文件系统图像。

首先,我们研究从四个国家的六位年龄在20到40岁之间的用户使用的六部智能手机(来自安卓系统的VFS和EXT4)中收集到的长期文件系统I/O痕迹,这些痕迹记录了写操作从页面缓存冲到闪存时的指纹。常用的应用程序包括聊天(WhatsApp和微信)、视频(Youtube)和社交网络(Facebook和微博)应用程序。正如表1所总结的,这些痕迹证实了:(1)现实世界设备工作负载相当密集,而且对设备的性能和寿命产生了重大影响。平均每天的I/O量从4.2GB到17.6GB不等,写入量从0.7GB到3.5GB不等;(2)在traces中捕获的写操作上,可以实现良好的重复数据删除。考虑到整个追踪,重复写入的百分比从21.9%到47.5%不等;在每天的基础上,平均有16.6%到37.4%的写入是重复的。
在这里插入图片描述表1: 来自现实世界的智能手机的文件系统追踪。对于每个跟踪,该表显示了数据请求的总量(每个4KB),读和写之间的比例,总天数,具有唯一地址的写的总量,具有唯一数据的写的总量,以及重复写的总百分比。

为了了解重复文件的来源,我们进一步分析了去重在每一类文件中的有效性。我们将文件分为几个类别(资源文件、数据库文件、可执行文件、临时文件和多媒体)。表2显示,在从不同用户的设备上收集到的traces中,造成最多重复的文件类型是不同的。这一观察表明,只对特定类型的文件,甚至更狭隘地说是只对特定的应用,应用重复数据删除是不够的。虽然图中没有显示,但我们的结果也显示,基于整个文件的重复数据删除也是不够的,因为超过80%的重复数据来自不完全重复的文件
在这里插入图片描述表2:从真实用户使用的智能手机中收集到的文件系统跟踪中重复量最多的文件类型。该表显示了文件类型、写入总量的百分比以及仅在这种类型文件中重复写入的百分比。

为了补充上述跟踪分析,我们还研究了从19个现实世界的智能手机上收集的文件系统镜像,这些设备上平均存储有10.4GB的数据,数据中的重复率为33%。该分析也证实了设备上存储有大量的重复数据。我们还分析了重复数据删除在不同类型文件上的有效性,和跟踪分析一样,我们没有发现任何模式——对重复数据删除最大的文件类型在不同的设备上有所不同。例如,在一张图片上,数据库文件(69.1%)和apk文件(74.8%)中存在很大比例的重复,但在其他图片上这一比例很低;在另一张图片上,缩略图文件的重复率为99.0%,而在另一张图片上这一比例仅为0.9

总的来说,上述对真实世界的设备痕迹和图像的分析显示了设备上重复数据删除潜力的有力证据。他们还建议,需要一个全面的系统级解决方案来充分利用去重的机会。

3 Design and Implementation

3.1 Design Overview

总体而言,智能开发开发的设计基于以下关键原则:
(1)智能设备上的存储带宽、容量和存储时间有限,因此应尽可能地应用去重来提高其性能、利用率和寿命。【提高性能】
(2)设备上的内存是有限的,因此内存中数据结构的使用应该尽可能。为了补充低内存占用,还应该利用磁盘空间来保留额外的数据结构。【指纹资源利用】
(3)许多智能设备的功率或电池受限(例如,电池寿命有限),重复数据消除应根据当前的功率或能量可用性自适应地工作。【系统动态调度】

在遵循这些一般原则的同时,我们还谨慎地设计了重复数据删除所使用的数据结构和操作,以使其开销尽可能低。本节的其余部分首先介绍这个设计的概述,然后是细节。

重复数据删除可以在存储堆栈的不同层上执行。(文件系统或块层)SmartDedup选择文件系统级重复数据删除的设计,这允许它利用有用的语义并提高效率(例如,避免重复数据删除了未分配的块或处理未被修改的文件)。尽管提示可以从文件系统传递到块层,但它们可能不够(例如,提供上述语义),文件系统对重复数据删除的不意识也会导致效率低下。例如,文件系统要么不能利用重复数据删除所节省的空间,要么必须假设一个固定的重复数据删除比率,而这对实际工作负载并不总是有效。

根据设计原则一,SmartDedup同时考虑in-line和out-of-line重复数据删除,使重复数据删除的效果最大化。in-line重复数据删除在它们到达磁盘之前就已经删除了重复的写入,从而可以快速减少数据,避免重复写入造成的损耗。但它需要一直在I/O路径中运行;否则,它可能会错过许多重复数据删除的机会。out-of-line重复数据删除在后台工作,删除已经存储在磁盘上的重复数据,并可以使用存储在内存和磁盘上的指纹来识别重复数据。尽管out-of-line重复数据删除可以与垃圾回收整合,以减少磨损,但它不如in-line方法有效,后者在重复数据到达磁盘之前就将其删除。因此,SmartDedup结合了in-line和out-of-line重复数据删除,以利用它们的互补优势,并优化它们在资源受限设备中的使用。特别是,这两个重复数据删除程序共享相同的指纹存储,以减少资源开销(根据设计原则II);而且这两个程序都可以动态启用或禁用,并根据设备的当前功率或能量状态动态改变处理率。(根据设计原则III)

根据设计原则二,为了解决智能设备的内存限制,SmartDedu设计了内存和磁盘上的两级指纹存储。指纹存储是重复数据删除解决方案的核心数据结构:它维护现有数据的指纹,以便通过与现有指纹的比较来确定新数据是否重复。在SmartDedup中,内存中的指纹存储支持以低内存成本对常用数据进行快速重复数据删除;磁盘上的指纹存储保留了不在内存中的指纹,支持更彻底的重复数据删除;并且指纹可以在这两个存储之间动态迁移。这两个指纹存储一起支持in-line和out-of-line重复数据删除的高效运行。

本节的其余部分解释了SmartDedup的各种组件以及它们如何共同发挥作用。我们的核心设计,包括合作的in-line和outof-line重复数据删除和分层指纹存储,适用于不同类型的文件系统。我们用EXT4的原型来解释SmartDedup,EXT4是Android设备上事实上的文件系统,而F2FS是一个新的闪存优化的文件系统,越来越多的智能设备使用。

3.2 Two-level Fingerprint Stores

内存中的指纹存储。SmartDedup只使用少量的内存来存储重要的指纹(以及相应的PBN物理块),并支持快速重复数据删除,而其他不太重要的指纹则保存在磁盘上。当内存中的指纹库满了,一些指纹会被降级到磁盘上的指纹库,为新的指纹腾出空间。

为了支持具有低内存成本的快速指纹搜索,该存储使用前缀树(使用Linux radix树实现)作为指纹索引(图1)。为了节省内存,与提供单个指纹的直接位置的典型索引不同,我们的索引提供了指纹组的位置——每个组中的指纹共享相同的前缀。(例如,使用一个18位索引,所有共享相同18位前缀的指纹都被分组在一起。)这种设计也有利于本节后面讨论的基于组的指纹驱逐和磁盘上的指纹查询。在每个组内,指纹由一个链接列表来索引。该列表根据指纹的剩余位数进行排序,这使得比起使用未经排序的列表,可以更快确定遗漏。此外,这种列表的长度通常较短,因为(1)内存中的指纹存储通常较小,(2)用于指纹识别的加密散列函数倾向于将指纹均匀地分布在不同的组。通过实验证实了这些列表的平均长度为9。(最大长度为63)

通过上述设计,内存中的指纹存储的空间开销被保持在较低水平。如果我们用设备内存的1%(4GB内存的40MB)来存储基于MD5的指纹,我们可以把每个指纹的前18位作为前缀索引,并把树的高度限制为3。在这种设置下,指纹索引使用2.03MB的内存。考虑到数据结构的开销,内存中的存储可以为5GB的唯一数据保留130万个指纹。对于基于SHA1-的指纹,存储空间可容纳的指纹数量为112万。【计算一下SHA2可以放多少个?估计70w,索引回占用额外的内存来提高检索速度】

内存中的指纹存储被 in-line和out-of-line的重复数据删除使用,这一点在后面会解释。通过允许它们共享这个存储,SmartDedup进一步减少了其在资源有限的设备上的内存使用。
在这里插入图片描述
磁盘上的指纹库。磁盘上的指纹库维护那些由于内存中的指纹库空间有限而被驱逐出内存的指纹。它允许SmartDedup充分利用现有的指纹来提供彻底的重复数据删除,并支持在指纹对当前工作负载变得重要时将其从磁盘推广到内存。它被实现为磁盘上的一个稀疏文件,指纹与物理块一起按顺序存储。稀疏文件的大小随着存储的指纹数量的增加而逐块增长和缩小,以提高空间效率。对于256GB的设备存储,假设所有的数据都是唯一的,在最坏的情况下,需要存储在磁盘上的指纹总数是2^26个【6711w】,这需要2GB的磁盘空间。相比之下,仅对256GB数据的1%进行重复复制,就可以节省2.6GB的空间,已经可以弥补磁盘存储的开销。

为了能够快速搜索磁盘上的指纹,SmartDedup也需要在内存中建立一个索引,但它重用了上面描述的用于内存存储的同一个指纹索引–前缀树,以减少其内存用量(图1)。事实上,它只在索引的每个叶子节点上添加一个地址,这就是磁盘上指纹组的起始物理块,其前缀与内存中指纹组的指纹相同。每组指纹被存储在磁盘上的一个阵列中,按其剩余的指纹位进行排序,并从这个物理块地址开始依次存储在一个或多个磁盘块中。这样,同一个指纹索引被内存和磁盘上的指纹存储共享,每个叶子节点都可以指向共享同一个预固定的内存指纹组和磁盘上的指纹组。对于一个索引18位前缀的三层树,每个叶子节点中的PBN最多增加1MB的内存用量。

这个方案允许对磁盘上的指纹进行有效操作。为了搜索磁盘上的指纹,SmartDedup在指纹索引中寻找相应的叶子节点。如果该节点在前缀树中不存在,SmartDedup立即知道该指纹在磁盘上不存在。如果该节点存在并包含一个有效的物理块,SmartDedup将整个组从该地址加载到内存,并使用二进制搜索在内存中搜索给定的指纹。访问磁盘上的组的I/O开销很小,因为每个组的大小一般都很小。假设每组共享18位前缀,对于256GB的设备存储,没有重复的数据块,每组大约有256个指纹,只需要一到两个4KB的块来存储它们。对于更大的磁盘,我们可以增加前缀的长度来约束组的大小。

如上所述,我们提出的指纹索引提供了Bloom filter的功能;相比之下,采用单独的Bloom filter会产生额外的时间和空间开销。例如,使用Bloom filter来确定一组指纹是否存在,需要0.92MB的内存和应用五个哈希函数。此外,它还需要处理指纹删除的难题

指纹迁移。从内存中存储的指纹被转移到磁盘上存储;反之,当磁盘上的指纹被新数据匹配时,它被从磁盘提升到内存。当决定驱逐哪些指纹时,内存中的指纹库试图保留对当前工作负荷重要的指纹。我们的评估结果显示,一个简单的策略,如最近使用最少的(LRU),可以实现良好的重复数据删除率(第4.2节)。

但指纹迁移的I/O开销是设备的一个重要考虑因素。将一个指纹从内存驱逐到磁盘需要两次I/O,用于从磁盘加载相应的指纹组和将更新的指纹组存储回磁盘。为了减少磁盘I/O的开销,SmartDedup不是一次驱逐一个指纹,而是一次驱逐一组指纹,这样内存中的指纹存储就会一次性释放出一些插槽,可以用来存储未来请求中的一些指纹。由于设计了基于前缀的索引,链接到同一叶子节点的指纹共享相同的前缀,自动形成一个驱逐组。请注意,当把指纹从磁盘迁移到内存时,SmartDedup仍然是一次促进一个指纹,而不是整个组,因为每个组内的位置有限。此外,在小组规模较小的情况下(平均9个),重复数据删除率也不会因为将整个小组一起驱逐而受到太大影响。

为了实现基于组的驱逐策略,SmartDedup为指纹索引中的所有组保持一个LRU列表。每当一个指纹被匹配到一个新的请求时,它的组就会被带到LRU列表的头部。当需要驱逐时,位于LRU列表尾部的整个指纹组被驱逐。由于内存和磁盘上的指纹存储共享相同的索引,从内存指纹存储中一起被驱逐的指纹也属于磁盘上指纹存储中共享相同前缀的组,因此它们可以通过单一的读-合并-写操作被插入到磁盘组中。

3.3 Hybrid Deduplication

In-line重复数据删除发生在文件系统处理一个写请求时,它通过修改文件系统的逻辑块到物理块的映射来删除重复的写。具体来说,在我们的原型中,EXT4和F2FS的写入路径被以下列方式修改,以确保重复数据删除程序不违反现代文件系统的基本设计原则。首先,SmartDedup通过将文件系统维护的逻辑块到物理块的一对一映射改为多对一映射来实现重复数据删除。其次,SmartDedup在文件系统向磁盘写回缓冲数据时执行在线重复数据删除;通过这样做,它节省了自己处理对缓冲数据的重复写入,这既不损害性能,也不损害耐久性。SmartDedup还可以处理直接I/O,但这里讨论的重点是缓冲I/O,因为它们在常见的设备工作负载中占主导地位。

即使文件系统中存在重复的块,在线重复数据删除也可能无法找到匹配的请求,因为内存中的指纹存储不够大,无法容纳所有现有指纹。对于这样的请求,在线重复数据删除将其移交给离线重复数据删除,它在后台搜索磁盘上的指纹存储,而不会降低前台应用程序的速度。

Out-of-line重复数据删除在后台对未被线内重复数据删除处理的数据进行处理,这些数据可能还在页面缓存中等待被写回,或者已经存储在磁盘上。当处理一个数据块时,它在内存和磁盘存储中都寻找指纹。当找到一个匹配的逻辑块时,它就会改变逻辑块和物理块之间的映射,如果需要的话,就会取消分配多余的物理块以执行重复数据删除。

为了提高效率,SmartDedup避免处理那些自上次被在线或离线重复数据删除处理后未被修改的数据块。它使用一个内存中的缓冲区,称为跳过缓冲区,存储被在线重复数据删除跳过的数据块列表,这是因为后者被禁用或被启用,但在内存存储中找不到指纹匹配。这个缓冲区中的每个条目都存储了一个被跳过的块的信息(节点号、LBN和指纹(如果有的话)),以便线外重复数据删除快速处理该块。它使用一个基于数组的哈希表来实现,由inode和LBN来索引。当一个数据块的指纹被更新时,哈希表项的先前内容就被新的内容所取代。

跳过的缓冲区的大小保持较小,也可根据设备当前的内存可用性进行调整。例如,在内存为0.5MB的情况下,跳过的缓冲区可以分别存储22K个请求和65K个请求的信息,包括和不包括其指纹。如果缓冲区确实满了,SmartDedup会将其转换为只存储修改过的文件的inode号,以便线外重复数据删除只处理这些文件。由于编码号只需要4个字节,缓冲区在实践中很少溢出。

3.4 Putting Everything Together

读取和写入路径。在处理写的时候,SmartDedup会给请求打上指纹,在指纹库中搜索,如果找到匹配的,就进行重复数据删除,如上所述,图2所示。文件系统中的读取路径也被修改,以利用重复数据删除来提高读取性能。因为页面缓存是由每个文件的LBN索引的,所以即使请求的数据与已经在缓存中的另一个逻辑块重复,也不能避免在页面缓存中找不到其LBN的读取。

为了解决这个限制,SmartDedup采用了一个页面缓存索引,将PBN映射到页面缓存中的相应页面。对于无法在页面缓存中找到匹配的LBN的读取,SmartDedup会使用其PBN搜索索引,然后再像本地文件系统那样将其视为一个失误。如果找到了匹配的数据,这意味着请求的数据已经存在于页面缓存中,不需要再执行实际的读取I/O。SmartDedup直接复制缓存中重复页面的数据。这个索引的大小受页面缓存的大小限制,当SmartDedup只对缓存中的重要页面集(如最近使用的页面)进行索引时,它可以被进一步限制。

处理数据更新和删除。上述写入过程的一个复杂之处在于,当处理一个现有区块的更新或删除时,需要持续更新指纹存储。SmartDedup需要找到该区块的原始指纹,以便更新参考计数(该指纹所重复的逻辑区块的数量),如果参考计数下降到零,则删除该指纹。但是SmartDedup并没有原始数据的指纹,它只有新请求的LBN(并由此得到PBN)。为了解决这个问题,SmartDedup在磁盘上为指纹库维护了一个反向索引(一个稀疏文件),它使用一个数组从指纹的PBN映射到指纹库的指纹索引中相应的叶子节点,其中PBN是索引,条目存储叶子节点地址。叶子节点代表内存中或磁盘上的一组指纹,SmartDedup可以搜索这组指纹以快速找到该指纹。与直接从PBN映射到指纹的位置相比,这种设计减少了反向索引的开销,因为当指纹在内存和磁盘存储之间迁移时,该指纹所属的叶子节点不会改变,索引也不必更新。

自适应重复数据删除。为了进一步减少重复数据删除的开销,SmartDedup可以根据当前的资源可用性调整其处理率。对于线外重复数据删除,SmartDedup适应其每段时间(例如每分钟)处理的块的数量。对于在线重复数据删除,它通过选择性地处理它收到的N个写请求中的n个来适应处理率–N定义了选择性。考虑到CPU和I/O负载,SmartDedup在检测到CPU或磁盘被完全利用时,会自动降低其处理率。考虑到电池的使用,SmartDedup会根据剩余的电池寿命按比例降低其处理率,当设备进入低功耗模式时,会完全禁用重复数据删除。SmartDedup使用这种自适应重复数据删除机制也可以很容易地指定和执行其他资源限制的类似政策。

为了进一步减少资源的使用,SmartDedup还可以根据工作负载中观察到的数据重复水平来调整其处理率(通过调整选择性)。当在前一个时间窗口中观察到的重复水平较低时,SmartDedup会逐渐降低其处理率,但当它检测到当前工作负载中的重复水平增加时,它会迅速恢复其处理率。

文件系统的一致性。由于本地文件系统已经保持了LBN-PNN映射的一致性,SmartDedup需要保管的唯一元数据是指纹的参考计数–它依靠参考计数来决定何时释放数据块以及何时执行写时拷贝。SmartDedup将参考计数作为磁盘上反向索引的一部分持久地保存起来(如上所述,与相应指纹的叶子节点地址一起)。

为了确保一致性,在EXT4上,SmartDedup将对反向索引的修改作为文件系统日记的一部分进行日记处理。反向索引的设计有助于减少其日志化的开销。索引中的条目是按PBN排序的,所以对相邻物理块的参考计数的连续更新可以汇总成对反向索引块的更少更新–4KB的块存储512个条目。使用我们的追踪器进行的实验证实,对反向索引的额外写入量不到总写入量的0.5%。在崩溃之后,文件系统可以通过重放最新的有效日志事务而恢复到一致状态。同样,在F2FS上,SmartDedup确保对反向索引和磁盘指纹存储的修改被文件系统检查点捕获,因此在文件系统崩溃恢复后,它们总是可以被带入有效状态。恢复的开销也很小,因为它只需要使用日志或检查点更新受影响的参考计数。

SmartDedup维护的所有其他数据结构都可以被安全地丢弃,而不影响文件系统的一致性。在系统恢复后,内存中的指纹存储将被再次预热。页面缓存索引将在页面缓存再次升温时被重建。跳过的缓冲区的丢失将使SmartDedup错过未被线外重复数据删除处理的请求。对于一个0.5MB的跳过的缓冲区,最多错过254MB的数据(假设该缓冲区只存储每个请求的inode和LBN)。为了减少这种影响,SmartDedup会定期检查跳过的缓冲区的节点和LBN。

5 Related Work

有几个相关的重复数据删除解决方案是为资源有限的系统设计的。正如第4.1节中提到的,CAFTL包括几个为闪存设备控制器的重复数据删除而设计的技术。SmartDedup的关键区别在于其对线内和线外重复数据删除的共同使用,以及内存和磁盘指纹存储的协同组合,以实现低开销和有效的重复数据删除。相比之下,CAFTL主要依靠线内重复数据删除,而其线外重复数据删除只发挥了很小的作用,并与前者完全分开。

最近的一项研究提出了用于智能手机的按应用、在线重复数据删除。它将指纹按应用分组,只加载前台应用的组,并在应用切换到后台时将其交换到磁盘。正如第2节中所讨论的,每个应用的重复数据删除可能会错过许多存在于不同应用中的重复数据。此外,在内存和磁盘之间迁移应用程序的整个指纹集,当它们变得很大时,会很昂贵。例如,我们的追踪显示,常用的应用程序,如Gmail和Youtube有超过20MB的指纹,微博有40MB。相比之下,SmartDedup支持全系统的重复数据删除和细粒度的指纹迁移,并且表现良好,内存使用量低得多。

其他相关工作中也研究了线内和线外重复数据删除的混合使用。例如,DDFS[6, 25]在备份系统中同时采用了线内和线外重复数据删除,和CAFTL一样,它们没有像SmartDedup那样被很好地整合。DDFS在内存中缓存指纹,以减少磁盘上的指纹查找,但与SmartDedup的内存指纹存储不同,它不是为内存受限的场景设计的。例如,DDFS需要复杂的数据结构来组织按空间位置分组的指纹。这种设计对于高性能备份系统的重复数据删除很重要,但对于低端设备的主存储的重复数据删除来说是不必要的,而且成本很高。

6 Conclusions and Future Work

本文提出了一个为智能设备优化的重复数据删除解决方案。这项工作的创新之处在于一个新的架构设计,它协同地整合了in-line和out-of-line重复数据删除以及内存和磁盘指纹存储。考虑到智能设备的各种资源限制,整个解决方案被谨慎地设计和优化。基于密集型工作负载和智能手机图像和I/O追踪的广泛实验评估证实,SmartDedup可以在低内存、磁盘和电池开销的情况下实现性能、寿命和存储利用率的大幅提升。在我们未来的工作中,我们将进一步研究SmartDedup在其他类型的资源受限环境中的有效性,如各种物联网和嵌入式存储控制器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值