确保数据去重存储系统的读性能

原文:Assuring Demanded Read Performance of Data Deduplication Storage with Backup Datasets.

这篇文章发表在MASCOTS 2012,它的作者2011年在HPCC发表了一篇CFL,提出CFL衡量去重系统的碎片程度,这篇文章可以看成是续集,基于CFL提出了一种碎片的解决方案。因为和我目前的研究点重叠,所以看了一遍。

去重系统的读性能很重要,不仅仅是因为恢复操作,更多的情况是需要归档。

1.新的CFL


在2011年的基础上,作者修正了CFL的定义。旧版的CFL忽略了内部碎片的影响,这在我前面的博文 《重复数据删除系统的碎片研究》就有提到,而且也没有考虑缓存的因素。修正后,CFL的定义如下:





这个定义旨在描述一个数据流的碎片情况。OCF的定义没有变,指的是最优情况下需要占用container的数量,也就是指不进行去重,这时占用的container是最少的(考虑内部碎片则未必);而CCF的定义发生了变化,旧定义没有考虑缓存,而现在是考虑有LRU缓存的情况下,实际需要从磁盘读取多少个container。一般来说CFL越接近1说明碎片越少,读性能越高,越接近0说明碎片越多,读性能越低。当数据流存在较多内部碎片时,CFL可能超过1,这时简单地把CFL当成1。

2.解决方案


解决方案主要包括两部分:1.CFL监控器;2.选择去重组件。CFL监控器是一个开关,当发现数据流的碎片情况比较严重,就开启选择去重组件,只对空间局部性很好的块进行去重;当碎片情况缓解后,恢复传统去重。下图是系统的概况。


2.1CFL监控器


数据恢复的顺序和备份顺序是一样的,在备份的时候就可以知道数据流的CFL情况。设置CFL req为开关条件。每接受一个块都会重新计算当前CFL,OCF的计算方法是:


其中s m是数据块的长度,S cs是container的大小,即用数据总量除以container的大小。而CCF的计算方法是:


即判断这个块所属的container是否在缓存中,如果在缓存中,则CCF不变,否则CCF加一。缓存使用LRU替换策略。当CFL低于CFL req时,开启选择去重。

2.2选择去重


选择去重的目标是快速改善CFL水平,基本原理是只去重具有良好空间局部性的块。原理和 iDedup类似,但针对container存储做出了不同实现。其算法如下:



如果接受的数据块是唯一的,就写入container buffer,如果container buffer满了,就将container buffer写入磁盘。如果这个数据块是重复的,那么需要决策是否去重。如果这个数据块的container id等于temporary container的id,就先将数据块放入temporary container; 如果不等于,则判断temproray container当前的规模,如果大于预设的值p,就将整个tmp container去重,否则将tmp container写入container buffer;最后,将这个数据块放入空的tmp container,并更新tmp container的id。

3.讨论


作者的实验是用DiskSim仿真的,用了六个数据集,每个数据集有2~5个版本。谈谈我的看法吧。
  • 测试恢复性能,最好使用渐变的数据集,版本数量越多越好,这样才容易看出碎片的影响;
  • 测试的结果,有一些莫名其妙的地方,曲线变化很奇怪,没有解释;
  • 没有考虑操作系统本身的缓存影响,放大了内部碎片对性能的影响;
  • 没有测试重删率的损失;
  • 一些数据集的测试数据和其特点矛盾,难以解释;
  • 感觉还可以做得更好。

转载于:https://www.cnblogs.com/opennaive/p/3312770.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值