在持久存储器存储中的异步一致快照的制作方法

文档序号:8531867阅读:245来源:国知局
在持久存储器存储中的异步一致快照的制作方法
【专利说明】
【背景技术】
[0001]非易失性存储器(NVM)即使在电源断开之后也保留被存储的数据。最广泛使用的NVM的类型曾是闪存。然而,不得不在比通常的计算机可以自动寻址的块大的块中写闪存,并且闪存通常在恶化之前仅持续有限数量的写-擦除周期。较新类型的NVM提供较好的性能,同时维持闪存的非易失性方面。这些技术包括例如忆阻器(memristors)、相变存储器(PCM)以及自旋矩转移(spin-torque transfer) RAM (STT-RAM)0
[0002]忆阻器器件基于阻变效应(resistance switching effect),并且在快速访问时间的情况下允许比硬盘驱动器大的数据密度。PCM器件基于电阻的改变处理读/写操作,提供高的存储密度。STT-RAM器件“翻转(flip)”在磁性随机访问存储器(RAM)中使用的有源元件,并且提供具有较好的可量测性的较低功率消耗。
【附图说明】
[0003]图1是可以被实施用于在持久存储器存储中的异步一致快照的示例系统的高级图示。
[0004]图2图示了生成快照。
[0005]图3图示了以最近的全局一致状态更新快照。
[0006]图4图示了针对程序的用户区域的示例状态、日志条目、排队的操作以及快照。
[0007]图5是图示了可以实施持久存储器存储中的异步一致快照的示例操作的流程图。
【具体实施方式】
[0008]诸如但不限于忆阻器、相变存储器(PCM)以及自旋矩转移RAM (STT-RAM)的新的非易失性存储器(NVM)技术提供重新定义由应用使用的数据持久性模型的机会。以字节粒度的存储器访问连同与动态随机访问存储器(DRAM)不分上下的等待时间通过中央处理单元(CPU)存储指令使能数据的细粒度和有效持久性。然而,计算环境中的故障的存在和高速缓存的组合在确保例如崩溃之后的恢复期间的持久数据是一致的中提出了挑战。
[0009]本文使用术语“一致状态”来意味着符合所有程序不变量(invariant)。在没有强制执行程序不变量的机制的情况下,硬件或软件故障可以使持久数据损坏并且因此对应用不可用。
[0010]如今默认用于很多系统的写回(write back)高速缓存通过延迟在持久存储器中的写的可见性使事情变得复杂。考虑例如指令序列,其中存储器的块(chunk)被分配,然后被初始化,并且然后使得全局可见的指针指向块。在存在高速缓存的情况下,全局可见的位置可以在初始化的值之前在持久存储器中出现。在该场景中,如果程序在初始值被写到持久存储器之前崩溃,则持久状态将以全局可见的存储器位置指向未被初始化的存储器而被留下,这导致不期望的操作条件。
[0011]为了减少或者完全地防止这样的不一致,编程者可以采用充当在两个数据存储之间的屏障的指令的组合。该屏障将因此被称为“可见性屏障”。例如,存储器栅栏(memoryfence)和高速缓存行冲刷(cache line flush)的组合可以被用在持久存储器的两个存储之间,以确保第一存储在第二存储变得可见之前在NVM上可见。给定虚拟地址,高速缓存行清除命令将相应的高速缓存行冲刷到存储器并且使所述高速缓存行无效。但是这些低级别的构造使编程冗长并且易出错。
[0012]针对多线程程序的关键区段和原子区段(atomic sect1n),编程者也可以使用事务性一致性语义。“关键区段”是其中共享的数据被锁保护的代码段。“原子区段”是必须出现来以不可分和隔离的方式执行的代码段。在串行和分布式的程序中,提供针对代码的区段的故障原子性(failure-atomicity)(以及因此的一致性)的构造可以被提供。尝试提供针对这些代码构造的适当保证的框架可以使用取消日志记入并且利用如上所述的类似的屏障。如果程序崩溃,可以通过在恢复期间“重放”取消日志来重新建立应用的状态。
[0013]然而,所述过程必须确定在相应的存储可见之前取消日志条目在NVM上可见,例如通过将在取消日志中的条目和原始存储之间的可见性屏障添加到NVM。在创建在取消日志中的给定条目时,使用可见性屏障的附加实例,以确保所述条目的不同部分相互一致。执行可见性屏障可以是在计算上代价高昂的(例如,占数百个CPU周期或更长以执行)。
[0014]本文描述的系统和方法使用基础设施维持的数据结构(S卩,在瞬时存储器和NVM中创建/维持的数据结构)减少捕获一致状态的开销,并且包括日志和快照。在瞬时存储器(例如DRAM)中而不是在NVM自身中创建所述日志。另外,在NVM中维持所述一致快照。因此,日志条目的可见性的正确排序的问题不再出现,因为日志条目不再处于NVM中。因此,可以从由用户线程执行的代码移除可见性屏障。从用户线程(即,关键处理路径)移除可见性屏障通过允许用户线程以底层程序的完全执行速度或者接近底层程序的完全执行速度操作来改善无故障操作的性能。本文描述的系统和方法可以被有效地实施在利用NVM技术(例如忆阻器、PCM和STT-RAM)的机器上的处理环境中,以及可以被有效地实施在利用块设备的机器上的处理环境中,所述块设备诸如硬盘和固态驱动器(SSD)。
[0015]在继续之前,应注意,如在本文中使用的那样,术语“包括”和“包含”意味着但不限于:“包括”或“包含”以及“至少包括”或“至少包含”。术语“基于”意味着“基于”以及“至少部分地基于”。
[0016]图1是可以被实施用于在持久存储器存储中的异步一致快照的示例系统100的高级框图。在图1中,在框101中的持久数据实体Ru和在框140中的R 3由方角矩形图示,而在框130中的瞬时数据实体L和在框150中的Q由圆角矩形图示。由椭圆形图示执行实体,并且由在实体之间的实线图示在执行实体和数据实体之间的交互。箭头指示数据流的方向。出于说明的目的,除其他操作之外,用户线程110可以写到用户区域Ru,并且帮助者线程120可以从瞬时存储器130读日志L。
[0017]系统100可以被实施在各种计算设备中的任何计算设备的处理环境中,所述各种计算设备诸如但不限于:独立台式/膝上型/上网本(netbook)计算机、工作站、服务器计算机、刀片服务器(blade server)、移动设备以及器具(例如,专用于提供服务的设备),仅举几个示例。计算设备(未示出)可以包括存储器、记忆装置以及至少足以执行本文描述的程序代码的一定程度的数据处理能力。
[0018]系统100可以被实施在抽象(abstract1n)的区域中以向应用呈现持久存储器。相应地,所述抽象的区域在本文中被称为持久用户区域(或者被简单称为“用户区域”)。在图1中的框101中示出了示例用户区域Ru,因为所述用户区域Ru可以被实施为在程序执行期间被所述程序使用的、在NVM中的数据结构。在不失一般性的情况下,并且出于简单的目的,在图1中示出仅一个用户区域Ru,但是可以实施多于一个用户区域。
[0019]所述用户区域Ru可通过被映射到在NVM中的物理页的虚拟地址的范围寻址。用于创建和访问用户区域Ru的应用编程接口(API)不是本公开的焦点,并且因此不详细描述所述API。然而,简要地,如果编程者想要在程序中创建用户区域Ru,则用户区域Ru被创建(例如,通过调用CreateReg1n)并且从用户区域Ru中分配持久数据结构(例如,通过调用nvm_alloc)。所述nvm_alloc具有相应的nvm_free,并且所述用户区域Ru具有持久根(例如,在固定的偏置处的相同的持久区域之内),用于访问其中的数据结构的目的。应注意,在持久区域之内的数据不是串行化的,并且因此可以在所述程序中嵌入指针。
[0020]在不失一般性的情况下,所述用户区域Ru被映射在虚拟地址空间中的相同的基础地址处,并且因此可以如没有重新定位的情况下那样使用嵌入的指针。在执行程序时,从区域的持久根(或者从程序根)不可达的在所述用户区域Ru之内的任何数据被认为是“垃圾(garbage ) ”并且可以通过将所述存储器返回到一般使用来“回收”物理空间。可以在程序执行期间或者在程序崩溃之后的恢复期间回收所述物理空间。
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1