经去重复文件的细粒度部分召回的制作方法_3

文档序号:9291675阅读:来源:国知局
055] 对于文件大小,重解析点具有最大大小16KB,其中4KB被用于根召回位图索引表。 因此,使用4KB,可由根索引表跟踪的、两层设置(或召回位图索引表)中的召回位图的最大 大小是约64MB。
[0056] 召回位图索引表中的条目的最大数量是约4KB/2位=约16K。
[0057] 召回位图文件的最大大小是约16KB*4KB =约64MB。
[0058] 对于4096字节的召回大小,可由两层位图跟踪的最大文件大小是约2TB。
[0059] 最大文件大小:约64M*8*4096B =约2TB
[0060] 对于约128GB的VHD文件,召回位图文件大小是约16MB且根召回位图索引表大小 是约1KB。对于大于约2TB的文件,中间召回位图索引文件可被使用,或者召回粒度可被增 加。注意,在召回位图被初始化之后改变召回粒度是可能的,但这是非常昂贵的操作,因为 使用较粗召回粒度来折叠召回范围涉及部分召回旧数据。对于生长超过大小限度的文件, 如果召回位图不能被复位(经由完全重新优化),则一选项是增加召回位图高度。
[0061] 下表示出了具有4KB召回粒度的每一召回位图高度所支持的大致最大文件大小。
[0062]
[0063] 下表示出了具有两层召回位图的每一召回粒度所支持的大致最大文件大小。
[0064]
[0065] 下表示出了示例文件'
'
[0066]
[0067]
[0068] 下表示出了示例头部格式:
[0069]
[0070] 下表示出了示例块格式:
[0071]
[0072]
[0073] 转向另一方面,即延迟转储清除,召回位图不必在部分召回完成之后立即被持久 存储,而是该系统可以懒惰地做这一点。对于5秒延迟,这提供了例如IOP方面的几乎百分 之四十改进增加。然而,风险是任何未被转储清除的元数据可导致用户数据丢失,可能是不 可预测的。
[0074] 召回位图变化基于用户/程序请求来转储清除,例如作为接口的合同的一部分。 由于VHD情况中发出的大多数写是非高速缓存的非直写(non-write-through),所以它们 在盘写高速缓存没有及时转储清除的情况下遭受损失。因此,VHD解析器在适当的时刻发 出转储清除,这消除了对具有延迟定时器的需求。
[0075] 直写I/O在完成之前被持久存储在盘上。召回位图被就地同步地转储清除。转储 清除还结合文件关闭、转储清除卷、锁定卷以及解除安装卷来发生。任何待决/延迟召回位 图更新在请求被转发给文件系统之前被转储清除出去。注意,锁定卷还包括以独占访问来 打开卷句柄。
[0076] 理论上,延迟转储清除召回位图是可接受的,因为高速缓存的写和非高速缓存的 非直写不确定地写(除非盘不报告具有写高速缓存),而不必关心破坏合同。然而,在一个 实现中,周期性地转储清除召回位图的更激进的方法被使用。
[0077] 图4示出了可以相对于延迟转储清除采取的示例步骤,包括周期性转储清除方 法。在步骤402,作出与是否关闭延迟转储清除有关的检查,例如,最大延迟时间被用户或程 序命令设置成零,这可例如对直写高速缓存发生。如果是,则变窄404被执行以执行转储清 除而无需延迟。否则,步骤402分支到步骤406。
[0078] 在步骤406,对照阈值最大值来评估待决转储清除的数量;如果是,则步骤406进 至步骤410,如下所述。如果否,则执行步骤408,它基于当前时间和最后转储清除时间来检 查转储清除延迟是否已到达;(注意,时间是可配置的,并且例如可以是5秒、30秒等,作为 崩溃保护与效率之间的所选折中)。如果否,则步骤408结束该过程,基本上等待直至待决 转储清除的数量超过最大数量或达到等待时间。
[0079] 如果待决转储清除的数量超过最大数量会达到等待时间,则步骤410确定是否已 调度异步转储清除。如果是,则不需要做任何事;如果否,则步骤412调度异步转储清除。注 意,文件数据被首先转储清除,随后元数据,使得如果其间发生崩溃,原始元数据保存不变, 并且恢复先前文件状态。
[0080] 图5示出了各组件501-507和它们相对于数据写的通信/数据流。如可看到的, 在对范围进行写之前,去重复过滤器从块存储召回数据,其中它是从高速缓存或盘来读取 的。在读回时,该范围在上述位图结构中被标记为脏的。对高速缓存(或盘,如果直写开启 的话)的写随后发生。
[0081] 在数据被提交时,写后操作和转储清除(它可被延迟)随后发生。高速缓存直至 转储清除被允许,如上所述,其中重解析点在转储清除之后设置。
[0082] 转向另一方面,即,打开文件的优化,一般而言,同一位图结构可被用来跟踪文件 的一部分是否是脏的以及文件的一部分是否已被截除(变零,其中数据被移至块存储)。如 将理解的,文件的脏部分不能被截除,即,写被留在文件中。
[0083] 图6A示出先前未被优化的文件的优化如何发生。一般而言,写必须被跟踪,因为 去重复系统600处理文件,使得这些变脏的一个或多个区域(范围被写,同时文件被优化, 例如D)不被截除。截除准备块存储中的各个块,但只同时提交它们,使得对于整个文件的 各个块或对于文件的某一子部分(例如,1千兆字节或2千兆字节增量),截除基本上一次 性发生。在提交时,标记为脏的任何区域不被截除。脏跟踪数据结构662被用于这一目的, 并且因为图1-3的上述数据结构已经具有这一数据,所以去重复系统也可以使用现有数据 结构来用于这一目的。
[0084] 对于先前已被优化但具有部分召回的一些数据的文件,使用辅助截除数据结构 664。辅助数据结构664允许区分发生在区域的优化处理之前的写与发生在之后的写。发 生在之前的写在截除提交时被优化(因为它们在截除后将不是干净的),然而,发生在之后 的写需要在文件中保持是脏的。
[0085] 注意,优化可以发生在文件的各子部分,例如,2千兆字节部分。这被称为持续优 化。在当前子部分被优化之前变脏的区域不被关心,因为它们将需要等待另一优化。
[0086] 关于对读进行服务,直至提交的时刻,读可正常继续,例如从文件流中。在截除时, 对被优化的区域的读取随后需要来自块存储,因为文件流针对这些区域被变零。然而,理论 上,读请求可以在截除时刻之前开始,但未完成。然而,截除之前的时刻被用作截除状态变 更开始点,并且文件流数据不变零直至到达截除结束点。图6C经由时序图示出了这一点, 其中向上箭头示出了状态变更开始点,且另一箭头示出了截除(结束点),其中向下箭头示 出了示例读开始和结束。在截除开始点和截除结束点的时刻之间,块存储中的数据被提交 并校正,但文件流数据尚未变零。在开始点之前开始的读被允许在截除结束(数据变零) 点发生之前完成,即,截除延迟直至这些读完成为止。以此方式,读将得到正确数据。发生 在状态变更开始点之后的读去往块存储,它现在包含正确数据(加标记为脏且将不被变零 的任何文件流数据)。计数器被用来跟踪发生在截除开始点之前的待决读请求,并且在计 数器随每一读完成递减而到达零时,截除结束点发生。然而,使用两个计数器,一个活动用 于"开始点之前"读且一个对"开始点之后读"进行计数,因为这些"之后"读将一到达截除 结束点就将变成下一"之前"读,即,计数器彼此交换,使得"之后"计数器现在变成活动"之 前"计数器,且反之亦然。
[0087] 去重复优化过程的各示例步骤在图7中表示。如将理解的,步骤704、718和720 被提供以支持具有打开句柄的文件的优化。
[0088] 步骤702确定被考虑优化的文件是否满足优化策略准则;如果否,步骤703表示以 其他方式处理该文件,这可简单地跳过该文件。否则,文件760是要优化的目标文件,且步 骤702继续至步骤704。
[0089] 通过允许在优化期间对文件的变更(经由打开句柄),在开始时间tstal^P结束时 间t OTd之间作出的变更中的一些被反映在块存储762中,而其他则没有。删除文件的主数 据流将因此丢失一些变更。为了防止丢失变更,主数据的在t stal^P t 之间变更的各部分 需要被维护,并且因而只有文件的未变更的部分可被截除(即,用对块存储中的各块的引 用来替换)。
[0090] 为此,去重复过滤器跟踪发生在tstal^P t end之间的变更,如步骤704概括表示的, 它开始跟踪对文件的写。注意,去重复过滤器被使用,因为该过滤器还是文件的主数据流在 优化之后被截除的地方。还要注意,变更只需针对一个文件来跟踪,如果该特定文件正被优 化的话。因此,在去重复系统开始优化任何文件之前,去重复系统通知过滤器。
[0091] 优化(或重新优化)文件按典型的方式进行,例如在优化期间该文件被顺序地读 取且其数据被存储作为块存储762中的
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1