去重技术的磁盘瓶颈

2018年11月17日 0 作者 oceansw

前沿的研究成果主要是挖掘数据流的局部性和相似性的特点,通过采用布隆过滤器,分段,预取和缓存,以及新型的存储器件来加速索引,本文主要介绍了DDFS,ExtremeBinning和ChunkStash的问题背景,动机,局部性和相似性的特点,系统架构设计方案以及实验结果分析。DDFS采用了布隆过滤器、流数据布局和本地缓存预取等利用数据流局部性的方式,减少了99%的磁盘I/O,但是DDFS随着备份版本数的增加性能逐渐降低,产生磁盘碎片等问题;ExtremeBinning采用了两级索引,利用了数据流相似性的特点提升了去重性能,但是会导致RAM的占用量较大影响其他性能;ChunkStash采用了和DDFS相似的方法,利用Flash存储备份数据流元数据信息来加速指纹索引。

数据去重技术的磁盘索引瓶颈问题是数据去重的热点研究,DDFS,ExtremeBinning,ChunkStash,Silo等研究成果针对不同的数据集特点加速了指纹索引,减少了磁盘访问I/O,提高了系统读写的吞吐率。

数据去重技术将文件分成多个数据块,每一个数据块使用20字节的SHA-1哈希值来来标识,称为指纹[1],通过数据块指纹来删除重复数据块,避免了字节级的逐一比对。因此需要保存巨大的索引表,不断地查询和更新索引表;重复的文件或数据块只存储一次,最后将新数据块写入到磁盘中。

在线的数据去重系统是在数据块写入磁盘之前对重复数据删除,而相对的线下的数据去重系统是数据写入到磁盘之后对重复数据删除,在线的数据去重技术优势在于不需要对数据事先备份,减少了存储数据空间。DataDomain,HewlettPackard和DiligentTechnologies这些公司都提供了在线的、块级的数据去重技术。数据去重技术不仅减少了存储空间的负载,而且在网络存储系统中最小化重复数据的传输带宽[2]。

集中式的基于数据去重技术的数据备份服务的主要挑战是指纹索引查找的扩展性。例如,为了备份800TB的数据集,假设平均数据块长为8KB,至少需要2TB的指纹需要存储,这样巨大的指纹索引表完全存储在内存中是不可能的。基于磁盘的索引访问至少比RAM的访问速度慢1000倍,频繁地查询索引的磁盘访问对于备份服务是无法容忍的,已经成为数据去重系统的主要性能瓶颈。

现有的解决方案主要是提高RAM的使用率,将热指纹索引放入RAM中来最小化基于磁盘索引的访问次数,提高数据去重的吞吐率。主要有两种方法来提高数据去重的扩展性:数据局部性和数据相似性;数据局部性是利用备份数据流固有的物理局部性,备份数据流有很大地可能性,在每次全备份中数据块将会以相同的顺序出现,利用数据流的局部性可以将上一次全备份的数据块指纹按原来的顺序预取到RAM中,如用户的某一文件夹中包含A、B、C文件并且按序出现在今天的备份流中,如果明天备份流中出现文件A的数据块,文件B、C的数据块将有极大地可能性出现。利用数据流局部性提高了RAM的利用率,减少了查询指纹索引的磁盘访问次数,避免了磁盘瓶颈,现有的前沿的数据去重系统如DDFS[3],ChunkStash[4]使用了数据流局部性的特点。

基于数据流相似性去重的方法是为了解决数据流没有或者缺乏局部性的情况(如增量备份);数据流的相似性是指备份数据块之间的相似性,将所有的相似数据块放在一起存储,选取一个指纹作为该相似数据块集合的代表,去重索引查询时能快速获取结果,减少磁盘访问次数。基于数据流相似性去重的方法典型的是ExtremeBinning[5],利用文件相似性实现相似数据一次块磁盘索引访问。然而对于大部分的数据集并没有表现出明显的局部性或者相似性,因此上述方法性能较差,SiLo[6]采用了将局部性和相似性结合的方法,根据数据集的特点调整相似性和局部性方法的比例,同时采用了预取和缓存增加了RAM的使用率,结合两种方法的优点提高了数据去重的吞吐率,减少了磁盘访问I/O,达到了很好地效果。

通过对以上方法的总结,我仔细阅读了DDFS,ExtremeBinning,SparseIndexing[7],Chunk Stash, SiLo等优秀论文,详细介绍了解决数据去重中索引查询磁盘瓶颈问题的原理、方案和系统实现,并对方案进行了实验对比,在不同程度上取得了一定地进步和性能提升。根据物理局部性和相似性,完全数据去重和局部去重进行了分类,结果如表1所示。在本文中,我选择了DDFS,ExtremeBinning,ChunkStash进行精读,并详细介绍了系统的实现细节和测试结果。

 

表 1 指纹索引方法的分类

 

物理局部性

逻辑局部性

完全去重

DDFS,ChunkStash

BLC[8]

局部去重

Sampled Index[9]

Extreme Binning,

Sparse index, SiLo

 

本文的结构组织如下:第2章介绍DDFS的背景,动机,数据流物理局部性的原理,系统架构实现和实验结果;第3章介绍了ExtremeBinning的背景,动机,数据流相似性的原理,系统架构实现和实验结果;第4章介绍了ChunkStash的背景,动机,系统架构实现和实验结果;第5章对数据去重索引的磁盘瓶颈问题的前沿研究成果的总结和结论以及对未来工作的展望。

 

2 DDFSusing Locality

2.1 背景和动机

大规模的数据存储需求为数据中心带来了严重的问题,基于磁盘的存储取代了磁带成为新一代的企业数据存储系统。数据去重技术[1,10,11]能够删除大部分的重复数据段。使用数据去重必须保证低消耗和高性能,可以大量地减少不同版本的数据减少磁盘和磁带的负载,然后将数据通过网络备份到远方的灾难备份中心是实用的。数据去重性能的主要挑战是寻找重复数据段,假设平均数据段8KB,指纹20B,平均吞吐率为100MB/s;内存中的段指纹必须满足这些需求,但是索引的大小将会限制系统大小,增加系统开销。对于8TB的数据需要接近20GB的指纹存储;即使此采用cache加速段索引访问,但是由于指纹的随机性,传统的cache的命中率低,工作量效率较低,

DDFS系统采用了3种主要的方式来加速索引过程,减少查询索引的磁盘访问I/O:摘要向量、流数据布局和本地缓存预取策略,这3种方法的结合能够减少99%的磁盘I/O。下面将会阐述3种方式的细节在Data Domain中实现。首先使用布隆过滤器(或摘要向量),作为测试数据块是否是新数据块的数据结构。避免了不存在索引中的无用的数据段的查询;第二按照数据段出现在文件或数据流中的顺序存储数据段和指纹。流数据布局(SISL)为数据段和指纹访问构造了物理局部性;第三,本地缓存预取策略,利用了数据段物理局部性的优点,将有可能一起访问的段指纹预取到cache中,一次磁盘访问能够增加cache的命中率,减少索引查询的磁盘I/O。

通过实验结果可知以上方法的结合有效地减少磁盘访问I/O,对于双核CPU减少了99%的索引查询,能够达到单数据流超过100MB/s的读写吞吐率,多数据流超过210MB/s的读写吞吐率。

2.2 DDFS系统架构和方案设计

2.2.1 DDFS系统架构

为了避免磁盘瓶颈,DDFS实现了Data Domain文件系统,DDFS将文件分成变长数据段[12,13],计算数据段指纹,DDFS使用指纹来标识重复数据段,同时也是数据段的段描述符,图1中描述了DDFS的系统架构:DDFS上层软件组件包含文件服务接口:NFS,CIFS,VTL等;下层包含容器存储和数据段存储Content Store及Segment Store;为了进一步减少数据存储量,在数据块写入Container之前使用Ziv-Lempel算法压缩数据段;最后将容器写入到磁盘中。

 

图1 Data Domain文件系统架构

容器管理模块提供了存储容器日志记录,如图2中描述的容器是自我组织管理的段存储单位。容器是大小固定的,新的容器能够添加和删除,但是一旦写入数据段不能更新,容器通过container ID来标识。容器中包含元数据部分和数据部分,容器管理能够自主分配和读写操作。容器有以下3个特点:

1)固定长度的容器使得容器的分配和回收方便;

2)大粒度的容器写入能够提高磁盘的高吞吐率;

3)合适大小的容器允许全条带化的RAID写操作,RAID在存储层容易实现。

图2 容器是自组织,固定长度的MB级别的存储单元,数据段存储在容器中。

2.2.2 索引加速方法

1) 摘要向量

摘要向量使用布隆过滤器[14],主要目的是减少系统从磁盘中查询重复数据段是否存在的次数,布隆过滤器在内存中段索引的传统摘要组,如图3所示;如果数据段不在布隆过滤器中,则为新数据块,不需要到磁盘中查询索引,但是如果显示为重复块,则有很大可能性存在索引中,但是存在误判。

图3 摘要向量的操作:Lookup和Insert

布隆过滤器使用一个m比特的数组总结n段索引指纹是否存在信息。在初始化阶段Init(),初始化所有比特位0,Insert(a)使用k个独立的哈希函数,h1…,hk,将a匹配到[0,m-1],设置比特位h1(a),..,hk(a)为1,。对于任意一个指纹x,lookup(x)操作将会检查h1(x),…,hk(x)是否全部为1.如果所有位为0,则x一定不在段索引中。否则x不一定在端索引中。布隆过滤器的误判率为:

2)流数据布局(SISL)

流数据布局策略的主要观察在于大部分的备份应用,相似的文件数据段会以相同的顺序出现,数据段存储模块支持流摘要,对于独立的数据段创建不同的存储对象,在存储对象中保留原来的数据段顺序和物理局部性的特点,通过一个或多个数据流来保存描述符和元数据,支持并行性和扩展性。

当数据段对象需要写入时,数据段存储模块打开相应的数据流,将相应的不同流的数据段写入到不同的容器中,对于新的数据段采用Ziv-Lempel算法进行压缩,同时将元数据信息写入到容器的描述字段。通过流数据布局策略保存和提取了相应数据段之间局部性,为本地缓存预取提高了效率和命中率。

3)本地缓存预取(LPC)

由于指纹的随机性的特点,在没有查找全局的索引表情况下预测下一个数据段的索引位置是很难的,因此传统的缓存对于缓存指纹、哈希或者描述符来检测重复数据的命中率低,效果差。本地缓存预取(LPC)利用了重复数据段的局部性特点,LPC将段缓存的容器元数据结合在一起,保存数据段和相应的容器ID联系,如果缓存没有命中,LPC将会取得容器的整个元数据部分,将数据块指纹添加到缓存中,移除缓存中旧的元数据。DDFS通过使用哈希表来实现段缓存,当缓存满时对于查找段索引效率降低,采用LRU策略进行标记和替换。

2.3 实验结果与评价

1)实验数据集

数据集:数据中心A和数据中心B的真实用户数据集。

数据中心A:备份了31天的结构化数据库数据,备份策略是每天的全备份600GB数据,前6天为初始备份数据,数据总量为16.9TB。

数据中心B:备份了48天混合的结构化数据库数据和非结构化的文件系统数据,备份策略包括全备份和增量备份,数据总量为41.4TB。

2)摘要向量和LPC的I/O节省对比

如图4所示,表明了逻辑容量(非去重的备份应用的数据容量)和

 

图4数据中心A的逻辑/物理容量统计   图5 数据中心A的压缩率

物理容量(磁盘上实际存储的数据容量)的对比,如图直到第31天,数据中心备份了16.9TB的数据量,相应的物理容量少了440GB,总共的压缩率为38.54:1。图5所示,表明了每天的全局压缩率(每天重复数据减少量)和本地压缩率(通过Ziv-Lempel算法压缩新数据段),还有统计的全局和本地压缩率。

表 2 索引的磁盘I/O对比

如表2所示,统计了摘要向量和本地缓存预取相应的磁盘访问I/O的对比可知,摘要向量的采用能够减少16.5%的磁盘I/O,本地缓存预取能够减少82.4%的磁盘I/O,摘要向量和本地缓存预取策略的结合能够减少99%的磁盘访问I/O。

3)DDFS的吞吐量

 

图6 1,4客户端写吞吐率对比        图7  1,4客户端读吞吐率对比

图6,图7中表明了单客户端和4客户端的读写操作的吞吐率,数据去重系统达到了很高的吞吐率,单数据流吞吐率为113MB/s,4客户端的吞吐率为217MB/s。对于读操作的吞吐率呈下降的趋势,主要是后面的备份版本有很多的重复数据,由于本地缓存预取策略的影响,能够将平均吞吐率保持在140MB/s。

3 ExtremeBinning using Similarity

3.1背景和动机

2007年产生的数据量是281EB,到2011年数据量增大了10倍,在大量的企业和数据中心的数据中包含大量的重复数据,采用数据去重技术能够消除绝大部分的重复数据,节省存储空间和减少传输带宽,压缩率为10:1到20:1。块级数据去重对数据流进行变长分块,块大小为4KB-8KB,通过块哈希作为块ID,块级去重能够进一步消除重复数据,特别是对微小改变,修改和删除的数据[15]。

与前面DDFS中介绍的方法一样,我们面对着巨大的索引表无法完全存放在内存中,索引查询和插入操作引发了大量的磁盘I/O,并且由于块指纹的随机性对于磁盘的随机访问导致性能的进一步下降,成为数据去重的性能瓶颈。DDFS对于多次全备份的数据,在新的备份版本中共享了很多相同顺序的数据块,利用了数据块的局部性特点提高了查询索引的速度,减少磁盘访问I/O。但是对于低局部性的数据集或备份数据流,如在一个备份窗口时间内工作流包含大量的随机访问的文件或增量备份的文件,文件和数据块之间没有相互关系,访问呈随机分布,采用DDFS的方式吞吐率、磁盘访问I/O,数据去重效果有明显的下降。DDFS采用了本地缓存预取策略,为最大程度地减少磁盘I/O导致RAM占用率高。

因此,ExtremeBinning利用了文件的相似性的而不是局部性。ExtremeBinning将数据块索引划分成两层:主索引(PrimaryIndex)和相似性容器(Bin),主索引存放在RAM中容量较小,相似性容器存放在磁盘中。ExtremeBinning每次磁盘访问获取单文件的所有相似数据块,而不是单数据块索引,极大地提高了索引查询的吞吐率。ExtremeBinning提高了诸如数据备份系统,文档归档系统的并行性和扩展性,不仅适用于一般单系统,同时对分布式系统也有很好的效果。

Extreme Binning方法的缺点在于它允许了一部分的冗余数据。在系统实践中,结果表明较小的去重率的损失获得了极大的RAM使用率的减少和系统扩展性的增强。

3.2Extreme Binning系统架构和方案设计

3.2.1Extreme Binning系统架构

Extreme Binning采用基于内容变长分块和滑动窗口结合的方法将备份数据流划分成长度不等的数据块,并对每个数据块采用SHA-1[19]或MD5算法计算哈希值,称为块ID或Rabin指纹,数据去重技术采用指纹标识重复数据块,新数据块写入到磁盘并更新索引,所有用于文件重组的信息写入到文件谱中。

如图8,9所示,ExtremeBinning将数据块指纹索引划分成两层,主索引存储在RAM,主索引中包含文件代表指纹,文件的其他数据块指纹写入相似性容器(Bin)最后写入到磁盘中,每一个代表指纹包含指针指向相似性容器。

 

图8RAM中的主索引和磁盘中     图9Extreme Binning分布式备份系统架构

相似性容器的两层块级索引

图10显示了主索引和相似性容器的结构,主索引中包含3个部分:代表指纹,文件哈希和指向相似性容器的指针。每一个相似性容器包含2个部分:块指纹和块大小。另外,相似性容器可能包含其他的元数据,如磁盘中其他相似性数据块的地址。

图10主索引和相似性容器的结构

ExtremeBinning的工作流程是当文件备份时,对文件采用滑动窗口和基于内容变长分块,求取数据块指纹,选择代表指纹。

(1)在进行数据去重时,首先到RAM的主索引中查询代表指纹,如果没找到,创建一个新的二级索引和相似性容器,所有数据块指纹和数据块大小添加到相似性容器中,然后将数据块和新的相似性容器写入到磁盘中,代表指纹,文件指纹和指向相似性容器的指针写入到主索引中;

(2)如果文件的代表指纹存在主索引中,如果文件指纹没有匹配,就将相应的相似性容器指纹取到RAM中进行查找,如果依然没有找到,添加新的相似性容器并写入磁盘;

(3)如果文件指纹匹配,则为完全重复的文件,不需要从磁盘中取得其他的块指纹;

(4)如果在相似性容器中查找到数据块,记录新的重复数据块,写入到文件谱中并将文件谱写入到磁盘中。

3.2.2相似性原理和代表指纹

Extreme Binning是否能取得好的效果取决于文件代表指纹的选择,为了最大化相似性原理,根据Broder原理选择代表指纹。

Broder 原理[16]:假设2个集合S1和S2,H(S1)和H(S2)代表相应集合S1,S2的哈希值,H是从全局选择的独立的哈希散列函数,min(S)表示集合S的最小元素的指纹。

Broder原理表明集合S1和S2具有相同最小元素的概率和Jaccard相似性[17]相同的。如果S1和S2具有很高的相似性,有很多相同的数据块,他们最小元素的哈希值H(S1)heH(S1)具有相同的概率。换句话说,如果两个文件有很多相同的数据块,相似性高,那么他们的最小元素指纹也有很高的相似性。ExtremeBinning选择文件的最小元素的指纹作为文件代表指纹。

3.3实验结果与评价

1)实验数据集

数据集1:HDup统计了20个工程研究者的PC中的3个月的多次备份记录,包含全备份和增量备份,总共包含1.767*108个文件,162次全备份和416次增量备份,数据总量4.4TB。

数据集2:LDup统计1次全备份,其他的全部是增量备份,包含2.2*107个文件,数据量大小为965GB。

数据集3:Liunx源代码数据集,包含1.2.1-2.5.75的450版本,数据集大小:26GB。

2)数据去重的性能

 

图11  HDup的去重率                图12 LDup的去重率

ExtremeBinning对数据集HDup、LDup测试压缩率,如图10,11所示,图中3条线表示没有采用去重、完全去重和ExtremeBinning方法随着文件数量增加的去重空间节省量对比,可知ExtremeBinning与完全去重对比几乎相同,压缩率比达到了13.68:15.16和13.13:18.14,损失的去重优势对于数据量为4.4TB和965GB的数据集微不足道。

3)RAM的使用率

主索引包含代表指纹(20字节),文件指纹(20字节)和指向相似性容器的指针(与实现相关,一般取20字节),每一个主索引组记录为60字节,因此ExtremeBinning对于单节点数据集HDup的RAM的使用率为54.77MB(4.4TB数据集),而对于一般的全局块级索引RAM使用率为4.63GB,压缩率为86.56:1,而对于LDup的压缩率为83.70:1,因此ExtremeBinning 的RAM利用率高。

尽管HDup和LDup数据集的RAM使用率高,考虑到PB级别的数据集,文件平均大小为100KB,平均块长4KB,则文件数为1*1010,2.5*109个数据块,平均压缩率为15.6,块级主索引的对于HDup的RAM使用为895GB,ExtremeBinning的RAM使用量为35.82GB。ExtremeBinning提高了RAM的使用率和吞吐率。

 

4 ChunkStashusing Flash Memory

4.1背景和动机

数据去重技术已经在存储系统,备份和文档系统取得了巨大的利益,数据去重技术通过数据块的哈希值,称为指纹来标识重复数据块,为标识每一个数据块位置必须维护一个全局的索引表,如DDFS中描述索引表大,很难全部放入到内存中,必须放入到磁盘中,每次索引表的更新和查找导致大量的磁盘访问I/O。尽管zhu等人在DDFS中通过布隆过滤器和本地缓存预取策略减少了99%的磁盘访问I/O,但是由于磁盘是RAM读写性能的1/1000,对于缺乏局部性的数据集,一旦没有在RAM中命中访问磁盘时,性能就会下降。

针对磁盘访问和RAM访问速度之间的速度差距,而FlashMemory与RAM之间的访问速度接近,因此如果能将指纹索引表放入Flash中能够大大提高查询和更新索引的速度,但是flash也存在着小写和写寿命短的问题。我们设计出ChunkStash利用flash存储数据块元数据,在RAM中建立哈希表,采用RAM的预取策略极大程度地提高了Flash的利用率,提高索引查询速度7-60倍,同时也提高了吞吐率。

4.2ChunkStash系统架构和方案设计

1)ChunkStash体系架构设计

如图13所示是ChunkStash的全局系统架构,ChunkStash主要包含RAM数据块元数据写缓存,RAM哈希表索引,元数据缓存,FlashStore和Containerstore等。RAM数据块元数据写缓存是存储在RAM中的定长的数据结构用于暂时存储数据块的元数据信息,当缓存中的元数据信息达到Flash页的大小时写入到Flash中,写缓存包含1024个数据块组,大小为64KB,RAM大小为页尺寸的2-3倍。哈希表索引是一种索引结构用于查询和标识存储在Flash上的元数据组的位置地址,哈希表保存在RAM中,每个元数据组包含了(块指纹,元数据)对,存储在Flash上。键值特性采用布谷鸟算法[18]来解决哈希表的冲突。

图13ChunkStash体系架构

FlashStore保存块元数据信息,元数据信息按照顺序写入组成Flash的64KB的最小单元页,每页指向相对应的容器。

2)ChunkStash的工作流程

ChunkStash采用了和DDFS相似的设计方案,ChunkStash使用基于滑动窗口的Rabin指纹算法计算数据块的指纹,平均块长为8KB,新数据块写入之前使用Ziv-Lempel压缩算法[20]进行压缩,压缩率为2:1。数据块的存储引用DDFS中的容器,每一个容器包含1024块,大小为4MB。为了加速查询索引减少磁盘的访问I/O,将块元数据信息写入到Flash中,与RAM中的哈希表相对应。同时,为了进一步加快查询,利用备份流的局部性,采取了预取策略和缓存策略。

如图14所示,对于指纹来说主要有指纹查询和插入。当数据块进行去重来临时,首先使用数据块指纹到块元数据缓存中查询如果命中,是重复数据块,查询结束;如果在元数据缓存中没有命中,就到写缓存中查询。如果在写缓存中没有命中,必须到哈希表中查询,如果命中采取预取策略;如果都没有命中,该数据块为新数据块,将元数据写入到写缓存中,将数据块顺序写入到容器中,容器满后写入磁盘。

图14 ChunkStash数据去重过程的流程图

4.3实验结果与评价

1)备份吞吐率和吞吐率

图15数据集1,4种系统的吞吐率对比 图16数据集3,4种系统的吞吐率对比

 

图17数据集2,4种系统的吞吐率对比      图18读写的磁盘访问I/O

我们的实验采用了3种数据集,对4种合成的系统进行相同的条件测试,对比ChunkStash本身在HDD和SSD,以及与DDFS吞吐率的对比,如图15,16,17所示,ChunkStash在第一次全备份中实现了平均190MB/s到265MB/s,吞吐率比第一次提高了60%-140%。ChunkStash第一次备份提高了zhu08-BDB-HDD30倍至60倍,第二次是7倍至40

倍。相对应于Zhu08-BDB-SSD使用SSD替换了HDD的指纹索引,能够加速3倍-4倍。而在图18中,3个数据集的第一次全备份的ChunkStash的磁盘访问I/O,读操作为3倍到7倍,写操作为600倍到1000倍,因此ChunkStash在读写吞吐率和磁盘访问I/O都达到了良好的效果。

 

2)Flashmemory性能评价

Flash Memory价格比硬盘的价格高,本文采用performance/dollar作为衡量基于flash的在线去重系统ChunkStash的性能标准。在本文中平均块长为8KB,Ziv-Lempel的压缩率为2:1,每个数据块占4KB,元数据大小为64B,元数据部分为64/(4*1024)=1/64,flash的价格是硬盘的10倍,元数据在flash上的开销比HDD高出16%,总开销为1.16倍。ChunkStash比原有的DDFS的方式吞吐率提高了25倍,因此基于ChunkStash的performance/dollar =25/1.16 = 22倍,ChunkStash提高了查询索引的过程,得到了很好的性能结果。

 

5未来展望和总结

随着数据量的不断激增,数据去重技术通过删除重复数据节省存储空间和网络传输带宽的,在数据备份系统和文档归档系统中取得了广泛地应用。数据去重中的指纹索引表随着存储数据总量增加增大以至于无法存放在RAM中,索引表必须存放在磁盘中,去重过程中查询和更新索引表导致大量的磁盘访问I/O,因此吞吐率和查询索引性能成为发展瓶颈。现如今研究成果主要是利用数据流的局部性和相似性特点来加速索引,本文主要对DDFS,ExtremeBinning,SparseIndexing,ChunkStash和SiLo进行了仔细阅读,着重对DDFS,ExtremeBinning,ChunkStash问题,动机,局部性和相似性的特点,系统架构,设计方案以及实验结果分析。针对上面方案和实验的分析,我们可以得出以下结论:

(1)加速索引的局部性(物理局部性)和相似性(逻辑局部性),在多次备份版本中本质上都是数据流的局部性,尽最大可能使用上一次备份的数据流,不仅能减少磁盘访问I/O,加速索引速度,同时也能减少RAM的使用量;

(2)DDFS将备份数据流的数据块和元数据信息顺序写入了容器中,物理局部性和逻辑局部性相似性高或者说DDFS使用数据流物理局部性的来估计逻辑局部性;DDFS的缺点在于当备份版本不断增加时,最新一次的备份版本逻辑局部性与物理局部性偏差较大,产生大量碎片,恢复性能下降,去重性能也在下降;

(3)Extreme Binning利用了备份数据流的相似性特点,采用两级索引机制,将历史备份版本数据流集合中选择最小元素指纹,相同代表指纹的集合是相似的,将数据块指纹写入同一个相似性容器中,因此一次磁盘I/O就能完成索引过程;Extreme Binning的缺点在于没有分段,并且每次取得的不是最近一次的备份逻辑流,每次去重取得的不相关的指纹多,影响索引性能。

(4)ChunkStash基本上和DDFS的局部性原理相同,为了加速索引过程,将元数据信息写入Flash中加速索引过程;ChunkStash和DDFS的缺点基本一致。

因此,针对不同特性的数据集,若局部性陈固定较高建议采用DDFS,Sparse Indexing或ChunkStash,针对数据流相似性高的数据流,建议采用Extreme Binning或SiLo,当数据集没有明显的局部性和相似性时,采用SiLo可能有更好的效果。