用于多个访问方法的无锁存、日志结构化的存储的制作方法_3

文档序号:9650615阅读:来源:国知局
的稳定操作(例如,Mk-Stable)可使更新稳定以用于事务日志检查点。
[0086]例如,Allocate和Free操作可准许示例BW树实现生长和缩小其树。例如,开始事务(BeginTrans)(例如,TBegin)和提交/放弃(例如,TCommit/TAbort)可启用在执行结构修改操作(SM0)时预期的原子性。
[0087]例如,更新操作(例如,Update-D/Update-R)可不被限于“用户级”数据。例如,BW树可以在实现SM0时使用Update-D来张贴其“归并”和“拆分”增量,如下文参考系统事务进一步讨论的。
[0088]根据本文讨论的示例技术,参考高速缓存层数据操作,页更新可通过使用比较并交换操作(CAS)将新页状态指针402安置在映射表304中来实现,而不论增量更新(如图4所示)还是替换更新(例如,如下文参考图7进一步讨论的)。例如,替换更新(例如,Update-R(PID, in-ptr, out-ptr, data))可包括所需新状态和页的先前状态在LSS中的位置两者。例如,新更新增量404 (例如,Update-D (PID, in-ptr, out-ptr, data))指向页302的先前状态406,它已经包括这一 LSS位置。
[0089]例如,这样的无锁存方法可避免锁存引入的延迟,但它可导致其自己的惩罚,如“乐观”并发控制方法那样,即CAS可能失败且更新将随后被重试。例如,可能留待示例LLAMA用户来在适当时重试其操作,因为示例LLAMA实现可指示失败何时发生。
[0090]根据本文讨论的示例技术,尽管在数据处于高速缓存(例如,312)中时没有操作可阻塞,但从辅助存储读取页可涉及等待该页出现在高速缓存中。映射表(例如,映射表304)将指向LSS页,甚至对于经高速缓存的页,如上所述,从而允许各页在高速缓存和LSS之间移动以用于高效的高速缓存管理。
[0091]根据本文讨论的示例技术,在页被转储清除时,示例LLAMA实现可确保高速缓存(例如,312)中表示的事物与LSS(例如,314)中的事物相匹配。因而,转储清除增量可将PID和LSS偏移两者包括在转储清除增量中,且可通过将它前缀到该页302而包括LSS缓冲区和高速缓存(例如,312)中的增量。
[0092]根据本文讨论的示例技术,因为示例LLAMA实现可支持增量更新,所以页状态可包括不毗连片段。将这一特征与转储清除活动相组合可使得高速缓存内的页使其状态的一部分处于LSS中(早先已被转储清除),同时最近更新可只存在于高速缓存中。在这一点发生时,降低下一次转储清除的存储成本是可能的。
[0093]因而,示例LLAMA实现可通过将写入只包括自先前转储清除以来的变化的增量来将这样的页转储清除。例如,通过写入毗连形式的增量(在本文中这可被称为“C-增量”),具有指向LSS中的该页的其余部分的指针,可使高速缓存中的多个更新增量全部毗连用于转储清除。因而,整个页在LSS中是可访问的,但在可能若干片段中。
[0094]根据本文讨论的示例技术,Flush操作可观察到可具有已随时间以此方式被转储清除的若干部分的经高速缓存的页状态,从而造成其中表示了分开的片段以及它们的LSS地址的经高速缓存的页。根据本文讨论的示例技术,在任何时刻,Flush可通过毗连地写入不毗连页片段的内容,来将这些片段在LSS存储中集合在一起。例如,用户可能希望在LSS使用闪存存储时将各片段留待是分开的,而在LSS使用盘存储时需要毗连性(由于不同的读访问成本)。
[0095]根据本文讨论的示例技术,在页被转储清除时,对于系统而言,在转储清除之前知晓该页的什么状态被转储清除可能是合乎需要的。例如,这可使用锁存来容易地查明,因为系统可简单地锁存该页并执行转储清除。然而,在无锁存方法中,该系统在页被转储清除之前防止对页的更新进行转储清除时可能具有很大困难。例如,这在实施预写记录协议时或在转储清除作为结构修改的一部分发生时可能引起问题。例如,在它们执行它们的CAS时,使不适当的转储清除失败可能是合乎需要的。因而,根据本文讨论的示例技术,指向要在CAS中转储清除的页状态的指针可被使用,这随后可仅捕捉特定状态并且在该状态在转储清除完成之前已被更新的的情况下可能失败。然而,这可引起其他问题。
[0096]在研究本文讨论的示例技术时,在确定在执行高速缓存管理并将各页转储清除到LSS时可能有利的这种强不变量时遇到困难。例如,不变量可包括诸如以下属性:
[0097]成功转储清除到LSS的页在已被转储清除时在高速缓存中被立即看到,且该页的经转储清除的状态将在所有稍后状态的转储清除之前处于LSSI/0缓冲区中。其转储清除失败的页将不在高速缓存中表现为已被转储清除,且在查看LSS时将明白转储清除未成功。
[0098]例如,两个替换方法可包括:
[0099]1)转储清除的成功可通过首先执行CAS来确保。一旦CAS成功,该页就可被张贴到LSS。例如,如果这一点完成,则竞争条件可削弱值得信赖的LSS恢复。例如,依赖于早先转储清除的页可能随后被转储清除,其中这一“稍后”转储清除在系统崩溃之前成功写入LSS,同时“早先”转储清除过慢而没有完成且没有出现在稳定LSS中。这一情况可能损害某种形式的因果关系。
[0100]2)需要被转储清除的页的页状态可被捕捉,且被写入LSS缓冲区。随后,CAS可被尝试,且CAS可能失败。因而,页被写入LSS,而没有在系统崩溃的情况下用于区分转储清除是成功还是失败的指示。例如,可存在在各个时刻被写入LSS的多个这样的页。例如,该页的稍后状态可被写入,它看起来在LSS中早于失败的CAS。如上所示,它较晚开始但在较早转储清除之前获得其缓冲区槽。
[0101]根据本文讨论的示例技术,上述两难可被解决,如下文讨论的。例如,如果CAS被执行得足够早,则可以确定在将页的状态复制到日志缓冲区之前转储清除是否将成功。因而,示例转储清除过程可被如下执行:
[0102]步骤1:标识旨在被转储清除的页的状态。
[0103]步骤2:占用将该状态写入到的LSS缓冲区中的空间。
[0104]步骤3:执行CAS来确定转储清除是否将成功。转储清除增量中的LSS偏移将被获得以这样做(如在以上步骤2提供的)。
[0105]步骤4:如果步骤3成功,则写入状态以供保存到LSS中。在这被写入LSS中时,本文讨论的示例LLAMA技术可防止缓冲区被写入LSS辅助存储。
[0106]步骤5:如果步骤3失败,则将指示“失败的转储清除”的指示写入缓冲区中的保留空间。这可消耗存储,但解决了与转储清除成功还是失败有关的模糊性。
[0107]这一示例过程的结果在于LSS在恢复期间可能没有观察到作为已失败的CAS的结果的页。例如,这还保留了以下属性:稍后(在它在“日志”中的位置方面)出现在LSS中的任何页将是比LSS日志中该页的所有较早实例更晚的页状态。
[0108]根据本文讨论的示例技术,使示例LLAMA实现管理高速缓存并换出数据以满足其存储器约束可能是合乎需要的。例如,示例LLAMA实现可能知晓增量更新、替换更新、以及转储清除,且可识别这些中的每一者。然而,示例LLAMA实现将不知晓页的内容,如果它将是通用的话。因而,示例LLAMA实现不知晓访问方法层是否通过在页中维护LSN而支持事务。因而,可能发生的问题包括与示例LLAMA实现在其不能看到LSN并实施预写日志协议时可如何提供高速缓存空间管理(包括逐出各页)有关的潜在问题。
[0109]根据本文讨论的示例技术,已被转储清除的任何数据可从高速缓存中丢弃。例如,就地更新各页的系统可被防止换出(从高速缓存丢弃)任何最近更新的且“脏”的页。然而,因为增量更新,示例LLAMA实现可确定页的哪些部分已被转储清除。例如,每一这样的部分可以用转储清除增量来描述,且这些经转储清除的部分可被“换出”高速缓存。
[0110]在“换出”页部分时,简单地解除分配存储并重用它可能是不合乎需要的,因为可能留下对经换出的部分的虚悬(dangling)引用。因而,根据本文讨论的示例技术,描述页的什么部分已被换出的增量可被使用。
[0111]例如,对于被完全换出的页,其在映射表304中的主存储器地址可被来自该页的最近转储清除增量的LSS指针替换。
[0112]图5描绘示例部分页换出以及示例部分交换增量。例如,对于部分换出的页,CAS可被用来插入“部分交换”增量记录502。例如,这一增量记录502可指示该页已被部分换出(例如,使得该页不能被正常访问),且可指向指示LSS中的用于定位页506的丢失部分的位置信息的转储清除增量记录504。例如,一旦“部分交换”增量502被用CAS进行了安置,针对该页的被丢弃的该部分的存储器可使用示例时期机制被释放,如下文进一步讨论的。
[0113]例如,页管理器可被配置成基于发起部分交换增量记录到与第一页相关联的页状态的前缀,来发起高速缓存层存储中的所述第一页的一部分到辅助存储中的位置的交换操作,所述部分交换增量记录包括指示转储清除增量记录的存储位置的辅助存储地址,所述转储清除增量记录指示所述第一页的丢失部分在辅助存储中的位置。
[0114]例如,页管理器可被进一步配置成使用时期机制来发起与第一页的所述部分相关联的高速缓存层存储的释放操作。
[0115]根据本文讨论的示例技术,这一方法可有利地向用户提供若干有用特征。例如,这样的示例LLAMA实现的高速缓存层(例如,312)可收回存储器,而无需与页的实际内容有关的知识。例如,丢弃经转储清除的页和页的经转储清除的部分可不涉及I/O操作。例如,与多个部分在LSS中的完全经转储清除的页的情况相比,将部分地经转储清除的页带回主存储器可涉及较少的LSS读。
[0116]例如,若干示例高速缓存管理策略可被用来管理高速缓存存储(例如,最近最少使用(LRU)、LRU(k)、时钟,等等--参见例如ff.Effelsberg等人的“Principles of
database buffer management (数据库缓冲区管理原理)”,ACM数据库系统会议录(T0DS),卷 9,第 4 期(1984 年 12 月),第 560-595 页以及 E.0’ Neil 等人的 “The LRU-K pagereplacement algorithm for database disk buffering(数据库盘缓冲的LRU-K页替换算法)”,1993ACM SIGM0D数据管理国际会议管理会议录(SIGM0D’ 93),第297-306页。这些示例可涉及附加记账,但可能没有引起显著困难。
[0117]根据本文讨论的示例技术,使用这样的示例无锁存方法,操作可检查页和页状态两者,甚至在它们已被指定为“垃圾”之后。例如,在没有使用常规“锁存”时,该系统可能未能阻止以下任一情况:1) Update-R操作替换整个页状态,从而在另一操作正在读取它时解除分配先前状态;或2)在另一操作正在检查映射表中的页时“释放”它的De-allocate操作。
[0118]根据本文讨论的示例技术,存储或PID都不可被允许重用,直至不存在另一操作正在访问它们的可能性。因而,可确立“已释放资源”和“可重用资源”之间的区别。例如,“已释放资源”已被一操作指定为垃圾。例如,“可重用资源”已被释放且可被确保不能由任何其他操作访问。例如,时期可被用来保护已解除分配的对象被过早重用(参见例如
H.Kung 等人的 “Concurrent manipulat1n of binary search trees (二分搜索树的并发操纵)” ACM数据库系统会议录(T0DS),卷5,第3期(1980年9月),第354-382页。
[0119]根据本文讨论的示例技术,每一操作可在访问PID或页状态之前加入当前时期E,并且一旦这样的访问完成就退出E。例如,操作可总是将已释放资源张贴在当前时期的列表上,这可能是E(它加入的时期)或稍后时期(如果当前时期已前进的话)。例如,E的列表上的资源都不可被重用,直至加入E的所有操作已退出。
[0120]例如,时期可被编号,且不时地,新时期E+1可变成“当前”时期。新操作因而可继续加入当前时期,现在是E+1。例如,时期机制不变量是:时期E+1或稍后时期中的操作都不可看到且使用时期E中释放的资源。
[0121]因而,基于这一不变量,一旦所有操作已退出E,没有活动操作能访问E中释放的资源。图6示出两个示例时期602、604以及它们相应的垃圾收集列表606、608。如图6所示,垃圾收集项610与时期1 (602)中的“线程1”相关联,垃圾收集项612与时期1 (602)中的“线程2”相关联,且垃圾收集项614与时期2(604)中的“线程3”相关联。如图6所示,时期2(604)的垃圾收集列表608中的垃圾收集项616与时期1 (602)的“线程1”相关联。
[0122]例如,一旦“线程1”和“线程2”已退出时期1 (602),没有活动操作可访问时期1(602)中释放的资源(例如,垃圾收集项610和垃圾收集项(612))。
[0123]例如,第一时期管理器可被配置成在第一处理器操作访问页信息之前,发起第一处理器操作加入第一时期登记列表。
[0124]第一时期管理器可被配置成将第一处理器操作释放的一个或多个资源张贴在第一时期垃圾收集列表中。第一时期管理器可阻塞张贴在第一时期垃圾收集列表中的经张贴的资源的重用,直至第一时期登记列表不包括当前加入的处理器操作。
[0125]根据本文讨论的示例技术,示例LLAMA实现可按类似于日志结构化文件系统(LFS)的日志结构化的方式(参见例如M.Rosenblum等人的“The Design andImplementat1n of a Log-Structured File System(日志结构化文件系统的设计和实现)”,ACM计算机系统会议录(T0CS),卷10,第1期,1992年2月,第26-52页)来组织辅助存储(例如,闪存存储)上的数据。因而,每一页转储清除重新分配该页在闪存上的位置。例如,这可提供使用本文讨论的示例映射表304的附加原因。例如,日志结构化存储可有利地减少每页写的数量,并使得写“顺序化”。因而,许多随机写可被转换成一个大型多页写。
[0126]如上所述,“逻辑页”可包括基础页和指示对该页的更新的零个或更多个增量记录,从而允许一页在被转储清除时以各片段的形式来被写到闪存。因而,闪存上的逻辑页可与可能在使用文件偏移作为指针来链接在一起的不同物理设备块上的记录相对应。此外,物理块可包括来自多个逻辑页的记录。图7a示出了闪存314上的示例日志结构化存储组织 700a。
[0127]例如,逻辑页可通过从闪存上的链的头开始(其在顺序日志702中的偏移可以从映射表304获得)并遵循链接的记录来从闪存314读到存储器(例如,RAM 312)。例如,偏移704可以从映射表304获得以用于访问增量记录706,以获得当前状态以及基础页708,以用于将对应的“逻辑页”从闪存314读到存储器312。
[0128]例如,偏移710可以从映射表304获得以用于访问增量记录712,以获得增量和链接来访问第二增量记录714以及随后访问基础页716,以用于将对应的“逻辑页”从闪存314读到存储器312。
[0129]例如,转储清除过程可在将同一逻辑页的多个增量记录一起转储清除时将它们有利地合并成闪存上的毗连C-增量。此外,当它在被合并在存储器
当前第3页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1