CN101073064A - 使用检查点从存储事务故障中恢复 - Google Patents
使用检查点从存储事务故障中恢复 Download PDFInfo
- Publication number
- CN101073064A CN101073064A CNA2005800362779A CN200580036277A CN101073064A CN 101073064 A CN101073064 A CN 101073064A CN A2005800362779 A CNA2005800362779 A CN A2005800362779A CN 200580036277 A CN200580036277 A CN 200580036277A CN 101073064 A CN101073064 A CN 101073064A
- Authority
- CN
- China
- Prior art keywords
- data
- time
- carrier store
- memory
- processor module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1474—Saving, restoring, recovering or retrying in transactions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1458—Management of the backup or restore process
- G06F11/1461—Backup scheduling policy
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1458—Management of the backup or restore process
- G06F11/1469—Backup restoration techniques
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Debugging And Monitoring (AREA)
- Retry When Errors Occur (AREA)
Abstract
所公开的技术通过设立写时拷贝操作序列的检查点,使从存储有关的故障中恢复容易。将这样的检查点并入写时拷贝的操作序列可包括以下:接收标识将被写至第一数据存储器的有效载荷数据的写请求,读取与第一数据存储器相联系的原始数据,拷贝原始数据至第二数据存储器,记录与写请求相联系的事务信息,产生第一检查点以确认事务信息被成功记录以及原始数据被成功拷贝至第二数据存储器,将有效载荷数据写至第一数据存储器,确认写时拷贝操作序列的成功完成,以及产生确认这样的操作序列成功完成的第二检查点。第一和第二检查点用于形成一个或更多个存储单元(或其部分)故障之前的表示。所述检查点可与其它事务信息一起被存储,以促进在发生故障时的恢复,并且可用于促进将最优化用于处理I/O操作。
Description
技术领域
[0001]所公开的技术涉及数据存储领域并且,更具体地,涉及与时间有关的数据存储和恢复。
背景技术
[0002]企业对允许横跨企业的数据共享的计算机系统的依赖日益增强。已发展成可存储大量数据的数据存储系统对企业来说通常是极其重要的。因此,数据存储系统的中断或故障可破坏整个企业的运转。
[0003]典型地,为了保护,计算机系统上运行的应用程序所使用的数据存储在主存储装置(例如磁盘)和副存储装置(例如,磁带和比较便宜的磁盘驱动器)上。当这些应用程序运行时,数据由于经营活动的进行而发生变化。信息技术部门典型地处理许多关于数据存储系统的问题。然而,通常这些问题可分成两大类:硬件故障和数据破坏。
[0004]数据存储系统的商业意义及它们存储和维护的数据完整性的重要性引起对提供数据保护和数据恢复的系统产生相应的极大兴趣。目前,镜像法和快照技术是对数据恢复感兴趣的企业可得到的两种主要方法。如果发生系统故障,数据恢复允许企业从前面的时间点恢复数据并使用未被破坏的数据重新开始操作。一旦硬件故障或破坏事件(或多个破坏事件)的时间被识别,就可通过返回到所知的存储数据未破坏的时间点来实现恢复。
[0005]典型地,数据存储装置包括个体的存储单元,例如单元格、块、扇区等。由主系统(通常意指一个或更多个主系统)产生的读命令指引信息系统向主机提供在请求中所指定的数据。传统上,信息的指定基于其在数据存储装置内的位置,例如,一个或更多个特定块。写命令以类似的方式被执行。例如,响应由主系统产生的I/O请求而将数据写到存储器的特定单元。位置标识符提供数据和数据存储在其中的存储单元之间的直接关联。据此,位置标识符被用来读取和更新数据。
[0006]在数据保护问题的硬件故障方面,供应商提供了若干不同的机制来辅助防止硬件故障影响应用程序的可用性及性能,例如,磁盘镜象。这是一种多个磁盘被集中在一起以存储相同信息的机制,允许磁盘发生故障而不阻止应用程序检索数据。在一种典型设置中,用户为每个应用程序数据磁盘分配1-4个镜像磁盘。被发送到应用程序主磁盘的每个写请求同样被发送到镜像拷贝磁盘,所以用户实际上具有N个(在此N典型地在2和5之间)其上数据完全相同的磁盘。结果,该镜像法提供至少一份当时的当前数据的完整备份。因此,如果一个磁盘发生故障,用户仍拥有保留在其它镜像磁盘上的应用程序数据。独立磁盘的冗余阵列(RAID)提供了镜像系统的一个例子。
[0007]然而,当数据破坏发生时镜像法是无效的。数据破坏以多种形式出现,但是其通常在由正被写到磁盘的数据引起用户应用程序完全停止运行时被识别出。存在许多可能的数据破坏源,例如试图升级应用程序失败,用户意外地删除关键信息,流氓用户故意损坏应用程序数据,计算机病毒等。不管是什么原因,镜像工作实际上妨碍了已经历数据破坏的用户,这是因为镜像法将错误的数据同时复制到所有镜像上。因此,所有的数据拷贝都被破坏。
[0008]另外,因为磁盘被持续地更新,历史数据的备份,也就是在过去时间T出现在数据存储装置中的数据的快照,只有当系统被指示在时间T或在时间T之前保存备份的情况下才会被创建。因此,在时间T+1,系统不能提供在时间T的当前数据的备份。此外,每个存储的单元均被保存,而不管存储于其中的数据自创建先前备份的时间以来是否未改变。这种方法效率低而且昂贵,因为其增加了在多个时间点备份数据存储装置所需要的存储容量。并且,当与较大的数据存储系统一起使用时,镜像法变得效率较低且更易于出错,这是因为大型系统跨越数以百计的磁盘且系统不能保证每个磁盘都在相同的时间点被备份。因此,复杂的和易于出错的处理被使用,以尝试为整个数据存储系统建立同时备份。
[0009]如上所述,快照,也被称为时间映象单一点,经常连同镜像系统一起被创建。替代性地,快照法可被用作一种独立的数据存储和恢复方法。在快照法中,用户选择当磁盘的当前内容将被拷贝并写到不同存储装置或者相同存储装置内所分配的存储单元组时的时间中的周期点。然而,该方法具有与镜像法相同的缺点,也就是,所有快照都是在当时的当前时间点连同用户请求创建的或由于创建存储数据快照的先前预定指令而被创建的。不论是单独的或在组合中,数据镜像或数据快照皆不允许用户使用后来的认识去重新创建在某个过去时间的当前数据组。因为存储在每一存储单元的数据未与个体时间标识符相联系,所以用户不能返回查看来自特定时间点的数据,除非同时为该时间先前创建了历史备份。复原中间时间的数据是无法实现的,例如,时间(T-1),在当前时间(T)和上次备份磁盘被保存的时间(例如T-2)之间。同样,产生单个时间点映象通常是一个冗长的过程。由于存储容量和数据组大小已经增加,所以映象产生时间变得更加重要。
[0010]因此,存储业集中于更快和更频繁地产生映象。使用磁带的数据恢复系统供应商试图通过增加系统容量和磁带头数量来提供更大的、更可伸缩的磁带库,从而允许并行操作。基于磁盘系统的供应商集中在如何使用磁盘驱动器来提供更多具有改进的响应时间的单个时间点映象。在一种方法中,数量为N的镜像磁盘中的一个在指定时间被脱机,以在该时间创建单个时间点映象。假如镜像磁盘的数量被充分增加,该方法就可为增加的映象数目留有余地。然而,该方法显著地增加了每个时间点所需的存储容量,例如,对于5千兆字节(terabyte)应用程序,需要30千兆字节的存储量以支持2个标准镜像磁盘和4个时间点映象。因为这些解决方案仅仅试图调整现有方法,所以它们未能提供一种当数据存储系统的容量持续增加时仍可使用的解决方案。
发明内容
[0011]所公开的技术通过使在基本任何先前时间点的数据恢复容易来处理当前系统的缺点,甚至当在恢复时间之后的时间作出请求时也是这样。
[0012]在一个实施例中,所公开的技术可用于设立写时拷贝操作序列的检查点,所述写时拷贝操作序列在从随后的存储事务故障中恢复是有用的。例如,在冗余系统中,可能有一个用于处理I/O操作的主处理器,和一个或更多个辅助处理器,在一检测到主处理器中的错误或故障时,所述一个或更多个辅助处理器就可完成主处理器的任何在处理中的I/O操作。所公开的检查点的实施例在辅助处理器刚一被指不取代主处理器时就提供对成功地处理未完成的I/O操作有用的信息。同时,所公开技术的实施例采用与其它事务信息的存储结合的方式促进这些检查点的使用。此外,所公开技术的实施例通过主处理器促进了处理最优化的利用,这是因为辅助处理器不需要知道主系统尝试的任何最优化来成功地插手帮助主处理器,并且辅助处理器可使用所公开的检查点信息来确定对于任何未完成的I/O操作辅助处理器需要什么处理。这对于在任何给定时间可能有几千、几万或更多的未完成的I/O事务的高速系统尤其是有利的。
[0013]合并一个或更多个检查点的说明性写时拷贝操作序列,例如,可包括以下操作序列:接收标识将从第一数据存储器的第一地址开始被写的有效载荷数据的第一写请求,读取与第一数据存储器的第一地址相联系的原始数据,将所述原始数据拷贝至从第二地址开始的第二数据存储器,(在例如一个或更多个数据结构中)记录与第一写请求相联系的事务信息(例如,与第一地址、第二地址及/或第一写请求被接收的时间相联系的标志),产生第一检查点以确认事务信息被成功记录以及原始数据被成功地拷贝至第二数据存储器,将有效载荷数据写至从第一地址开始的第一数据存储器,确认写时拷贝操作序列的成功完成,以及产生一确认这样的操作序列成功完成的第二检查点。
[0014]第一和第二检查点,独立地或在组合中,可充当形成一个或更多个存储单元(或其部分)的表示的基础,该表示就如所述存储单元在存储事务故障(例如,硬件故障、电源故障等等)之前存在的样子。第一检查点,可作为事务信息的一部分存储,可充当将与第一写请求相联系的信息存入处理器模块的一个或更多个队列的基础。第二检查点,可作为事务信息的一部分存储,可充当将与第二写请求相联系的信息从处理器模块的一个或更多个队列除去的基础。
[0015]在一个实施例中,所公开的技术可用于开发系统及执行方法以从与写时拷贝操作序列相联系的故障(例如,处理器模块的硬件/电源故障)恢复。在故障之前排队且与写时拷贝操作序列内的操作对应的一个或更多个写请求可被标识。可确定是否响应完成写时拷贝序列的第一部分而形成第一检查点。写时拷贝操作序列的第一部分可包括与将存储于第一数据存储器内一位置(通过排队的写请求标识)的原始数据拷贝至第二数据存储器相联系的一个或更多个操作。还可以作出另一个确定,即关于是否响应完成写时拷贝操作序列的至少一个第二部分而形成第二检查点。写时拷贝操作序列的第二部分可包括与将由排队的写请求指定的有效载荷数据写至第一数据存储器内一位置相联系的一个或更多个操作。
[0016]基于第一及/或第二检查点,可处理一个或更多个排队的写请求以至少部分地从故障中恢复。例如以及当没能定位第一检查点时,排队的写请求的处理可包括将与写时拷贝操作序列相联系的基本所有操作进行排队,用于执行。替代性地以及在定位第一检查点却没能定位第二检查点时,排队的写请求的处理可包括将用于执行的操作的一子集进行排队,在此这样的排队的操作子集包括与写时拷贝操作序列的第二部分而不是第一部分相联系的操作。替代性地以及在定位了第一和第二检查点时,排队的写请求的处理可包括将写时拷贝操作序列中的操作从一个或更多个操作队列中除去。
[0017]在一个实施例中,所公开的技术可用于开发系统和执行方法以促进从存储事务故障(也就是,当写至及/或另外地操纵存储单元时发生的错误,比如可在电源故障、硬件故障或数据破坏事件中遇到)恢复。标识从第一数据存储器的第一地址开始将被写的有效载荷数据的写请求可被存储管理装置在实行该写请求之前接收。与第一数据存储器的第一地址相联系的原始数据然后被拷贝至从第二地址开始的第二数据存储器。与写请求相联系的事务信息可被记录并可包括,例如,第一和第二地址以及写请求被接收的时间。第一指示符(也就是,第一检查点)还可以被产生以确认事务信息的成功记录,以便最优化将来的恢复效果。第一指示符可进一步确认与第一数据存储器的第一地址相联系的原始数据已被成功地拷贝至第二数据存储器。
[0018]一旦从第一数据存储器的第一地址开始的原始数据已被成功地拷贝至相同或不同数据存储器的第二地址,由写请求标识的有效载荷数据可被写至从第一地址开始的第一数据存储器——有效地重写原始数据,而不是现在存储在第二地址的拷贝。此外,第二指示符(例如,第二检查点)可被产生以确认有效载荷数据被正确地写至第一数据存储器并且该第二指示符可在将来的恢复工作中被检测以指示第二写请求应该被再执行,所述第二写请求可能在较早的写请求被接收的时间之后出现。第一指示符、第二指示符及/或至少一些事务信息随后可被用于,至少部分地,从存储事务故障中恢复。例如,如其在存储事务故障之前存在的样子的至少一个存储单元的表示可基于第二存储器中拷贝的原始数据的至少一些和写请求被接收的时间而形成。事务信息还可以被搜索,从而基于与之基本上一致的选定时间标识写请求被接收的时间。此外,基于在事务信息中发现第二指示符,与第二写请求相联系的信息可从备用处理器模块的一个或更多个队列除去,在此这样的备用处理器模块响应存储事务故障(例如,使主处理器模块无效的电源及/或其它硬件故障)而担任主处理器模块的任务。基于在事务信息中发现第一指示符,备用处理器模块的一个或更多个队列还可载入与第三写请求相联系的信息。
[0019]在一个实施例中,所公开的技术检测发生在时间T1的存储事务故障(例如,主处理器模块的硬件或电源故障)。与在时间T1之前被接收的第一写请求相联系的一个或更多个第一指示符可被标识,从而确认原先存储的从写请求指定的第一地址开始的数据已被成功地拷贝至第二地址并且这样的第一指示符可充当将与第一写请求相联系的信息装入备用处理器模块的一个或更多个队列的基础。至少一些拷贝的数据可充当形成至少一个存储单元的表示(如该至少一个存储单元在存储事务故障之前存在的样子)的基础。第二指示符确认由第一写请求指定的有效载荷数据已被成功地写至从第一地址开始的数据存储器,所述第二指示符还可被标识并且这样的第二指示符可,例如,充当从备用处理器模块的一个或更多个队列除去与第二写请求相联系的信息的基础,所述备用处理器模块可响应存储事务故障而承担主处理器模块的任务。
附图说明
[0020]在附图中,类似的参考字符通指从不同视图观察的相同部分。并且,附图不一定按比例,取而代之,重点通常放在对本发明原理的说明上。
[0021]图1是根据本发明实施例的存储系统的框图,所述存储系统包括当前存储器(current store)和时间存储器(time store)。
[0022]图2是描述被主机发送到存储管理装置的输入/输出(I/O)请求实施例的图表。
[0023]图3是描述在本发明的一个实施例中被指引到数据存储器的一系列写命令的表格。
[0024]图4是描述根据本发明实施例的数据存储器的多个先前映象的产生的框图。
[0025]图5是描述根据本发明实施例的动态当前存储器的产生的框图。
[0026]图6是描述一恢复数据存储器的产生的时间线。
[0027]图7A和7B是描述在一系列写命令被指引到当前存储器时当前存储器和时间存储器的内容的表格。图7A描述当前存储器。图7B描述时间存储器。
[0028]图8是描述根据本发明实施例的数据存储器先前映象的产生的表格。
[0029]图9是描述根据本发明实施例的处理器模块的框图。
[0030]图10是描述根据本发明实施例的存储管理装置的进一步细节的框图。
[0031]图11是根据本发明实施例的I/O管理器的框图。
[0032]图12是根据本发明实施例的存储管理装置的框图。
[0033]图13是根据本发明实施例的存储系统的框图。
[0034]图14A是根据本发明的一种用于提供数据存储器内位置的修改历史的方法的说明性实施例的流程图。
[0035]图14B是根据本发明的用于提供数据存储器内位置的修改历史的方法的另一说明性实施例的流程图。
[0036]图15是描述被主机发送到存储管理装置的I/O请求实施例的图表。
[0037]图16是描述被存储管理装置发送到主机的I/O响应实施例的图表。
[0038]图17是描述本发明实施例中的被指引到数据存储器的一系列写操作的时间线。
[0039]图18是描述根据本发明的由存储管理装置产生的历史索引实施例的图表。
[0040]图19是描述被主机发送到存储管理装置的I/O请求实施例的图表。
[0041]图20是描述被存储管理装置发送到主机的I/O响应实施例的图表。
[0042]图21是根据本发明实施例的存储管理装置的框图。
[0043]图22是根据本发明的一种用于存储数据的方法的说明性实施例的流程图。
[0044]图23是根据本发明实施例的多处理器系统的框图。
[0045]图24是根据本发明的一种用于为多处理器系统维护基本上一致的运行时钟的方法的说明性实施例的流程图。
[0046]图25是根据多处理器系统内的从属处理器模块内部时钟的时间与根据多处理器系统内的主处理器模块内部时钟的时间的关系图。
[0047]图26是根据本发明实施例的存储管理装置的框图。
[0048]图27是描述根据本发明实施例的一组写命令的记录索引的表格。
[0049]图28描述了根据本发明实施例而产生的映射。
[0050]图29是根据本发明实施例的用于处理I/O请求的系统的框图。
[0051]图30是根据本发明的一种用于处理I/O请求的方法的说明性实施例的流程图。
[0052]图31是根据本发明实施例的与I/O请求相对应的表格。
[0053]图32描述了根据本发明实施例的用于处理I/O请求的队列。
[0054]图33是根据本发明实施例的一种系统的框图。
[0055]图34是根据本发明实施例的一种系统的框图。
[0056]图35是根据本发明实施例的一种方法的框图。
[0057]图36A-36D描述了根据本发明实施例的二叉树的示范实施例。
[0058]图37描述了根据本发明实施例的存储管理装置的框图。
[0059]图38描述了根据本发明实施例的一种用于检查点的示范方法。
[0060]图39描述了本发明的示范实施例的框图。
[0061]图40描述了根据本发明实施例的一种用于检查点的示范方法。
[0062]图41是根据本发明实施例的存储管理装置的框图。
[0063]图42是一种用于记录被指引到数据存储器的写请求以及用于使能产生过去时间的数据存储器至少一部分的至少一部分时间映射的方法的说明性实施例的流程图。
[0064]图43是用于解释图42所述的用于记录被指引到数据存储器的写请求以及使能产生过去时间的数据存储器至少一部分的至少一部分时间映射的方法的说明性实施例的示范框图。
具体实施方式
[0065]图1提供存储系统30的概观,所述存储系统考虑到从先于请求时间的时间点产生数据存储器的映象。主机34通过存储管理装置38与物理存储器36通信。在一个实施例中,物理存储器36存储数字数据。在该实施例的一个版本中,物理存储器36是一个或更多个磁盘驱动器。例如,所述磁盘驱动器可以是磁碟(magnetic disk)驱动器、光盘驱动器或两种类型磁盘驱动器的组合。在该实施例的另一个版本中,物理存储器36包括一个或更多个磁带驱动器。物理存储器36可以是一个驱动器或多个驱动器的组合,或存储区网络。物理存储器36本身可以是由各种存储网络、设备或控制器的任何一种所呈现的虚拟驱动器。例如,物理存储器36可以是镜像磁盘或RAID系统,或其它存储设备。
[0066]主机可以是任何类型的网络或系统(一个或更多个),其存取物理存储器36和/或任何其它形式的数据存储器。在一个实施例中,主机34包括在一个计算机网络上的许多计算机。主机可以包括存储网络,一个或更多个用户可通过多个工作站、个人计算机或两者的组合来访问所述存储网络。
[0067]在一个实施例中,存储管理装置38本身可以是一个“存储设备”。例如,其可以是具有处理器和内存的单独装置。在此所描述的存储管理装置38的功能性还可被整合到现有的企业系统存储区网络中。在一个实施例中,存储管理装置38是作为存储系统的固件层实现的。在一个实施例中,存储管理装置38使用当前存储器A44和时间存储器A46数据用于磁盘卷A。虽然,该图显示当前存储器A44和时间存储器A46位于存储管理装置38内,但优选地,与当前存储器A44和时间存储器A46之一或两者相关联的数据被存储在物理存储器36中。在此情况下,存储管理装置38记住其内存中的当前存储器A和时间存储器A中的数据,例如以索引和指针的形式,并且从该物理存储器36读写数据。例如,可将物理存储器36中的独立存储单元群(separate groups units ofstorage)分配给当前存储器A44和时间存储器A46,或可将它们的数据混和在物理存储器上。
[0068]当前存储器A44和时间存储器A46还可以在随机存取存储器(RAM)或其它位于存储管理装置38中的存储器中实现。在该实施例的一个版本中,当前存储器A44和时间存储器A46位于不同的内存中。此外,存储当前存储器A44的介质类型可以不同于存储时间存储器A46的介质,例如,当前存储器A46可位于磁盘驱动器上而时间存储器A44位于RAM上。在另一个版本中,当前存储器A44和时间存储器A46包含同一内存的不同分区(section)。在另一个实施例中,当前存储器A44和时间存储器A46都包括物理磁盘组成,所述物理磁盘可以是物理存储器36或其它。当前存储器A44和时间存储器A46可被存储在相同的物理磁盘上,或者它们可都被存储在许多不同物理磁盘的部分中。
[0069]当前存储器A44存储当前数据而时间存储器A46存储来自当前存储器A44的较旧的数据,该较旧的数据此后已被较新的数据替换(即被重写)。存储管理装置38使用来自当前存储器A44和时间存储器A46之一或两者的信息来产生磁盘卷A的当前和过去的映象,并将其呈给主机34。在一个实施例中,每对当前存储器A44和时间存储器A46实现一个或更多个逻辑装置。在该实施例的一个版本中,存储管理装置38不包括磁盘驱动器,但使用物理存储器36存储此类虚拟驱动器上的数据。
[0070]存储管理装置38在第一通信链路40上与主机34通信。第一通信链路40可以是任何类型的数据通信链路,例如局域网LAN,存储网络或包括光纤信道和小型计算机系统接口(″SCSI″)的总线。以太网(例如,吉比特以太网)和无线通信是可用于第一通信链路40的其它可能链路。在一个实施例中,存储管理装置在逻辑层传递SCSI协议,并且能使用各种物理层中的一个或更多个来传递,所述物理层包括SCSI总线、光纤信道、光纤信道2或以太网上的iSCSI。在通信链路40上,响应主机34的I/O请求,存储管理装置38所起的作用就如同其是物理存储器36。主机34的I/O请求可包括对存储的单元的读和写命令。
[0071]存储管理装置38在第二通信链路42上与物理存储器36通信。第二通信链路42也可以是任何类型的数据通信链路,例如LAN、存储网络或包括(但不限于)光纤信道和小型计算机系统接口(SCSI)、集成驱动电路(IDE)、FCon和FiCon的总线。以太网(例如,吉比特以太网)和无线通信是可用于第二通信链路42的其它可能链路。在一个实施例中,物理存储器36和第二通信链路42在存储区网络中实现。
[0072]使用至今为止的主存储系统,存储在装置上的数据按地址被编索引,所述地址由装置和偏移量组成。存储地址空间被分成块(例如,扇区),在此每个块是512个字节长。当以I/O请求呈现时,该I/O请求被发送到特定的装置/磁盘/存储单元,并且地址是通常所说的逻辑块地址(LBA)和长度。在本例中,块包含存储单元并且LBA指示I/O操作开始所在的存储单元,也就是,一个特定的512字节的块,该块是所述装置的一部分。长度指示I/O请求将会对多少个512字节的块操作。例如,为了从起始于字节8192的装置读4096个字节,LBA将被设为16且长度将是8。小于或大于512字节的块大小也可以被使用,例如,块长可以为520字节。另外,存储单元可以是可唯一地寻址的存储地址空间的任意部分。
[0073]在一个实施例中,时间是用于给定存储装置的地址空间第二部分中的附加维度。用户可以请求特定的LBA(和关联的块范围),并且用户还被提供在特定的时间点请求特定的LBA/范围组合的选择权。时间是从基本上连续的时间间隔中选出来的,并且无须提前确定。该功能可被提供在块寻址级,并且其可被应用于整个装置以产生可变的时间存储点。
[0074]在一个实施例中,存储管理装置38的命令包括地址,该地址包括位置标识符和时间标识符。在一个实现中,位置标识符可包括逻辑装置标识符和具有该逻辑装置的存储单元中的至少一个。时间标识符可以是当前时间或可以是恢复时间,也就是,需要存储在该存储单元的数据的一先前时间点。在本说明书中,主机34请求数据的先前时间被称为“恢复时间”。“请求时间”指的是主机34请求来自恢复时间的数据的时间。可通过指定包括位置或地址和时间的地址对数字数据的存储的单元进行存取。存储管理装置38因此可将数据存储器的连续“先前映象”呈给主机34,而不管是否快照先于请求时间而产生,在此各个先前映象是在恢复时间的磁盘视图。在一个实施例中,定义连续的时间标识符之间的最少经过时间的增量是充分小的,那么它就允许从基本上连续的时间间隔产生先前的数据存储器。在该实施例的一个版本中,可使用全部位于当前存储器A44上的数据来响应对当前映象的请求,而不需要使用来自时间存储器A46的任何数据。然而,如将在下面被更详细地描述的,对来自先前时间的数据请求(也就是,先前映象)可能需要来自当前存储器A44和时间存储器A46两者的数据。
[0075]在一个实施例中,每个主机34的I/O请求包括一个或更多个由装置标识符标示的目标存储单元(例如,物理磁盘、逻辑装置、虚拟装置等)、第一存储单元(例如,LBA地址等)、长度和用于读命令的时间标识符。写命令包括数据有效载荷,所述数据有效载荷包含正被写到目标存储单元的数据。
[0076]在另一个实施例中,时间标识符是隐含的,其含意是存储管理装置38提供逻辑装置,该逻辑装置是另一个第一逻辑装置在较早时间的视图。可通过带外通信(例如,在存储管理装置的控制台)或经由主机34和存储管理装置38之间的带内通信建立第二逻辑装置。在一个实施例中,一旦第二逻辑装置被建立,与其关联的存储单元可被来自第二逻辑装置的请求数据访问,而不是被特定时间的明确请求数据访问。
[0077]在一个实施例中,时间存储器包括控制信息和有效载荷数据,控制信息也称作“元数据”(meta data)。在该实施例的一个版本中,控制信息包括用于指示当前存储器44中的特定存储单元何时被指引重写(作为写操作的结果)的时间戳,数据发源的存储单元的当前存储器44中的位置,以及旧数据现在存储在时间存储器46中的位置。存储在时间存储器46中的有效载荷数据可包括以前出现在当前存储器44中但已被新的数据替代的数据。
[0078]图2描述一个I/O请求的实施例,具体地,描述被主机34发送到存储管理装置38的基于时间的读命令。在一个实施例中,I/O请求是SCSI命令。图2标识包括在命令块88的32个字节中的每个比特。在字节0中,操作码标识将被执行的命令类型,也就是,基于时间的读命令。字节2-9用于逻辑块地址,该逻辑块地址标识第一存储单元,并且读命令在所述第一存储单元上操作。字节10-13用于传送长度,其指示正被读取的块数目,读取始于被逻辑块地址标识的存储单元(也就是,块)。字节14和15留作将来使用。字节16是RelativeChk字段,其指示时间字段是相对的还是绝对的。如果RelativeChk字段是0,则在命令块中指定的时间是以现在时间为基准;因此,0指示所指定的时间是从当前时间起计算的过去时间。例如,在请求时间T指定的恢复时间T-5000提供一个读命令的例子,该读命令具有的恢复时间是以当前时间T为基准,也就是该恢复时间是在当前时间之前的5000个时间增量。如果RelativeChk字段是非零的,所指定的时间是被绝对地指定的,也就是,不参考另一个时间。例如,这种I/O请求可包括相对时间并且存储管理装置38可具有1秒或更小的最小时间增量。在另一个实施例中,I/O请求可包括绝对时间并且最小时间增量可以是1毫秒或更小。
[0079]字节17-24包括所指定的读时间,其是相对的或绝对的。如果读时间是绝对的,恢复时间则被包含在字节17-24中。如果读时间是相对的,恢复时间是基于从当前时间减去所指定的读时间计算的。字节25-30留作将来使用。字节31是命令块88的控制字段。
[0080]在操作中,数据被提供给主机34,以响应主机34产生的并在第一通信链路40上被传给存储管理装置38的I/O请求。为了保持过去存储在当前存储器A40中的数据的历史记录,在一个实施例中,当主机34的I/O请求指示存储管理装置38以新的数据代替现有数据时,存储管理装置38使用写时拷贝(copy-on-write)进程。一接收到主机34的写请求,就通过把将被替换的现有数据从当前存储器A44拷贝到时间存储器A46来执行写时拷贝操作。数据从当前存储器A44中被拷贝的位置被称为原始位置。旧的(也就是,被重写的)数据被存储在时间存储器A46中的位置被称为目的地位置。
[0081]在特定的实例中,实际的数据拷贝可能不会在写操作一出现时就执行,例如,因为将被重写的数据已经被保存(例如因为其和其它的附近块一起被保存)或因为该数据被保存在内存中而未被立即写入。这里,写时拷贝操作可意指实际的拷贝,而且可包括把写时拷贝的效果考虑进去的此类最优化。存储管理装置38在存储单元中的数据被重写之前记住它,并且在块被重写之后,在时间存储器中存在充分的信息,从而可从存储管理装置38内某处、物理存储器和/或别处获得已保存的数据。为了解释的简单起见,如下所描述的例子通常呈现出存储管理装置38的操作似乎写时拷贝总是在执行,条件是最优化可被用于实践中。
[0082]在一个实施例中,存储管理装置38给每个写时拷贝编索引并保留原始位置、目的地位置和时间戳的记录。在各种实施例中,时间戳包括数据被写到当前存储器A44或时间存储器A46的时间。在另一个实施例中,时间戳包括写请求被存储管理装置38接收和处理的时间。
[0083]作为一个说明性的例子,存储管理装置38给主机34提供数据存储器A。在本例中,数据存储器A是磁盘卷。在一个实施例中,数据存储器A是用当前存储器A44和时间存储器A46实现的。存储管理装置38能够存储对卷A做出的每个改变,并且此外,能够向主机34提供该卷的“先前映象”,即如该卷在过去时间存在时的样子。如上所描述的,可使用时间规约(specification)对存储管理装置38的进行存取。
[0084]通常,因为在企业应用程序中使用的数据管理系统中发现大量I/O请求,所以数据存储器A的每个先前映象将包括至少一些来自那些应用程序中时间存储器A46的数据。例如,如果在现在时间T,主机34请求数据存储器A在过去T-100中某一时间的先前映象,存储管理装置38就审阅其索引并确定数据存储器A上在时间T-100和现在时间(T)之间已被更新的存储单元。主机34在时间T-100接收来自数据存储器A的先前映象的数据,其包括来自当前存储器A44的从T-100以来未被更新的存储单元,以及那些从T-100以来已被更新的存储单元,以及来自时间存储器A46的存储单元,所述时间存储器A46代表在时间T-100的数据存储器A。
[0085]如另一个例子,在当前时间T,主机34请求来自先前时间T-30的数据存储器A的映象。在响应中,假如存储单元自请求时间T-30以来未被更新,存储管理装置38通过使用存在于当前存储器A44的数据来产生T-30的先前映象。然而,对于自请求时间T-30以来已被更新的每个记录,则来自当前存储器A44的数据与来自时间存储器A46的数据结合。例如,如果存储在当前存储器A44的块100中的数据自请求时间T-30以来被写一次(例如,在时间T-20),则由于发生在时间T-20的写时拷贝命令而从当前存储器A44被传送到时间存储器A46的旧数据,将被发现位于时间存储器A46中的特定地址。也就是说,时间存储器A46中的数据使用其位置和指示其在时间T-20被写的时间戳而被编索引。因为这是自T-30以来块编号100被写的唯一的时间点,由块100和存储在时间存储器A46中的时间T-20标识的存储单元是块100的代表数据,其在数据存储器A的映象在时间T-30被创建的时候将被提供给主机34。
[0086]参照图3,在一个简化得多的说明性例子中,存储管理装置38给出包括五个存储单元的卷A,为简单起见显示为100个字节的块,块100、块200、块300、块400和块500。在本例中,在当前时间T和过去时间之间数据存储器A发生了五次更新。过去的写入时间被显示在本例中,且为简单起见将这些时间标识为时间T-60、T-48、T-33、T-29和T-15。在该表示法中,时间T-60是时间T之前60个单位(例如,秒、毫秒、微秒)。在一个实际的实现中,单位将会是很小的时间增量,因此这些数(也就是60、48、33、29、15)将很可能大得多。
[0087]在本例中,块100在时间T-60被更新。块300在时间T-48被更新。块200是在时间T-33及又在时间T-29被更新。块400在时间T-15被更新。如上所描述的,在写到块100之前,块100的信息将被读取并为卷A存储在时间存储器46中。相同的写时拷贝操作发生在其它块。因此,时间存储器A46将包括五条记录,所述五条记录对应在写请求被指引到当前存储器A44之前从当前存储器A44拷贝的数据。
[0088]在一个实施例中,存储管理装置38使用存储单元(例如,块100、块200等)的位置以及与写时拷贝的执行时间相联系的时间戳来为存储在时间存储器A46中的每个记录建立索引。因此,通过给出用于块100-400的来自时间存储器A46的数据和用于块500的当前存储器A44中的数据,可在T-60之前的时间产生数据存储器A的先前映象,这是因为块500在先前时间T-60和现在时间T之间未被更新。同样地,如果需要在时间T-35时的数据存储器A的视图(也就是,先前映象),当前存储器A44可提供三个块,也就是,块100、块300和块500,这是因为它们在时间T-35之后都未改变。块200和块400自时间T-35以来已被修改,因此那些块可由时间存储器46提供给卷A。
[0089]因此,如在该简化的例子中所证明的,通过在卷上的数据被重写之前将其保存在时间存储器46中,以及在时间存储器46中存储的数据被重写时为该数据编索引,系统可得到在当前存储器44中完整的当前版本,并且具有在一定时间间隔的卷A上数据的映象,时间存储器46在所述时间间隔存在数据。存储管理装置38可给出“虚拟”卷,所述“虚拟”卷反映过去某一时间的原始卷。此外,存储管理装置38可提供来自基本上连续的时间间隔中任何时间的虚拟卷,“基本上”连续是因为由最小时间增量定义的量化限制。虚拟卷不需要在请求时间之前被产生。
[0090]在一个例子实现中,如果该例子卷被称为卷A,另一个卷,卷B,可基于卷A的“先前映象”而被提供,所述卷A的“先前映象”是在较早时间的卷A的内容。来自卷B的这个数据可从卷A的先前映象拷贝到新的卷上,以使卷B为在先前时间的卷A的完整拷贝。卷B还可以保持“虚拟”,其含意在于卷B可仅仅以当前存储器A44和时间存储器A46的组合的形式存在,同时存储管理装置38提供来自当前存储器44或时间存储器46的数据以响应对卷B的存取。
[0091]参照图4,例如提供卷A的当前映象、卷A在某一时间(例如,时间T-3000)的先前映象和卷A在另一时间(例如,时间T-6100)的先前映象是可能的。这是因为这些先前映象是“虚拟的”,所以存储管理装置38可同时提供虚拟先前映象48、50两者。
[0092]主机34和存储管理装置38可使用各种协议中的一个或更多个来引用数据存储器的先前映象。例如,主机34可在带外通信中请求:存储管理装置38使作为另一卷的先前映象的虚拟数据存储器可用。主机34可在带内的通信中,例如使用现有协议或该现有协议的扩展,请求存储管理装置38使新的卷可用。系统管理员还可以操作存储管理装置38的控制台或控制面板,或向存储管理装置38提供输入以指示存储管理装置38使作为另一个卷的虚拟映象的一个卷可用。在一些实现中,新的卷可被分配一个卷或装置标识符(例如,SCSI ID或光纤信道全球名)。
[0093]因此,在一个实施例中,存储管理装置接收一个创建虚拟数据存储器的请求,所述虚拟数据存储器反映在指定时间的原始数据存储器的状态。虚拟数据存储器可以是,例如,新的逻辑单元。该指定时间可从过去时间和当前时间之间的基本上连续的时间间隔中选择。该间隔的大小(和过去时间的值)是时间存储器的大小和被指引到数据存储器的变化量的函数。虚拟数据存储器,因为其是虚拟的,所以其可被基本上瞬时地提供,且具有最少或无数据移动。
[0094]存储管理装置接收到对位于虚拟数据存储器中指定地址的数据的存储协议请求,并响应该存储协议请求而发送存储在原始数据存储器中指定地址指定时间的数据。
[0095]创建新虚拟数据存储器的请求可以采取一些操纵用户界面的形式。用户界面可处于一个或更多个主系统之上,并传给存储管理装置,且/或用户界面可处于存储管理装置的控制台之上。可通过各种联网技术和协议,及/或通过存储协议(例如,通过其产生对数据的请求同一协议)来传达请求。该请求甚至可以是与对数据的请求相同的存储协议数据包的一部分。对来自过去时间的数据的请求甚至可以自动地触发虚拟数据存储器的供应。
[0096]对数据的请求可以是例如通过存储协议的标准读请求,比如SCSI读请求。该请求可指定一个地址,该地址可包括逻辑单元标识符和位置标识符。该地址可包括虚拟数据存储器的标识符。
[0097]如这里所描述的,原始数据存储器本身可以是虚拟数据存储器。在那里可有一系列的虚拟数据存储器,每个均由其它数据存储器的先前映象形成。
[0098]如所描述的,因为虚拟数据存储器是虚拟的,所以其可被基本上瞬时地提供,且具有最少数据移动或无数据移动。然而,如果存在虚拟数据存储器的持续使用,以从虚拟数据存储器拷贝数据,例如,在后台中,到另一个数据存储器,并从而产生虚拟数据存储器的完整拷贝是可能的。一旦该拷贝是完整的,该拷贝可被用于代替虚拟数据存储器。这样先前映象可被虚拟数据存储器基本上瞬时地提供,且从一个数据存储器到另一个数据存储器的耗时拷贝实质上对存储管理装置的用户来说是透明的。
[0099]在另一个实施例中,主机34可使用一个协议与存储管理装置38通信,所述协议允许主机34通过引用地址和时间对存储单元进行存取。因此,时间维度被加入存取请求。时间可以多种方式引用。例如,主机34可引用如其所保持的绝对时间或存储管理装置38所保持的绝对时间,例如特定一天的4:07.33。时间还可以被相对地引用,也就是说,其可以被指定为以另一个时间为基准的时间。在一个实施例中,时间是基于从当前时间减去多个时间单位(因此,相对于当前时间)来被引用的。该方法不需要主机34和存储管理装置38具有精确的同步时钟。可使用任何可适用的单位来引用时间并且时间可以是任何可适用的单位,其包括而不限于毫微秒、微秒、毫秒、秒等。
[0100]因此,在一个方法中,主机34(或系统管理员)可以首先指示创建新的虚拟卷,卷B,其是卷A在时间T-3000的先前映象。主机34(或系统管理员)能然后指示创建新的虚拟卷,卷C,其是卷A在时间T-6100的先前映象。因此主机可以根据需要比较卷A、B和C上的实际数据,从而确定卷上的什么文件或记录等具有不同用途(例如,辩论用途)。
[0101]在另一个方法中(可另外使用或替代使用的),主机34可使用除数据地址之外还包括时间规约的请求来对卷进行请求。存储管理装置38可通过提供在指定地址指定时间的数据而对该请求作出响应。
[0102]应当指出的是,同样在一些实现中,当前存储器A44可以是磁盘60的镜像磁盘(以虚像显示),或如一个或更多个实际卷一样被用于任何其它配置中。
[0103]时间映象还可以是固定的或者动态的。固定时间映象,也被称为克隆,与在特定时间点的数据存储器A的快照类似。它被称为固定是因为其不更新,也就是,一旦它被创建,其不会被写入数据。然而,由存储管理装置38产生的固定映象可不同于快照,因为映象第一次可在比恢复时间更后的请求时间产生,也就是,存储管理装置38重新创建一个可能自恢复时间以来的任何时间都未在以前存在过的映象。相反,快照是在当时的当前时间产生的复制品。
[0104]动态时间映象是作为在特定时间点的当前存储器A的映象而被创建的。然而,不同于固定时间映象,一旦产生,动态时间映象将不断以和当前存储器A同样的方式被更新。结果,直到恢复时间,动态时间映象的内容都与当前存储器A44相同。例如,如果第一先前映象48是动态的,它将匹配当前存储器A直到T-3000。此后,开始于现在的请求时间(T),对当前存储器A的更新被复制在第一先前映象48上。由此产生的动态时间映象起当前存储器B的作用,其包括除发生在请求时间(T)和恢复时间(T-3000)之间的那些请求以外的所有被指引到当前存储器A44的I/O请求的结果。因此,当前存储器B也具有与其相关联的时间存储器,也就是,时间存储器B。
[0105]参照图5,其显示了固定和动态时间映象。固定先前映象是数据存储器在特定时间点的视图。它是固定的,其含意在于它不被更新,例如,它是只读的。在一个实施例中,通过在一个映象被创建时将其标识为只读映象从而将该时间映象固定。固定映象可用于查看在特定时间的数据存储器,用于辩论用途(也就是,标识问题的原因),或恢复擦除的数据。动态映象作为特定时间点的第一数据存储器(例如,数据存储器A)的视图开始,但先前映象可以被修改。在主机看来,动态映象似乎是先前映象被拷贝在其上的新数据存储器。动态映象可用于从故障中快速恢复。
[0106]例如,当由第一数据存储器中数据破坏引起故障发生时,可指定固定先前映象(如上所描述的),每个固定先前映象均将第一数据存储器中的数据呈现为如其在过去的指定时间所存在的那样。这些先前映象可被检查以确定破坏的近似时间。随着最小时间戳增量被减少,可以以增加的精度确定近似时间。在一个实施例中,显示来自恰在破坏时间之前的数据的先前映象被指定是动态的,使用数据存储器中数据的软件应用程序开始使用先前映象作为代替,并且事务活动使用第一数据存储器的最近的未破坏版本重新开始。应用程序可以使用该映象,例如,通过以某个方式重构业务应用软件,或指示存储管理装置38显示动态先前映象代替第一当前数据存储器,也就是,通过使用先前映象以创建第二数据存储器(例如,数据存储器B)。在一个实施例中,动态映象从主机看来似乎是新的数据存储器(例如,具有目标标识符的新的装置)。
[0107]在一个实施例中,存储管理装置38提供动态映象而不用拷贝(或不用最初拷贝)先前映象到另一个数据存储器。相反地,存储管理装置,如上所描述的,通过使用与第一数据存储器相关联的当前存储器和时间存储器来提供第一数据存储器的先前映象,视情况而定。存储管理装置还将第二当前存储器和第二时间存储器与动态映象(也就是,第二数据存储器)联系起来,以使动态映象的变化被存储在第二当前存储器中,并且已改变的块被存储(例如,以写时拷贝的方式)在第二时间存储器中。
[0108]在这种实现的一个实施例中,当接收到对动态映象中当前数据的请求时,存储管理装置38将首先检查第二当前存储器中的数据,然后检查第一时间存储器中的数据,最后是检查第一当前存储器中的数据。一收到对动态映象的写请求,存储管理装置38就确定数据当前在动态映象(也就是第二当前存储器、原始当前存储器或原始时间存储器)中的位置,将被重写的块存储在第二时间存储器并然后将新的块写到第二当前存储器。可使用第二时间存储器、第二当前存储器、第一时间存储器和第一当前存储器来提供对来自动态映象的先前映象的数据的请求。
[0109]在另一个实施例中,动态映象被全部存储在时间存储器中。在该实施例中,数据存储器具有单个当前存储器和单个时间存储器。在该实施例的一个版本中,固定映象、动态映象、索引信息和控制块都被存储在时间存储器中。可通过将指定恢复时间的数据存储器中的数据写到时间存储器的分段来创建动态映象。在该实施例的另一个版本中,当动态映象被写时,写时拷贝操作不被执行。
[0110]因为该存储管理装置38(至少最初)可以提供动态映象作为“虚拟”装置,其含意在于动态映象中的数据是第一和第二当前数据存储器以及第一和第二时间存储器中数据的组合,动态映象可被迅速地提供,且不用将数据从一个数据存储器拷贝到另一个。一旦动态映象存在并运行,它可被用于(当存储管理装置容量允许时)将第一当前存储器及/或第一时间存储器的内容拷贝到的第二当前存储器和第二时间存储器,用于该动态映象。换言之,“虚拟”第二数据存储器可用于创建新的数据存储器,该新的数据存储器可用于独立地替换第一数据存储器。这可在后台中完成,或当存储管理装置的事务(transaction)活动相对低时完成。另外,可人工地或自动地启动后台拷贝操作。在一个实施例中,主机34或者系统管理员可以启动后台拷贝操作和数据存储器替换操作。
[0111]参照图5,作为该实施例的一个简化的说明性例子,假定动态映象由第一数据存储器创建,在本例中第一数据存储器被称为数据存储器A143。作为动态映象的基础的先前映象在特定时间的(例如,上午11:00)被指定为数据存储器A143(再次,举例来说)。使用与数据存储器A143相联系的当前存储器A144和时间存储器A146可提供数据存储器A143的先前映象。依据主机34或系统管理员的指示,即先前映象应该是动态的(从而允许修改),第二数据存储器被分配一个标识符,其在本例中是数据存储器B147,并且当前存储器B148和时间存储器B152被分配给动态映象。
[0112]存储管理装置38通过首先检查当前存储器B148来响应在当前时间对数据存储器B的读请求,并且如果所请求的块不在当前存储器B中,那么时间存储器A146和当前存储器A144可用于获得如该块在先前映象时那样的块,所述先前映象是动态映象的基础。为使用来自数据存储器A143的先前映象的数据,数据存储器A143的索引被检查以确定是否当前存储器A144或时间存储器A146包含所需的块。
[0113]存储管理装置38通过如刚才对读请求所描述的方式定位目标块的当前内容(例如,首先检验当前存储器B148,然后时间存储器A146,然后当前存储器A144),从而响应对数据存储器B的写请求(对于当前时间),读目标块,然后将所读的数据写到时间存储器152以完成写时拷贝操作。与对目标块的写要求相联系的数据被写到当前存储器B148。
[0114]可通过首先检查时间存储器B152来响应对过去时间的数据存储器B147的读请求。例如,可检查时间存储器B152的索引,以确定是否其包含该所需的块。如果不是,就检查当前存储器B148,并且如果该块不在当前存储器B中,那么时间存储器A146和当前存储器A144可用于获得如该块在先前映象时那样的块,所述先前映象是动态映象的基础。也就是说,时间存储器A146的索引被检查以确定其是否包含所需时间的所需块,如果不是,就使用当前存储器A144中的块。应该理解的是,可以颠倒时间存储器A146和当前存储器A144的索引被检查的顺序。替代性地,可使用时间存储器A146和当前存储器A144的复合索引。
[0115]应该注意的是,数据存储器A143可以持续活动的数据存储器并且存在对于数据存储器A143的持续事务,但是那些后来的变化将不会映射在数据存储器B147中,这是因为存储管理装置38将为了访问数据存储器B147而在特定的过去时间(也就是,先前映象)持续访问数据存储器A143,并且后来在当前存储器A144中发生变化的块将被保存在时间存储器A146中,因此将不会丢失。实际上,可被时间存储器捕捉的过去时间间隔的大小将取决于被指引到数据存储器A143的写操作的频率和时间存储器A146的大小。依赖特定的实现,因此在动态映象开始使用之后的某个时间,将作为动态映象基础的先前映象(例如,在上述例子中上午11:00的数据存储器A)拷贝到另一个数据存储器,或拷贝到时间存储器B152和当前存储器B148可能是有利的。如所提到的,当存储管理装置38正常运转时,该传送可在后台中完成。
[0116]在一个实施例中,对于指定的恢复时间,将先前映象块传送到当前存储器B148是通过下列步骤完成的。如果当前存储器A144中的块自恢复时间以来未被重写(也就是,如果当前存储器A144中的块与作为数据存储器B147基础的先前映象相同),以及如果该块还未包含在当前存储器B148中(也就是,如果自动态映象被创建的时间以来,在动态映象中该块还未被“重写”),那么该块就从当前存储器A144被拷贝。如果一个块表示在恢复时间出现在数据存储器A143的块中的数据,以及如果该块还没有在当前存储器B148中被发现(也就是,在动态映象中,该块未被“重写”),那么就将该块从时间存储器A146拷贝到当前存储器B148。可选地,来自先前映象之前某一时间的时间存储器A146中的块还可被从时间存储器A146拷贝到时间存储器B152,以使数据存储器B147可响应对先前映象之前某一时间的数据的请求。
[0117]动态映象(例如,第三数据存储器)可基于其它现有动态映象(例如数据存储器B)而被创建,以使第三数据存储器中的数据由其它当前存储器和时间存储器提供(例如,由数据存储器A和数据存储器B)。这样的动态映象还可被产生而不用拷贝(或不用最初拷贝)先前映象到另一个数据存储器。
[0118]例如,存储管理装置38,如上所描述的,可通过使用如上例子所描述的原始当前存储器(例如,当前存储器A)、原始时间存储器(例如,时间存储器A)、第二当前存储器(例如,当前存储器B)和第二时间存储器(例如,时间存储器B)来提供动态数据存储器(例如,数据存储器B)的先前映象。如果这个新的先前映象被指定是动态的,存储管理装置38还可将第三当前存储器和第三时间存储器与新的动态映象(例如,第三数据存储器)联系起来,以使新的动态映象的变化被存储在第三当前存储器中,并且第三数据存储器的已改变的块被存储(例如,通过写时拷贝操作)在第三时间存储器中。
[0119]使用上述例子,系统管理员,可在检测到数据存储器B147中的数据破坏时再次使用多个先前映象去识别数据破坏的近似(或甚至准确的)时间。系统管理员能因此识别数据存储器B的一个先前映象,该先前映象的时间在数据破坏之前。举例来说,我们假定该映象在下午1点。系统管理员可指定下午1点的数据存储器B的映象是动态映象,并且该新的动态映象将被称作数据存储器C。数据存储器C153被分配了一个当前存储器C154和一个时间存储器C156。
[0120]当接收到对数据存储器C153中当前数据的请求时,存储管理装置将首先检查当前存储器C154中的数据,然后检查在动态映象被创建时当前存储器B148和时间存储器B152中的数据。如果数据块不在当前存储器B148或时间存储器B152中,视情况而定,那么存储管理装置38将从时间存储器A146或当前存储器A144获得数据。
[0121]当写请求到达数据存储器C153时,存储管理装置38确定数据当前在动态映象(也就是,当前存储器C154、当前存储器B148、时间存储器B152、当前存储器A144和时间存储器A146)中的位置,在时间存储器C156中存储被重写的块,然后将新的块写到当前存储器C154。可适当结合当前存储器B148、时间存储器B152、当前存储器A144和时间存储器A146使用时间存储器C156和当前存储器C154来提供对来自动态映象的先前映象的数据的请求。
[0122]参照图6,在另一个例子中,其呈现一条时间线190,最顶端的水平线表示从最初时间T1到随后时间T5的数据存储器A,也就是,时间线192。在整个T1到T5的时间段,主机34将I/O请求指引到数据存储器。数据存储器A首先被使用,在本例中,应用程序将读写事务指引到数据存储器A。
[0123]在时间T3,系统管理员确认在数据存储器A143中已经存在破坏,该破坏很可能起因于破坏事件。系统管理员通过标识数据未被破坏的最近时间以实现对数据存储器A143的先前映象的审阅,从而确定数据破坏发生的时间。换言之,破坏事件很可能发生在已破坏数据出现的最早时间。存储管理装置38可被用来实现对数据存储器A143的任意过去版本的搜索,以便确定破坏事件的时间。破坏事件可能的所在时间的精确度至少在某种程度上由最小时间戳增量确定。
[0124]数据存储器A143中的数据的有效性在被引导的第一次搜索中被检验,以标识破坏事件的时间。出现在时间线192上T3和T4之间的第一组垂直线提供了搜索被引导的时间点(也就是,T14、T15和T16)的简化例子。它们表示从时间T4回到时间T3的搜索,在时间T4破坏发生的事实被最初识别。系统管理员,例如,在时间T4开始搜索并且在第一个搜索时间T16审阅数据。数据在时间T16被破坏,因此系统管理员审阅来自较早时间点的数据,也就是,来自时间T15和T14。数据在时间T15和T14被破坏,因此搜索继续时间T11的审阅。数据在时间T11未被破坏,因此管理员检查时间T12、时间T13和时间T3。搜索照这样的方式持续进行,直到识别出有效数据存在的最近时间,在本例中该最近时间是时间T3。
[0125]还可使用各种搜索方法来引导搜索。例如,第一次和第二次搜索之间较大的时间增量可用于努力地更快确定破坏事件的时间。并且,搜索不需要从发现破坏的时间点开始。例如,如果系统管理员知道破坏事件的近似时间,搜索就可从较早时间点开始。搜索还可从比破坏事件更早的时间开始,例如T1、T2等。例如,对于第一个搜索时间为时间T2的搜索,其将继续到随后的时间点,直到已破坏的数据被第一次发现。应该理解的是,因为存储管理装置38能够提供时间存储器A146覆盖的间隔内的数据存储器A143的任何版本到最小时间戳增量的精度,所以任何搜索策略都可被应用。在一个实现中,时间精度是一毫秒。
[0126]在本例中,时间T3被指定为恢复时间,这是因为它是所需的由于不存在破坏而被标识的时间点。当然,用户可选择更早的时间点(在T3之前)作为恢复时间。第二数据存储器,数据存储器B147是使用来自时间T3时的数据存储器A的数据而建立的。回忆在时间T4,用户将时间T3标识为数据存储器A143的有效数据存在的最近时间点。在时间T4(也就是,请求时间),用户创建数据存储器B147作为第一数据存储器在时间T3(也就是,恢复时间)的先前映象,所述第一数据存储器即数据存储器A143。在图6中,时间线194与数据存储器B147联系在一起。
[0127]数据存储器B147是动态映象;因此,第二当前存储器(当前存储器B)148和第二时间存储器(时间存储器B)152与数据存储器B147联系在一起。一旦当前存储器B148被创建,存储管理装置38可使主机34可使用数据存储器B147,并且应用程序可使用数据存储器B147代替数据存储器A143。此后,主机34的I/O请求可被指引到数据存储器B147而不是数据存储器A143。在本例中,在时间T4和T5之间,I/O请求继续被指引到数据存储器A143和数据存储器B147。在另一个实施例中,数据存储器B147是由第二当前存储器组成的动态映象,所述第二当前存储器未与第二时间存储器联系起来。在该实施例的一个版本中,当前存储器B148在写池(write pool)中实现,在此被指引到数据存储器B147的写命令引起最近重写的数据替换当前存储器B148中的现有数据,也就是,不保留当前存储器B148中的旧数据的记录。
[0128]如之前所描述的,不用拷贝数据存储器A143的内容就可创建数据存储器B147。数据存储器B147因此可被立即虚拟地创建,并且它可被快速联机。起初与数据存储器B147相联系的数据存在于当前存储器A144和时间存储器A146中。
[0129]在接收到对当前时间的数据存储器B147的读请求时,存储管理装置38就确定当前存储器A144和时间存储器A146中哪个包含正被读的块的数据。当前存储器A144中的数据将用于自时间T3以来未被写的所有数据,并且时间存储器A146中的数据将用于在时间T3之后被重写的当前存储器A144中的所有块。一旦一些数据已被写到当前存储器B148,对被指引到在当前时间的数据存储器B147的读命令的响应可能来自当前存储器B147、当前存储器A144或时间存储器A146。一接收到读请求,存储管理装置38就确定当前存储器B148、当前存储器A144和时间存储器A146中哪个包含正被读的块的数据。存储管理装置38将为了对数据存储器B147中在时间T4之后(即,时间线片段(e)、(f)和(g))被写的块的所有请求而使用当前存储器B148中的数据。当前存储器A144中的数据将被用于自时间T3以来(时间线片段(a)和(b))未被写的所有数据块,并且时间存储器A146中的数据将被用于数据存储器A143上在T3和T4之间(时间线片段(c))已被写的所有数据块。
[0130]在时间T4之后数据存储器A143可继续处于动态中,然而,在时间T4之后发生在数据存储器A143的改变将仅仅会影响用于对数据存储器B147中块的请求进行响应的数据位置。这样的变化不会影响数据存储器B147的实际内容。如果,例如,数据存储器A143的相应块100自时间T3以来未被重写,那么用于数据存储器B147的块100的数据源就是当前存储器A144中的相应块。然而,如果在当前存储器A144中相应块100自时间T3以来已被重写,例如,一写时拷贝命令在数据存储器A143中的相应块上执行,那么用于数据存储器B147的块100的数据源就是时间存储器A146的相应块。当然,紧接着的前述描述假定块100自数据存储器B147创建以来还未做过写命令的目标。另外,在数据存储器A143是动态的情况下,在时间T4以后被写到数据存储器A143的数据使用写时拷贝操作被处理,以使在时间T4之后时间存储器A146继续被使用以保存新近重写的数据。
[0131]当写请求被指引到数据存储器B147时,存储管理装置38确定数据当前在数据存储器B147中的所在之处(也就是,当前存储器B148、当前存储器A144或时间存储器A146)。数据的位置将会如下:
[0132]1)如果当前存储器B148中的块自时间T4以来已被重写,数据就在当前存储器B148中;
[0133]2)如果当前存储器A144中的块自时间T3以来没有被写入的数据,数据就在当前存储器A144中;以及
[0134]3)如果当前存储器A144中的块在时间T3之后的任何时间被重写,数据就在时间存储器A146中。
[0135]然后其遵循:
[0136]1)如果数据位于当前存储器B148中,那么现有数据将从当前存储器B148读出并被写到时间存储器B152(例如,写时拷贝)。新的数据将被写到当前存储器B148。在一个实施例中,不用使用写时拷贝操作或时间存储器B152,就可完成对当前存储器B148的更新。在该实施例的一个版本中,当写命令被指引到当前存储器B148时,旧数据不会被保存。
[0137]2)如果数据位于当前存储器A144中,那么来自当前存储器A144的现有数据将被拷贝并写到时间存储器B152而不用重写当前存储器A144中的现有数据。新的数据将被写到当前存储器B148。
[0138]3)如果数据位于时间存储器A146中,那么来自时间存储器A146的现有数据将被拷贝并写到时间存储器B152而不用重写时间存储器A146中的现有数据。新的数据将被写到当前存储器B148。
[0139]在接收到对当前时间的数据存储器B147的读请求时,存储管理装置38就通过检查当前存储器B148、当前存储器A144和时间存储器A146中的数据来确定数据当前在动态映象中的位置。存储管理装置38将为在时间T4之后(也就是,时间线片段(e)、(f)和(g))被写的数据存储器B147的所有块而使用当前存储器B148中的数据。当前存储器A144中的数据将被用于自时间T3以来(也就是,时间线片段(a)和(b))未被写的所有数据块,并且时间存储器A146中的数据将被用于数据存储器A143上在T3和T4之间(时间线片段(c))已被写(在数据存储器A143中)的所有数据块。
[0140]任何数目的附加数据存储器也可基于数据存储器A143的当前或先前映象而产生。例如,数据存储器A143在时间T2的映象可在从时间T2起的任何时间被创建,例如,数据存储器D可在时间T3被创建。附加数据存储器的创建的执行可顺序于、并行于或独立于基于数据存储器A143的其他数据存储器的创建。在所有情况下,附加数据存储器的内容似乎独立于其他数据存储器的内容,也就是,在数据存储器创建时其内容取决于数据存储器A143的内容。此后,使用来自当前存储器A144、时间存储器A146及/或命令被指引到的附加数据存储器的数据来响应被指引到附加数据存储器的读写命令。
[0141]在一个实施例中,存储管理装置38实现了瞬间复原,其允许用户(例如,主机或系统管理员)基本上瞬间产生数据存储器的先前映象。例如,如在此更详细描述的,存储管理装置38的体系结构提供被指引到每个数据存储器的写命令的详细索引,以使在任何时间数据存储器每个块的适当数据可被快速标识和存取。
[0142]可用超过一种的方式执行瞬间复原。例如,发生在时间T4的瞬间复原可以是对于时间T3的所需恢复时间的数据存储器A143的无损复原。在一个实施例中,无损复原是通过将在时间T3和T4之间执行的写操作的结果拷贝回当前存储器A144中来实现的。在该实施例的一个版本中,写时拷贝操作在从时间T3到时间T4被写的数据存储器A143的每一块上被执行。在恢复时间,用于那个块的当前在时间T3时的数据被写到数据存储器A143的每一相应块。当前存储器中被重写的数据被拷贝到时间存储器A146。如在此所描述的,有关使用写时拷贝操作所写的数据的相关细节由存储管理装置38编索引。因此,稍后恢复及审阅在时间T3和T4之间执行于数据存储器A143上的操作是有可能的。
[0143]因为无损的瞬间复原操作增加了必须存储在时间存储器中的数据量,因此存储管理装置38还可以实现压缩恢复。在压缩恢复中,若干被选数据不会在恢复之后被保留。在该实施例的一个版本中,写操作,而不是写时拷贝操作,在T3和T4之间被更新的数据存储器A143的块上被执行。因此,在恢复时间,时间T3时的当前数据被写到在T3和T4之间被更新的数据存储器A143的每一相应块。在该实施例的另一个版本中,写时拷贝操作被执行,但是即使时间存储器达到其存储容量,为T3和T4之间时期保留的数据也被放置在将被重写的数据队列的前面。例如,来自T3和T4期间的数据可与时间线的最早部分联系起来,以使当达到数据存储器的指定存储容量时,它将第一个被替换。
[0144]图6还描述第三数据存储器(也就是,数据存储器C)的创建,所述第三数据存储器根据数据存储器B147的内容而产生,也就是,数据存储器C153根据以前所创建的动态映象而产生。这里请求时间是T5且恢复时间是T7。再次,恢复时间可以是破坏发生之前的时间。根据数据存储器B147创建数据存储器C153的操作被称为“堆栈”,这是因为其创建了一系列虚拟数据存储器,在此每个数据存储器都基于另一个数据存储器(或多个数据存储器)的先前映象。
[0145]在本例中,数据存储器C153是基于数据存储器B147的先前映象,而数据存储器B147是基于数据存储器A143的先前映象。因此,数据存储器C153起初可由存储在当前存储器B148、时间存储器B152、当前存储器A144和时间存储器A146的任何一个中的数据提供。存储管理装置38可基于下列资源将数据存储器C153的映象呈现给主机34:1)当前存储器B148将被用于来自在时间T4和T7之间被重写而自时间T7以来(时间线片段(e)和(f))未被重写的块的数据;2)时间存储器B152将被用于来自自时间T7以来(时间线片段(g))已被重写的块的数据;3)当前存储器A144将被用于来自自时间T3以来(时间线片段(a)和(b))未被重写的块的数据;以及4)时间存储器A146将被用于来自在时间T3和T4之间(时间线片段(c))被重写的块的数据。
[0146]当前存储器C154和时间存储器C156将如上所描述那样被分配。存储管理装置38以类似于为数据存储器B147描述的处理的方式来处理被指引到数据存储器C153的读写请求。然而,一个差别是,为了定位数据存储器C153的内容,必须被搜索的数据存储器的数量增加到包括当前存储器A144、时间存储器A146、当前存储器B148和时间存储器B152。根据先前的数据存储器映象来创建动态映象的过程可按系统存储容量内的应用程序要求被延长。例如,可根据数据存储器C153的先前映象来创建动态映象,从而创建第四数据存储器,例如,数据存储器D。另外,可采用前述方法根据任何一个数据存储器的先前映象创建静态映象,例如,创建在时间T3的数据存储器A143的克隆等。
[0147]图7A和7B提供了给定数据存储器的当前存储器和时间存储器的操作的另一个说明性例子。图7A显示了当前存储器的内容,并且图7B显示了与图7A的当前存储器相联系的时间存储器的内容。在每个图的顶端都绘制了一条时间线以指示初始时间t0、第一次写入时间t1、第二次写入时间t2、第三次写入时间t3和最后时间t4。出现在图7A和7B左侧的数字0-5标识了数据存储器的六个块。如所提到的,数据存储器可由任何数目的块或其它存储单元组成。另外,数据存储器可以实现为存储数字数据的任何类型资源,所述资源包括虚拟磁盘、逻辑磁盘、物理磁盘等。
[0148]存储在每个时间点的数据被装入实心框中。当前存储器的块0-6中每个都在时间存储器中具有相应的块。当写请求被指引到一个块时,被写的数据被装入虚线框,所述虚线框邻近图A中当前存储器的相应块。这表示在写时拷贝命令完成时暂停传送到当前存储器的数据。
[0149]在操作中,在例如时间t0,数据a、b、c和d分别存在于当前存储器的块0-3的每个中。在该时间,块4和5不包含任何数据。另外,时间存储器不包含任何数据,这是因为对块0-5的写请求还没有被指引到当前存储器。在时间t1,数据X、Y和Z分别被写到块2-4。写时拷贝操作在块2-4的每个上被执行,并且出现在那些块中的旧数据从当前存储器被读出并被写到时间存储器,也就是,数据c、d和一空块被分别写到时间存储器的块2-4。如在时间t2的当前存储器中所示,在时间t1的写操作完成之后,新近被写的数据出现在块2-4中。然而,第二次写操作在时间t2被执行,此时,数据7、9和8被分别写到块0、3和5。再次执行写时拷贝,结果旧数据a、Y和一空块被分别写到块0、3和5。在时间t3,执行第三次写操作并将数据Q写到块5。在时间t2先前已被写到块5的原始数据8被读出并写到相应时间存储器的块5。新的数据Q在时间t3被写到块5,从而在时间t4数据Q出现在当前存储器的块5中。假如在时间t4不执行写操作,时间存储器在时间t4将保持为空。
[0150]图8的时间存储器是基于对如图7A和7B所示的数据存储器执行的写时拷贝操作的顺序。图8示范了在请求时间t4如何产生当前存储器的先前映象,以用于恢复表示在恢复时间t1的数据存储器的映象。因为在时间t0或时间t1没有写操作于块0、1和5上被执行,所以先前映象的块0、1和5由来自在时间t1的当前存储器的数据组成。因为数据在时间t1被写到块2、3和4,所以来自时间存储器的数据被用作在时间t1的块2、3和4的先前映象。因此,时间t1的数据存储器的先前映象并不反映发生在时间t1后的当前存储器的变化的结果。
[0151]现在参照图9,在一个实施例中,存储管理装置238包括一个或更多个处理器模块278、278′、278″,通称278。虽然在图中出于说明目的显示了3个处理器模块278,但可有任何数目的处理器模块278。
[0152]每个处理器模块278包括中央处理器290,所述中央处理器290与目标接口292、ROM294、内存296和启动器接口298中的每个都通信。CPU290可在一个或更多个集成电路中实现,并且其可包括用于与其它集成电路连接的其它“胶合(glue)”逻辑(未显示),例如,总线接口、时钟和通信接口。CPU290实施提供于ROM294中的软件以及内存296中的软件,所述软件可被访问,例如,通过内部网络接口284或在物理存储器36中。
[0153]CPU290还与内部网络接口284通信,所述内部网络接口284将处理器模块278连接到内部网络286,所述网络允许处理器模块278相互通信。内部网络286可被实施为一个或更多个实际网络,并且其可以是任何类型的具有充分容量的网络,从而允许控制信息和数据两者的传递。内部网络286可包括共享的串行或并行总线,或某种组合。内部网络可以是或包括任何类型的实施远程直接内存模型化接口(例如,InfiniBand、以太网、光纤信道、SCSI等)的物理网络。在一个实施例中,接口是随机访问供应库(Direct Access Provider Library,DAPL)。
[0154]在一个实施例中,处理器模块278插入一底板,所述底板实现用于内部网络286的连接。在一个实现中,一组或更多组处理器模块278被架装(rack mount)在存储管理装置238内,并且内部网络286还在存储管理装置238内将每个机架(rack)连接到其他机架。在存储管理装置238中实现的分布式处理创建了一个系统,所述系统的大小(例如,储存容量、处理速度等)可很容易地被按比例增大或减少以适合所需的容量。
[0155]目标接口292提供了一个接口,该接口使得处理器模块278本身作为一个或更多个目标数据存储器装置出现。例如,如果目标接口292是光纤信道接口,那么目标接口292就允许处理器模块278将一个或更多个光纤信道装置呈给主机(未显示)。目标接口292可实施任何适当的联网通信或数据存储协议。可用一个或更多个集成电路实现目标接口292,所述集成电路优选可对用于存储接收到的数据和将被发送的数据的内存296的部分进行直接存储访问。典型地,目标接口292将需要CPU290执行的初始化和程序设计。
[0156]启动器接口298提供一个接口,该接口允许处理器模块278本身作为一个或更多个主机出现,用于与物理数据存储通信。例如,如果启动器接口298是光纤信道接口,那么启动器接口298就允许处理器模块278与一个或更多个物理存储装置通过光纤信道接口通信。启动器接口298可实施任何适当的联网通信或数据存储协议。可使用一个或更多个集成电路实现启动器接口298,所述集成电路优选可对用于存储接收到的数据和将被发送的数据的内存296的部分进行直接存储访问。
[0157]处理器模块278可在容错配置中实现,其中两个处理器模块278每个都负责响应被指引到相同存储单元的I/O请求。在该实施例的一个版本中,可通过多对处理器模块278分担对包含单个物理或逻辑装置(或卷)的存储单元的I/O请求,来进一步提高容错性。例如,第一和第二处理器模块278可被分配负责当前存储器A的块100和200,而第三和第四处理器模块278可被分配负责当前存储器A的块300-500。可通过定位在分离机架中执行相同任务的处理器模块278,从而进一步提高容错性。
[0158]现在参照图10,在系统元件的功能描述中,再次,三个处理器模块378、378′、378″,通称378,被显示于存储管理装置338中。模块378的数目(再次)仅仅是例证性的,并且考虑到可伸缩性、性能和成本,可增加或减少处理器模块378的数量。可使用硬件及/或软件来实现显示在每个处理器模块378上的功能元件;通常,硬件和软件两者都用来实现这些元件中的每一个。
[0159]在一个实施例中,存储管理装置338的每个处理器模块378包括至少一个主机接口361,所述主机接口361用于与主机、I/O管理器362、存储缓冲区363和物理存储器接口364通信。在另一个实施例中,每个处理器模块378包括或多或少这些功能元件。在各种实施例中,存储管理装置338还包括内部网络380(例如,内部InfiniBand网络、内部以太网、内部光纤信道网络和/或内部SCSI网络),所述内部网络380用于启动单个处理器模块378的功能元件(例如,主机接口361、I/O管理器362、存储缓冲区363和物理存储器接口364)之间的通信,用于启动第一处理器模块378的任何功能元件和第二处理器模块378的任何功能元件之间的通信,用于启动同一个功能元件的一个或更多个组件之间的通信(例如,用于启动目标模式驱动器382和主机接口361的数据分类器384之间的通信),以及用于启动一个功能元件的组件和另一个功能元件(或该其它功能元件的组件)之间的通信,不管在相同的还是不同的处理器模块378上。
[0160]在一个实施例中,主机接口361包括目标模式驱动器382,所述目标模式驱动器382包括目标接口292(参见图9)和用于与目标接口292通信的软件。功能上,目标模式驱动器382通过如上所描述的任何类型的通信链路40(例如,光纤信道网络)与主机34通信。因此,目标模式驱动器382接收并响应来自主机34的进入的(incoming)I/O请求。
[0161]在一个实施例中,目标模式驱动器382接收I/O请求,所述I/O请求包括控制信息,比如,例如还包括数据有效载荷的写操作、读操作或如下所描述的对数据存储器内位置的修改历史的请求。例如响应一读操作,目标模式驱动器382可从I/O管理器362获得所请求的数据,此后可将所请求的数据传到主机34。响应一写操作,目标模式驱动器382起初将接收到的写操作存储在第一存储缓冲区363中,所述第一存储缓冲区363位于与目标模式驱动器382相同的处理器模块378上。在一个实施例中,目标模式驱动器382然后将写操作分成它的关联控制信息和数据有效载荷,以使控制信息和分离的数据有效载荷两者起初都被存储在第一个存储缓冲区363中。在一个实施例中,通过主机接口361,I/O请求被分成数据有效载荷和控制分组。然后控制信息可经由内部网络380被发送到存储管理装置338内的其它组件。例如,在一个实施例中,目标模式驱动器382将控制信息发送到数据分类器384。对它来说,数据有效载荷或它的拷贝,也可经由内部网络380被发送到存储管理装置338内的其它组件。最终,数据有效载荷将通过内部网络380被传到适当的物理存储器接口364,如I/O管理器362所指引的那样。优选地,数据有效载荷是通过硬件直接存储访问而被传递的,而不需要软件处理。
[0162]在一个实施例中,在将控制信息发送到数据分类器384之前以及在确认所接收到的对主机34的I/O请求之前,目标模式驱动器382对控制信息加上时间戳。换言之,目标模式驱动器382将控制信息与一时间联系起来,在该时间控制信息在主机接口361被接收。例如,在数据分组中目标模式驱动器382将控制信息发送到数据分类器384的情况下,目标模式驱动器382可使用数据分组内的字段来指示控制信息在主机接口361被接收的时间。任何其它对控制信息加时间戳的方法也可被使用。
[0163]在一个实施例中,在目标模式驱动器382将写操作的数据有效载荷从写操作的控制信息分离出来之后,并且除了目标模式驱动器将控制信息传输到数据分类器384之外,目标模式驱动器382复制分离的数据有效载荷以创建至少一个数据有效载荷拷贝。在一个实施例中,目标模式驱动器382然后评估第一成本等式(cost equation),如下所描述的,并基于所评估的第一成本等式的结果,最佳地标识能够至少暂时存储第一数据有效载荷拷贝的第二存储缓冲区363。在一个实施例中,第一存储缓冲区363和第二存储缓冲区363是例如不同的处理器模块378中的不同存储缓冲区363。可选地,目标模式驱动器382然后还可评估第二及/或进一步的成本等式(一个或更多个),如下所描述的,并基于所评估的第二及/或进一步的成本等式(一个或更多个)的结果,可最佳地标识能够存储第二及/或进一步的数据有效载荷拷贝的第三及/或进一步的存储缓冲区(一个或更多个)363。第一、第二、第三以及任何进一步的存储缓冲区363可能各是不同的存储缓冲区363。目标模式驱动器382然后可将第一数据有效载荷拷贝发送到第二存储缓冲区363,并且可选地,可将第二及/或进一步的数据有效载荷拷贝发送到第三及/或进一步的存储缓冲区363。因此,存储管理装置338可供给数据的冗余存储,无论其是临时的或永久的。
[0164]在一个实施例中,主机接口361还包括数据分类器384。数据分类器384与主机接口361的目标模式驱动器382联系,并还与多个I/O管理器362联系。数据分类器384从目标模式驱动器382接收I/O请求的控制信息,标识适当的处理器模块378来响应,并将该控制信息转发到适当处理器模块378的I/O管理器362。
[0165]在一个实施例中,数据分类器384将目标模式驱动器382在主机接口361接收到的I/O请求分类为特定类型的I/O请求(例如,写操作、读操作或对修改历史的请求)。在一个实施例中,数据分类器384分析接收到的I/O请求的控制信息以对I/O请求进行分类。数据分类器384还通过比较进入的I/O请求和所产生的预订(subscription)请求,例如,如下所描述的I/O管理器362产生的预订请求,从而对控制信息进行分类。在一个实施例中,数据分类器384为每个I/O请求确定处理群、存储装置标识符(例如,逻辑单元),存储单元标识符和长度。该信息与控制信息、时间戳和I/O请求类型一起被传到适当的I/O管理器362。为了允许处理大量的I/O请求,当来自数据分类器384的这些信息分组被发送到各自的I/O管理器362时,存储缓冲区363暂时地将它们存储起来。
[0166]更详细地,存储管理装置338的多个I/O管理器362都负责管理数据存储器。在一个实施例中,多个I/O管理器362中的每个均通过预订协议(例如,如下所描述的)预订数据存储器内至少一组位置,其中它将处理从数据分类器384接收到的控制信息,用于所述位置。因此,当在主机接口361接收到的I/O请求的控制信息包括将于数据存储器内第一位置上执行的操作时,数据分类器384可基于多个I/O管理器362的预订,标识能够处理控制信息的多个I/O管理器362的第一个。此外,在一个实施例中,如果多个I/O管理器362的第一个失效,数据分类器384还可再次基于多个I/O管理器362的预订,标识能够处理控制信息的多个I/O管理器362的第二个。
[0167]在一个实施例中,在数据分类器384从目标模式驱动器382接收到控制信息之后,数据分类器384复制控制信息以创建控制信息的拷贝。在一个这样的实施例中,数据分类器384将控制信息发送到如上所述那样被标识的多个I/O管理器362的第一个,并指示第一个I/O管理器362处理控制信息。数据分类器384还可将控制信息的拷贝发送到如上所述那样被标识的多个I/O管理器362的第二个,并可指示第二个I/O管理器362暂时地存储控制信息的拷贝,而不是处理控制信息的拷贝。例如,控制信息的拷贝可被存储在处理器模块378的存储缓冲区363中,多个I/O管理器362的第二个位于所述处理器模块378的存储缓冲区363。因此,在一个实施例中,存储管理装置338保存控制信息的冗余拷贝,以使在第一个I/O管理器362失效的情况下,所述控制信息可被第二个I/O管理器362处理。
[0168]在一个实施例中,第一I/O请求的控制信息指引I/O管理器362在数据存储器内的第一位置上操作。在这样一个实施例中,其它I/O请求的控制信息也可指引I/O管理器362在数据存储器内的第二位置上操作,所述数据存储器内的第二位置至少与所述数据存储器内的第一位置部分重叠。在这种情况下,I/O管理器362首先处理具有最早的时间戳的控制信息。因此,在一个方法中,通过给I/O请求的控制信息加上时间戳,目标模式驱动器382可有效地确保,当那些其它I/O请求被指引到至少与数据存储器内的第一位置部分重叠的数据存储器内的位置时,在其处理其它具有较迟的时间戳的I/O请求的控制信息之前,I/O管理器362处理了对数据存储器内的第一位置的任何一个特定I/O请求的控制信息。
[0169]一旦I/O管理器362接收到控制信息并被数据分类器384指示处理控制信息,I/O管理器362对I/O请求进行排序和管理,并将适当的指令转发到物理存储器接口364。在一个实施例中,I/O管理器362处理控制信息,并监控存储管理装置338内的信息流及为它建立索引。例如,I/O管理器362监控往返于其它处理模块、主机接口361和物理存储器364的信息流并为它建立索引。I/O管理器362还管理I/O,并确保已修改的存储单元被保存而且对创建先前映象中的将来引用来说是可存取的。另外,I/O管理器362跟踪响应来自主机34的I/O请求时的存储管理装置338的性能(例如,响应时间)。
[0170]I/O管理器362还可执行各种优化例程,从而向主机提供对I/O请求的高效响应时间。例如,因为该存储管理装置可被用于非常大容量的存储系统30中,包括具有千兆字节(terabyte)存储容量的存储系统,写时拷贝命令的优化是可所希望的。写时拷贝命令在将新的数据写到目标存储地址之前可要求至少两个连续的操作:(a)从目标存储地址读出现有数据和(b)将现有数据写到新的存储地址。在一个实施例中,存储管理装置实现单独的或组合的某些优化。这些优化通常属于五个种类的其中之一:(i)聚合;(ii)跨越(spanning);(iii)冗余写(redundant write);(iv)重排序;以及(v)实况存储(live storage)。这些优化中的每一个均把更高效的处理考虑进去,尤其是写时拷贝操作的处理。
[0171]1.聚合。第一种优化是聚合。存储管理装置338可聚合用于连续的存储单元(例如,相邻块中的存储单元)的分离的写时拷贝命令,并在单个写时拷贝命令中执行操作。这可以是有用的,因为当相邻块作为整体被操作时,与每个块的多次物理磁盘读写相联系的额外开销被消除。
[0172]2.跨越。通过将被指引到非连续的但相互非常接近的存储单元的分离的写时拷贝命令组合成单个写时拷贝命令,可进一步扩展聚合优化,除所有目标存储单元以外,所述单个写时拷贝命令还跨越位于跨越范围中的所有存储单元。例如,在五个存储单元100、200、300、400和500相互如所示次序排列的地方,被指引到块100、300和500的写时拷贝命令可代之以被指引到包括块100-500在内的单个写时拷贝命令。虽然会读并操作额外数据,但包含额外数据的跨越块仍可比3个分离的磁盘操作明显更快。
[0173]3.冗余写。可通过标识可能是主机写请求目标的第一存储单元来实现冗余写优化。写到第一块的数据也可被写到第二块。索引可跟踪每个存储单元的地址。然后,对该块的下一个写命令可引起两个块之一被重写,而不是执行写时拷贝。未改变的块能因此充当该块的历史拷贝。
[0174]4.重排序。使用重排序优化,进入的I/O请求可被重排序,以便最大化其它优化协议(比如聚合协议、跨越协议、冗余写协议等)中一个或更多个的好处。
[0175]5.实况存储。在有些情况下,通过将数据存储在内存中而不是物理存储器中可获得高效率。例如,如果某些块具有大量I/O请求(例如,它们被经常更新),那么通过将数据保持在内存中可保存许多读/写操作。在一个实施例中,内存是位于处理器模块378中的内存296(图9)。
[0176]存储缓冲区363可至少暂时地存储,存储管理装置338内正被处理的数据有效载荷、数据有效载荷拷贝、控制信息和控制信息的拷贝。在一个实施例中,多个存储缓冲区363与一个或更多个目标模式驱动器382通信。在这样一个实施例中,由目标模式驱动器382接收的数据,和由目标模式驱动器382制造的该数据的所有拷贝,被存储在一个或更多个存储缓冲区363中,直到其通过物理存储器接口364被传到物理存储器36或经由内部网络380被传到另一个处理器模块378。存储缓冲区363包括内存296(参见图9),所述内存296被按这样的方法分配,即允许各种装置传递数据而不用对数据进行软件处理。
[0177]物理存储器接口364通过如上所描述的任何类型的通信链路42(例如,光纤信道网络)与物理存储器36通信,并经由内部网络380与多个I/O管理器362、一个或更多个主机接口361和多个存储缓冲区363通信。例如,响应读请求,物理存储器接口364检索存储在物理存储器36上的数据,所述数据最终被提供给主机接口361以用于到主机34的通信。对于写请求,物理存储器接口364将数据有效载荷转发到物理存储器36的目标存储单元。
[0178]在I/O管理器362已处理起初由目标模式驱动器382在主机接口361接收的I/O请求的控制信息之后,该I/O管理器362可指示物理存储器接口364与一个或更多个物理存储器36通信。在一个实施例中,I/O管理器362指示物理存储器364从物理存储器36读数据。例如,I/O管理器362可能已处理了写操作的控制信息,且物理存储器接口364因此被指示读取来自物理存储器36的数据以便执行写时拷贝操作。替代性地,I/O管理器362可能已处理了读操作的控制信息,且物理存储器接口364因此被指示读取来自物理存储器36内特定位置的数据。在I/O管理器362被指示从物理存储器36读取数据时,物理存储器接口364就读取这样的数据。
[0179]在另一个实施例中,I/O管理器362处理包括数据有效载荷的写操作的控制信息,但是之前已被目标模式驱动器382从控制信息中分离的数据有效载荷,如上所描述的,将已被存储在第一存储缓冲区363中。在这样一个实施例中,除指示物理存储器接口364与物理存储器36通信之外,I/O管理器362还指示物理存储器接口364与第一存储缓冲区363通信。因此,如I/O管理器362所指示的,物理存储器接口364从第一存储缓冲区363检索数据有效载荷并将该数据有效载荷写到物理存储器36内的一位置。
[0180]一旦数据有效载荷安全地存储到物理存储器36内的一位置,I/O管理器362可删除、标记删除或标记置换之前(冗余地)存储在第二及/或另外的存储缓冲区(一个或多个)363中的一个或更多个数据有效载荷。类似地,一旦控制信息已经被I/O管理器362处理,I/O管理器362可删除、标记删除或标记置换之前存储在处理器模块378的存储缓冲区363中的控制信息的拷贝,第二I/O管理器362位于所述处理器模块378上。
[0181]现在参照图11,每个处理器模块378(图10)均负责对数据存储器的特定部分提出的I/O请求。每个I/O管理器362均负责管理和履行对数据存储器的部分(其处理模块被分配给它)的I/O请求。在一个实施例中,每个I/O管理器362均被分配数据存储器的一组块,例如,数据存储器A的块100-500。每个处理器模块378可采用多个I/O管理器362。将I/O管理器362分配给其所负责的数据存储器的部分是通过预订协议发生的。在一个实施例中,通过使多个I/O管理器362中的每一个向数据分类器384中的每一个、将执行数据操作(例如,读操作或写操作)的数据存储器的一个或更多个部分登记,可实现预定协议。
[0182]每个I/O管理器362可负责多个当前存储器和多个时间存储器,所述多个当前存储器和多个时间存储器由当前存储器控制器472和功能存储模块474管理。在一个实施例中,存储管理装置338维持一数据库,所述数据库将每个I/O管理器362与被分配给各自I/O管理器362的邻接块组联系在一起。与I/O管理器362相联系的数据分类器384采用该数据库以确保每个I/O管理器仅仅执行与分配给它的块相联系的任务。在一个实施例中,该方法允许存储管理装置338中的I/O管理器362总数的一个子集去服务单个时间存储器,而其它I/O管理器362子集可服务附加的时间存储器。该方法还是可伸缩的,因为增加I/O管理器362的数量将增加存储管理装置338可高效服务的时间存储器的数量。并且,该方法可与包含多个时间存储器和多个当前存储器的单个物理存储器36一起使用。因为该方法唯一地标识每个数据存储器,所以仅仅要求极少数附加信息以将每个I/O管理器362与特定的存储单元(一个或多个)联系在一起。在一个实施例中,数据存储器块编号、时间存储器块编号和时间戳是所需的唯一附加信息。
[0183]在一个实施例中,I/O管理器362维持一系列控制信息表格,所述表格每个均与一特定的时间窗口对应。例如,由I/O管理器362在9:00和9:05之间处理的所有I/O都可被存储在单个表格中,而发生在9:05和9:10之间的I/O被存储在另一个表格中。在该实施例的一个版本中,表格具有固定大小。固定的表格大小使得对表格的每个查询的处理时间可被很容易地确定,这是因为所有表格都是满的,除了当前正被使用的表格。因此,除了当前的表格,对所有表格来说处理时间都是相同的。虽然表格大小是固定的,但是由于写命令的可变频率和与每个命令相联系的目标存储单元的可变大小,每个表格所覆盖的时间段是可变的。例如,如果平均起来,关联的I/O管理器362每3000个时间单位处理200,000个写命令,则限于600,000项的表格将填充9,000个时间单位。然而,如果关联的I/O管理器362每1000个时间单位接收200,000个写命令,相同大小的表格将填充3000个时间单位。在该实施例的一个版本中,表格包括数据存储器块编号、时间存储器块编号和指示关联的写时拷贝操作何时被执行的时间戳。
[0184]当表格被填满时,I/O管理器362会做三件事:
[0185]1)I/O管理器362创建用于新的进入的写操作的新表格。
[0186]2)I/O管理器362在分离表格(例如,主表格)中创建表项,所述分离表格描述这些控制信息表格并为其建立索引。主表格包含表名和该表格所覆盖的时间范围,也就是,从表格的创建时间到最后的表项被记录在表格中的时间。在一个实施例中,主表格对与其关联的I/O管理器362来说是本地的。
[0187]3)I/O管理器362在给定表格中创建一表示全部I/O的位图。该位图具有一个用于给定块范围的比特。该位图可被调节以调整由每个比特所代表的块范围;因此,在一个实施例中,比特0表示块0-15,比特2表示块16-32等。每个比特所表示的数据量被称为区域大小。
[0188]区域大小也是可调的。因此,区域大小越靠近平均I/O请求大小或者最小I/O请求大小,比特上假阳性(false positive)出现的概率就减少。在一个实施例中,最小I/O请求大小是1个扇区或512字节。操作中,如果区域大小是128千字节,如果用户写数据到块2-10,则第一个比特将会被置位。然而,如果位图较晚才被用于确定块85是否在底层的数据中被引用,则位图将提供一假阳性指示。
[0189]随着区域大小减小,假阳性的数量减少并且实际上减到零。然而,当区域大小减小时,需要更多的内存和磁盘空间去存储位图。相反地,随着区域大小增大,发生的假阳性的数量增多,而位图的内存需要量减少。在一个实施例中,每个I/O管理器选取一区域大小,该区域大小动态地平衡假阳性的比率和位图大小。
[0190]在一个实施例中,当一表格达到容量并移到新的表格时,I/O管理器关闭或“密封”该表格所需操作的影响被最小化,这是因为表格传送是相对于连续的I/O流被异步地执行的。
[0191]当特定的恢复时间被要求用于产生基于时间的数据存储器(例如,数据存储器B)时,I/O管理器362必须执行三个通用级别的操作。
[0192]1)I/O管理器362首先标识所包含的表格。如果用户请求一恢复时间T-500,I/O管理器362就扫描主表格,查找包括发生在T-500和请求时间之间的I/O操作的控制信息表格。I/O管理器然后检索用于每个包括限定的(qualifying)I/O操作的控制信息表格的位图。
[0193]2)I/O管理器362然后通过将所有被检索的位图“或”在一起来创建主位图并保存各个位图和主位图。一旦或操作完成,主位图就可用于评估潜在读请求的真实百分比,从而确定所请求的块是否包含于先前的写操作中(也就是,在T-500和请求时间之间)。如果一个块未包含在那时的写操作中,来自当前存储器的数据就将被用于该块。对来自当前存储器的数据的检索和呈现基本上是实时操作。如果区域比特在主位图中被置位,I/O管理器362就开始从最旧的到最新的扫描各个位图,从而确定用于该区域的哪个比特被置位,并然后扫描位图的底层表格,查找时间存储器中I/O操作的位置。这些操作与从当前存储器检索数据相比是较慢的,但是它们贯穿系统持续进行。
[0194]3)I/O管理器362开始创建区域映射,凭此在每一个体控制信息表格中描述的块的拷贝被存储在内存中。当该操作完成时,必须到时间存储器去以获得数据的读请求的时延被减少,这是因为该请求被重定向到内存并很少(如果有过的话)需要任何额外的表格扫描。
[0195]通过前述方法可减少存储管理装置38的响应时间,这是因为当第一步完成时I/O管理器362开始服务请求。在大多数应用程序中,当前存储器将提供产生时间存储器所需的大部分数据,这是因为,最经常地,时间存储器将在相对最近的时间点产生,例如,1分钟、1小时、1天。当与整个数据存储器相比时,在那些时间段中典型变化的数据量是很小的。每个主表格可包含500,000到5,000,000个记录,每个表格仍可在固定时间中被搜索。因此只具有几千个表项的主表格可被用于支持2千兆字节的物理存储器36的应用程序中。
[0196]参照图11,当前存储器控制器472处理被指引到装置/存储单元组合的请求,当前存储器控制器472被预订给所述装置/存储单元组合。每个当前存储器控制器472接收由此产生的控制信息,所述控制信息通过控制平面568(图12)从主机接口361(图10)被发送到I/O管理器462。当前存储器控制器472基于这个控制信息创建工作次序,从而确保与控制请求相联系的数据被写到逻辑单元,而且目前出现在目标位置的旧数据被存储管理装置538拷贝并保存在别处。
[0197]类似地,时间存储器控制器476处理被指引到装置/存储单元组合的请求,时间存储器控制器476被预订给所述装置/存储单元组合。每个预定是使用处理器模块378的数据分类器384来注册的。
[0198]I/O管理器362还包括I/O路由器470。I/O路由器470是负责根据当前存储器控制器372和时间存储器控制器376的指引移动数据的软件模块。
[0199]虽然I/O路由器470、当前存储器控制器472、功能存储474和时间存储器控制器476中每种装置都只显示了一个,但I/O管理器362可包括这些装置中每种一个或更多个。此外,除图11所示的配置外,这些元件也可在其它配置中通信。例如,在一个实施例中,I/O管理器462包括多个时间存储器控制器476。
[0200]现在参照图12,在另一个实施例和更抽象的表示中,存储管理装置538包括用于在多个模块之间互相通信的数据平面566和控制平面568。存储管理装置538包括多个主机接口561、I/O管理器562和物理存储器接口564。虽然这些组件,如之前的图所示,每个均位于特定的处理器模块上,然而它们可共同被看作这些组件的集合,出于效率和容错性的考虑,这些组件共同工作以分担载荷。
[0201]主机接口561和物理存储器接口564在数据平面566上相互传递数据,如上所描述的,所述数据平面566是使用直接存储访问和内部网络380(图10)来实现的。在控制平面568上,控制信息(例如,控制分组、元数据分组)在主机接口561和I/O管理器562之间,以及在I/O管理器562和物理存储器接口564之间传递。控制平面568是通过采用处理器内通信机制以及使用内部网络380(图10)来实现的。数据有效载荷经由数据平面566在主机接口561和物理存储器接口564之间传递。
[0202]完成上面描述的优化操作,在某种程度上是由于存储管理装置338所采用的队列系统。队列系统组织被I/O管理器362处理的控制信息(例如,控制分组、元数据分组)。控制信息首先服从一进入的队列,其中I/O管理器362以该控制信息被接收的顺序对其进行排队。
[0203]在一个实施例中,控制分组被联合、重排序及/或策略上地延迟以便更高效地处理这些分组。再次参照图10,I/O管理器362标识并跟踪控制分组的幂等群(idempotent group),也就是相互独立的控制分组群。通常,幂等群与其它分组群相比可被更高效地处理,例如,幂等群可被更快速地处理。例如,如果被指引到块0-15的第一控制分组在时间T0到达,并且被指引到块8-31的第二控制分组在时间T5到达,那么I/O管理器362将从T0到T4的全部操作包含在一幂等群中,并在时间T5开始另一个群(假如在T0和T5之间没有别的控制分组重叠)。在本例中,选择处理、分群和执行次序以防止T5操作发生T0操作之前。例如,如果T5操作首先被执行,T0操作将在它的之前映象(也就是,块8-15)中包括部分的T5有效载荷。此外,T5操作将会在其之前映象中丢失来自T0操作的数据,虽然该数据在时间T1是存在的。
[0204]存储管理装置338创造许多产生提高处理效率的定制控制分组群的机会,因为例如,操作可被分成“工作者群”(worker group),在此每个工作者群可以线程化的(threaded)、独立的且同时的方式运行。如上所描述的确定某些块不是幂等的就强制I/O管理器362确保全部的块引用0-32发生在与T0和T5操作相同的工作者群中,但是包括其它很大块群的操作仍可重排序。因此,I/O管理器362使用高级排队理论不断地标识、分析和管理在多个队列上的幂等关系。
[0205]系统允许用户创建新的动态或静态的数据存储器B,所述数据存储器B是表示在前面时间点的主数据存储器A,例如,在T-500。目标模式驱动器382在第一通信链路40上创建目标装置表示,链路40允许主机34发布命令到新的数据存储器B。I/O管理器362使用功能存储474去创建不能通过当前存储器A满足数据存储器B的全部块的映射,也就是说,自恢复时间T-500以来这些块已在当前存储器A中被重写。由于被指引到主数据存储器A的持续的I/O流,该映射被持续更新。例如,每次用户修改数据存储器A的一个块时,当前存储器A中的目标块不再包含与其在时间T-500之前所包含的数据相同的数据。映射并入时间存储器A中新目标块被拷贝到的位置。因此,被指引到数据存储器B的I/O请求定位正确的块内容。另外,整个处理必须同时发生以确保对当前存储器A、时间存储器A的更新被准确地反映在数据存储器B的映射中,从而防止对数据存储器B的I/O请求将错误的块标识为数据源。例如,当新的块被写到数据存储器A时,映射是使用数据存储器A的先前内容的时间存储器中的位置被更新的。存储管理装置538采用确保被指引到数据存储器B的I/O请求随后及时地定位正确数据的方法。
[0206]
修改历史请求
[0207]通常,在另一个方面,本发明涉及用于提供数据存储器内位置的修改历史的系统、方法和制品。简单概括,在本发明这方面的一个实施例中,第一计算装置(例如,如上所描述的主机)给第二计算装置(例如,如上所描述的存储管理装置)指定由第二计算装置管理的数据存储器内的位置(例如,数据存储器内的地址范围)。第一计算装置然后还从第二计算装置请求存储在指定位置的数据至少一部分被修改的时间的列表。在一个实施例中,第二计算装置然后用存储在该位置的数据某部分被修改的时间的列表作出响应,并可选地标识该位置的哪些部分在那些时间被修改。一般而言,如果存储在该位置的数据的某部分已被修改,那么由于被引导到数据存储器该部分的写操作,其就已被修改。
[0208]在一个实施例中,对数据存储器内一位置的修改历史的请求被接收于第二计算装置带内,也就是,该请求来自第一计算装置并通过当第一计算装置传递数据命令(例如,读操作和写操作)时其使用的同一通信协议。在另一个实施例中,该请求被接收于第二计算装置带外。例如,请求是经由与第一计算装置传递数据命令时所使用的通信协议不同的通信协议而接收的,经由不同的通道(例如,经由用户界面,比如图形用户界面,或不同于第一计算装置的一计算装置的控制台上的命令行,比如,例如,第二计算装置或另一个计算装置比如管理员的计算装置或位于第三方控制中心的计算装置)而接收的或它的某组合而接收的。
[0209]例如,如果用户(例如,系统管理员)注意到一个关于存储在数据存储器中的数据的问题,本发明的这个方面可能是有用的。该问题可能是,例如,由于软件或硬件的误操作而导致数据被破坏,或如另一个例子,由于管理员错误而导致数据被应用程序重写。一确定该问题的相关位置(一个或多个),管理员就可查询装置以确定该位置(一个或多个)上一次被修改的时间。使用该信息,管理员然后可请求数据存储装置呈现数据存储器在每一指示时间之前时间的先前映象。这样,用户很可能标识出最近可用的先前映象,在其中被破坏的数据是完整无缺的。
[0210]一些应用程序和操作系统,例如,一检测到数据存储器中的某些错误,就提供有关错误被检测所在的特定数据存储器位置的信息以便有助于调试。当这样的位置信息被应用程序直接提供时,可使用所述位置信息完成上面所描述的查询。作为另一个例子,一些应用程序和操作系统报告与特定的文件相联系的错误。典型地,操作系统及/或文件系统工具可被用于确定由操作系统及/或文件系统分配给那些文件的数据存储器位置。如果提供给应用程序(或操作系统、装置等)的数据存储器是虚拟化的,则由该应用程序(或操作系统、装置等)提供的数据存储器位置可能需要被转换(例如,去虚拟化),从而标识被数据存储装置呈现时在数据存储器中各自的相关位置。
[0211]在一个示范实施例中,数据存储器的用户被告知应用程序,例如数据库应用程序遇到的问题。该用户直接地从该应用程序,或间接地使用该应用程序或操作系统提供的信息来确定问题所在的位置(一个或多个)。例如,用户可通过使用基于软件的工具分析应用程序特定的或操作系统保持的错误日志而作出该确定,以便于I/O错误的去虚拟化。用户然后将一询问指引到存储装置,以确定所述位置(一个或多个)上一次被修改的时间。该询问可被执行,例如,通过使用应用程序,使用另外提供在用户计算机上的基于软件的工具,或直接地使用控制面板、控制台或其它工具送至存储装置。用户(借助工具等)接收修改历史。用户然后请求存储装置呈现一个或更多个在所报告的修改时间之前的各自时间的先前映象(例如,一次一个或全部一起)。用户然后可检查每个先前映象以标识其中不存在所述问题的最近可用的先前映象。例如,用户然后可将来自先前映象的数据拷贝到数据存储器,开始使用先前映象,或采取其它做法。
[0212]图13说明了根据本发明这方面的可提供修改历史的存储系统630的一个实施例。存储系统630包括主机634、存储管理装置638和物理存储器636。主机634与存储管理装置638通过第一通信链路640相互通信。存储管理装置638与物理存储器636通过第二通信链路642相互通信。一般而言,主机634、存储管理装置638、物理存储器636以及第一和第二通信链路640、642可分别拥有上述主机、存储管理装置、物理存储器和第一和第二通信链路的能力,并可被实现为上述主机、存储管理装置、物理存储器和第一和第二通信链路,且具有在此所描述的附加功能性。应该理解的是,其他实现也是可能的。
[0213]在一个实施例中,主机634包括至少一个主机接收器681和一个主机发送器683。主机接收器681和主机发送器683每个均可采用分别对接收和发送通信有用的任何形式、方法或方式来实现,所述通信比如,例如为请求、命令和响应。在一个实施例中,主机接收器681和主机发送器683被实现为具有硬件接口的软件模块,在此软件模块能够解释通信,或其必要部分。在另一个实施例中,主机接收器681和主机发送器683被实现为单个主机收发器(未显示)。主机634使用主机接收器681和主机发送器683通过第一通信链路640与存储管理装置638通信。
[0214]在一个实施例中,存储管理装置638包括至少一个存储管理装置接收器687、一个确定模块689和一个存储管理装置发送器691。再次,存储管理装置接收器687和存储管理装置发送器691每个均可采用分别对接收和发送通信有用的任何形式、方法或方式来实现,所述通信比如,例如为请求、命令和响应。例如,类似主机接收器681和主机发送器683,存储管理装置接收器687和存储管理装置发送器691还可被实现为具有硬件接口的软件模块,在此软件模块能够解释通信,或其必要部分。在一个实施例中,存储管理装置接收器687和存储管理装置发送器691被实现为单个存储管理装置收发器(未显示)。存储管理装置638使用存储管理装置接收器687和存储管理装置发送器691通过第一通信链路640与主机634通信,及/或通过第二通信链路642与物理存储器636通信。
[0215]对它来说,确定模块689可采用能够完成如下所描述的功能的任何形式、方法或方式实现。例如,确定模块689可被实现为软件模块及/或程序,及/或硬件装置,比如,例如专用集成电路(ASIC)或现场可编程门阵列(FPGA)。在一个实施例中,确定模块689被实现为上面所描述的I/O管理器362(参见图10)的一部分。
[0216]在一个实施例中,存储管理装置638还包括至少一个具有关联的当前存储器644和时间存储器646的数据存储器643。例如,与当前存储器644和时间存储器646中之一或两者相联系的数据可被存储在存储管理装置638的内存中。与当前存储器644和时间存储器646中之一或两者相联系的数据还可被存储在物理存储器636中,对于该数据来说,其可被直接存储或被虚拟化,等等。存储管理装置638记住当前存储器644和时间存储器646中的数据。例如,存储管理装置638从内存及/或物理存储器636读写数据并使用所述数据的索引和指针来维持时间存储器646。再次,数据存储器643、它的当前存储器644和它的时间存储器646可分别具有上述的数据存储器、当前存储器和时间存储器的容量,并可被实现为上述的数据存储器、当前存储器和时间存储器,且具有在此所描述的附加功能性。在又一个实施例中,如上所描述的,存储管理装置638包括一个以上数据存储器,比如,例如二个、三个或任何数目的数据存储器。
[0217]如之前所描述的,当存储管理装置638从主机634接收到被指引到数据存储器643的写操作时,存储管理装置638保留该写操作的记录。在一个实施例中,存储管理装置638采用写时拷贝规程并更新历史索引。例如,在接收到写操作之后,但在执行该写操作之前,存储管理装置638从数据存储器643拷贝任何将被包含于写操作中的新数据重写的旧数据。存储管理装置638将“旧数据”保存到数据存储器643内的新的目的地并更新历史索引。在一个实施例中,例如,对于写操作的每次出现,存储管理装置638都记录指示旧数据被重写的时间的时间戳,记录旧数据被重写的数据存储器643内的地址范围,并记录旧数据现在存储所在的数据存储器643内的新的地址范围。因此,存储管理装置638维持可被查阅的索引,如下所描述的,响应对数据存储器643内位置的修改历史的请求。
[0218]虽然所描述的是关于写时拷贝操作,但应该理解的是刚才所描述的原理将对任何数据存储系统都是适用的,在所述数据存储系统中变化的日志或索引被记录下来。例如,如果对数据存储器的实际写被记录,代替或结合将过去在重写之前被写的数据记入日志,系统仍可提供如上所描述的有关存储位置何时被修改的信息,并且该信息可根据变化的日志或索引来确定。同时,应该理解的是在一些情况下,一些而不是全部的数据存储器的变化可被记录,并且数据存储器在这样的情况下可仅仅提供其可获得的修改信息。
[0219]现在参照图14A,在用于提供数据存储器内位置的修改历史的方法700的一个实施例的概要中,例如使用图13的示范存储系统630,存储管理装置638在步骤704接收对数据存储器643内位置的修改历史的请求。存储管理装置638然后在步骤708确定至少一个时间,在所述时间存储在接收到的请求中指定的位置的数据的至少一部分被修改。然后,在步骤712,存储管理装置638,响应接收到的请求,发送至少一个在步骤708确定的时间。可选地,存储管理装置638还在步骤710为每个在步骤708确定的时间标识数据存储器643内的地址范围,在所述确定的时间数据在所述数据存储器643内的地址范围被修改。在步骤714,可选地,存储管理装置638还响应接收到的请求,发送在步骤710标识的地址范围。
[0220]更详细地,在步骤704,主机634经由它的发送器683并通过第一通信链路640发送对数据存储器643内位置的修改历史的请求。该请求可用对进行请求有用的任何形式或方式传递。在一个实施例中,例如,该请求用数据分组的形式传递。该请求被接收于存储管理装置638的接收器687。在一个实施例中,在该请求中指定的位置是数据存储器643内的一地址范围。该地址范围可被指派,例如,LBA和长度。在一个实施例中,所述LBA指定该地址范围的开始端,所述长度指定该地址范围的长度。例如,在一个实施例中,数据存储器643的存储地址空间被分割成块(例如,扇区),在此每个块长为512字节。在这种情况下,该LBA被用于指派特定的512字节块(也就是,在该地址范围开始端的512字节块)并且该长度被用来指派多少个512字节块被包含于该地址范围内。例如,在主机634请求数据存储器643中起始于字节8192并且长为4096字节的地址范围的修改历史的情况下,该请求将包括的LBA为16和长度为8。
[0221]在存储管理装置638接收到对数据存储器643内位置的修改历史的请求之后,存储管理装置638的确定模块689在步骤708确定一个或多个时间,在所述时间存储在该位置的数据至少一部分被修改。在一个实施例中,例如,确定模块689解析之前描述的历史索引,所述历史索引列出对数据存储器643的修改(例如,执行于其上的写操作)。该索引可被存储,例如,作为数据存储器643的时间存储器646的一部分。确定模块689然后确定那些所列的修改中哪个是对于一地址范围的数据作出的,所述地址范围至少部分地与所请求的位置的地址范围重叠,并记下作出这样的修改的时间(一个或多个)。然而,可能有这样的情形,所请求的位置的地址范围的数据未被修改。在这种情况下,存储管理装置638将在步骤712(如下所描述)发送否定响应(也就是,指示在所请求的位置的地址范围的数据未被修改的响应)。
[0222]通常,在接收到对修改历史的请求之前,存储在数据存储器643内该位置的数据的一个或更多个子集、交叉集,超集及/或全集也许已在一个或多个时间被修改。例如,由存储管理装置638接收到的请求可能是对具有一地址范围(LBA0,长度64)的位置的修改历史的请求。在接收该请求之前,存储在地址范围(LBA0,长度8)的数据(也就是,该位置的一个子集)、存储在地址范围(LBA62,长度16)的数据(也就是,该位置的一个交叉集)、存储在地址范围(LBA0,长度128)的数据(也就是,该位置的一个超集)及/或存储在地址范围(LBA0,长度64)的数据(也就是,该位置的全集)也许已在一个或更多个时间被修改。在一个实施例中,在步骤708,在已确定这些集合(及/或与所请求位置的地址范围至少部分地重叠的任何其它集合)被修改的时间之后,存储管理装置638的确定模块689还在步骤710标识这些之前被修改的集合的地址范围。
[0223]在步骤712,例如在图13的实施例中,存储管理装置638经由它的发送器691并且通过第一通信链路640发送一个或更多个确定的时间,在所述确定的时间存储在该位置的数据至少一部分被修改。可选地,在步骤714,存储管理装置638另外可经由它的发送器691并通过第一通信链路640上发送一个或更多个已标识的在一个或更多个确定的时间被修改的地址范围集。所述一个或更多个确定的时间及/或一个或更多个已标识的地址范围集可用任何对提供这样的信息有用的形式或方式传递。例如,信息以数据分组的形式传递。在一个实施例中,主机634在它的接收器681接收这些一个或更多个确定的时间及/或一个或更多个已标识的地址范围集。并且,可选地,发送器可发送被修改的数据。
[0224]在一个实施例中,存储管理装置638在单个分组中发送修改信息。例如,单个发送的分组标识出被修改的每一个地址范围集,并且为每一集合列出其被修改的时间。在另一个实施例中,存储管理装置638分开发送确定的时间和已标识的地址范围集,例如在分开的分组中发送,并且此外向主机634提供附加信息以将确定的时间与已标识的地址范围集联系起来。还在另一个实施例中,存储管理装置638还将在确定的时间被修改之前已被存储在已标识的地址范围集的数据传送到主机634。在这样做时,存储管理装置可标识出哪个确定的时间及/或地址范围集与后来被修改的数据的给定片段对应。
[0225]图14B描述方法700′的一个实施例,所述方法700′是图14A的方法700的变体,其用于提供数据存储器内位置的修改历史,并再次使用图13的示范存储系统630。一般而言,除在此所陈述之外,方法700′的步骤以和上面所描述的方法700的步骤相同或相似的方式执行。
[0226]在一个实施例中,类似方法700,存储管理装置638在步骤704′接收对数据存储器643内位置的修改历史的请求。然而在该实施例中,对修改历史的请求是对一时间列表的请求,从每一所述时间起,存储在该请求中指定位置的全部数据,而不是仅仅某部分数据被修改。因此,存储管理装置638在步骤708′确定至少一个时间,从该时间起存储在该位置的数据的全部都被修改,并在步骤712′为响应接收到的请求而发送至少一个确定的时间。可选地,在步骤714′存储管理装置638还响应接收到的请求而发送数据存储器643内的一地址范围,在所述地址范围,从至少一个确定的时间开始,整个数据都被修改。如果被发送,该地址范围将与在对修改历史的请求中所指定的位置相同。
[0227]在上面所描述的方法700′的实施例中,存储在对修改历史的请求中所指定位置的数据可能都已被修改,然而同时又为了满足该请求的条件,不是全部数据都必须被修改。用另一种方式说,存储在对修改历史的请求中所指定位置的数据的至少一部分可能已在与存储管理装置638在方法700′的步骤708′确定的至少一个时间不同的时间(也就是,在随后时间)被修改。如果,例如,存储于在对修改历史的请求中所指定位置的全部数据在第一时间T1被修改,存储在该位置的数据的第一部分而不是全部数据在第二时间T2被修改,存储在该位置的数据的第二部分而不是全部数据在第三时间T3被修改(在此数据的第一部分和第二部分总计达到存储在对修改历史的请求所指定位置的所有数据),并且存储在该位置的全部数据再次在第四时间T4被修改(在此,T1、T2、T3和T4按时间顺序发生),存储管理装置638将在步骤708′确定存储在该位置的全部数据都已被修改的时间是T1、T2和T4。
[0228]在用户知道存储在该位置的全部数据都被破坏并需要替换的情况下(例如在用户知道整个JPEG文件都被破坏的情况下),如刚刚为方法700′描述的,能够请求一时间列表是尤其是有用的,其中从每一所述时间起存储在特殊位置的全部数据而不只是某部分数据被修改。知道在步骤708由存储管理装置638确定的时间,用户能因此请求存储管理装置638恰在确定的时间之前的时间生成该位置的映象。用户从而能标识出全部数据是完整无缺的(也就是,未破坏)的最近时间并可选择将在该位置的数据复原回在该最近时间出现于该位置的数据。
[0229]图15描述了根据本发明的对数据存储器(例如,数据存储器643)内位置的修改历史的请求800的说明性实施例,所述请求800可被主机(例如,主机634)发送至存储管理装置(例如,存储管理装置638)。在一个实施例中,如所说明的,请求800是用数据分组804的形式。数据分组804可包括I/O命令的至少一部分,所述I/O命令可采用标准I/O命令格式,比如SCSI命令格式。
[0230]在一个实施例中,数据分组804包括16字节的请求数据。在字节0中,操作码标识将被执行的请求类型(例如,提供数据存储器643内位置的修改历史)。例如,操作码可与对至少一个时间(在该时间,存储在数据存储器643内一位置的数据的至少一部分被修改)的请求相联系或与对时间列表(从每一所述时间起存储在数据存储器643内一位置的全部数据而不仅仅是某部分数据被修改)的请求相联系。一示范操作码是C1h,其是分配给SCSI协议中供应商专用的请求的代码。
[0231]字节1的三个最高有效位(也就是,比特5-7)留作将来使用。可选地,字节1的其余5个最低有效位(也就是,比特0-4)规定一服务动作(service action)字段(例如,包含一代码值的字段,所述代码值标识将于字节0的操作码中所指定的更一般的请求下被执行的功能)。替代性地,在另一个实施例中,字节1的比特0-4也被保留给将来使用。
[0232]字节2-9用于逻辑块地址(LBA),LBA标识出一位置的第一存储单元(也就是,第一块),所述位置的修改历史被请求。字节10-13用于长度,所述长度指示存储单元的数目,包括由LBA标识的第一存储单元,所述存储单元顺序地构成数据存储器643内的位置。在一个实施例中,逻辑块地址和长度构成地址范围。
[0233]字节14留作将来使用。例如,字节14可被用作相对校验(Relative Check)字段,所述相对校验字段用于指示将被存储管理装置638返回的一个或更多个时间是相对的还是绝对的。如果,例如,相对校验字段是0,那么存储管理装置638返回的一个或更多个时间是以现在时间为基准的。换言之,相对校验字段中的0指示将被存储管理装置638返回的一个或更多个时间是从当前时间起计算的经过时间。另一方面,如果,例如,相对校验字段是非零的,那么存储管理装置638返回的一个或更多个时间将被绝对地指定,也就是,不参考另一个时间。
[0234]字节15是数据分组804的控制字段。例如,在一个特定的实施例中,其中数据分组804以典型的SCSI命令格式实现,字节15的比特0可被用于(例如,可被置位)指定对跨越两个或更多命令(也就是,连接连续的命令)的任务延续的请求,字节15的比特1可提供一种在连接的命令之间请求中断的方法,字节15的比特2可被用于指定在一定条件下是否应该建立自动条件结合(auto condition allegiance),字节15的比特3-5可被保留,以及比特6-7可以是供应商专用的比特。
[0235]图16描述了根据本发明的响应900的说明性实施例,具体地,是对请求800的响应900,请求800是对数据存储器643内位置的修改历史的请求,所述响应900可被存储管理装置638发送至主机634。在一个实施例中,如所说明的,响应900采用数据分组904的形式。数据分组904可包括I/O响应的至少一部分,所述I/O响应可采用标准I/O响应格式,比如SCSI响应格式。
[0236]在一个实施例中,如所说明的,数据分组904包括至少30字节的响应码,并可包括如下所描述的,响应码的附加字节。图16标识可被包含在响应码的示范字节中的每个比特。字节0-1留作将来使用。
[0237]字节10-13用于LBA,所述LBA标识包括在请求800中所指定位置的至少一部分的集合中的第一存储单元(也就是,第一块)。换言之,在字节10-13中表示的LBA标识例如,在请求800中所指定位置的子集、请求800中所指定位置的交叉集、请求800中所指定位置的超集或请求800中所指定位置的全集的第一存储单元。字节14-21用于长度,所述长度指示存储单元的数目,存储单元包括由字节10-13中的LBA标识的第一存储单元,所述存储单元顺序地构成集合。在一个实施例中,LBA和长度构成集合的地址范围。如该信息所指示的,存储在集合中已标识的地址范围的数据在存储管理装置638接收到请求800的时间点之前被修改。照这样,字节22-29用于确定的改变时间,其指示存储于在字节10-21中标识的集合的地址范围的数据被修改的时间。
[0238]字节10-29(也就是,LBA、长度和确定的改变时间)合起来组成一字节组(tuple)。数据分组904可包括任何数目的字节组(例如,一个、两个或更多字节组)。数据分组904的字节30-n用于字节组的重复。在一个实施例中,包含在数据分组904内的字节组的数目是,根据存储装置可得到的信息,存储在请求800中所指定位置的数据的至少一部分被修改的时间次数,或对应于该时间次数。字节2-9用于指示符,其表示包含在数据分组904内的字节组的数目。
[0239]在一个实施例中,在字节22-29中所表示的确定的改变时间是相对时间。替代性地,在另一个实施例中,确定的改变时间是绝对时间。在一个实施例中,每个字节组可,例如,包括用作相对校验字段的附加字节,所述相对校验字段用于指示包含于该字节组内的确定的改变时间是相对的还是绝对的。替代性地,在另一个实施例中,包含于数据分组904的n个字节组内的所有确定的改变时间或者全部是相对的或者全部是绝对的,从一个字节组到下一个不存在差异。在这样一个实施例中,举例来说,保留字节0-1中的一个可用作相对校验字段,所述相对校验字段用于指示包含于数据分组904的n个字节组内的所有确定的改变时间是相对的还是绝对的。如上,如果,例如相对校验字段是0,那么一个或更多个确定的改变时间是以现在时间为基准。另一方面,如果,例如相对校验字段是非零的,那么存储管理装置638返回的一个或更多个确定的改变时间被绝对地指定,也就是,不参考另一个时间。
[0240]在一个实施例中,如果包含在字节组内的确定的改变时间是相对的,那么存储在由该字节组指定的集合的地址范围的数据的实际修改时间是通过从响应900的产生时间减去确定的改变时间计算出来的。在这样一个实施例中,响应900可被加上时间戳。另一方面,如果包含在字节组内的确定的改变时间是绝对的,那么存储在由该字节组指定的集合的地址范围的数据的实际修改时间就只是确定的改变时间。
[0241]图17-20呈现了一个可如何获得数据存储器643内位置的修改历史的例子。图17描述了该例子的时间线1000。时间线1000说明了在时间T1、T2、T3、T4和T5中的每一时间被指引到数据存储器643的不同的写操作。每个写操作被表示为“Wr(LBA,长度,数据)”,在此(LBA,长度)表示数据被写的地址范围。因此,在时间T1,数据被写到地址范围(LBA0,长度8);在时间T2,数据被写到地址范围(LBA62,长度16);在时间T3,数据被写到地址范围(LBA100,长度35);在时间T4,数据被写到地址范围(LBA0,长度64);以及在时间T5,数据被写到地址范围(LBA0,长度128)。
[0242]图18描述用于本例的历史索引1100的示范实施例。如上所描述的,在接收到特定的写操作之后,而在执行该写操作之前,存储管理装置638拷贝存储在由写操作指定的地址范围的数据并将其保存到新的目的地。存储管理装置638然后执行写操作并更新如上所描述的历史索引1100。例如,在时间T1执行写操作之后,存储管理装置638记录,如历史索引1100第二排中所示的,写操作被执行的时间T1、数据被写到的地址范围(LBA0,长度8)和恰在时间T1之前存储在地址范围(LBA0,长度8)的数据此刻被存储的新的地址范围(LBA1000,长度8)。如图18所示,在时间T2、T3、T4和T5执行写操作中的每个之后都同样地更新历史索引1100。
[0243]根据该例子,在时间T5之后的某个时间,主机634从存储管理装置638请求数据存储器643内位置的修改历史。例如,现在参照图19,主机634将数据分组1204发送至存储管理装置638,所述数据分组1204采用参考图15所描述的数据分组804的形式。在本例中,主机634请求至少一个时间,存储在地址范围(LBA0,长度64)的数据的至少一部分在该时间被修改。因此,数据分组1204的字节0的操作码与该请求相联系,数据分组1204的字节2-9被设置以指示LBA是0,并且数据分组1204的字节10-13被设置以指示长度是64。
[0244]在处理这个对数据存储器643内地址范围(LBA0,长度64)的修改历史的请求之后(例如,在分析列出执行于数据存储器643上的写操作的历史索引1100之后),存储管理装置638响应主机634。例如,现在参照图20,存储管理装置638将数据分组1304发送至主机634,所述数据分组1304采用参考图16所描述的数据分组904的形式。在本例中,数据分组1304包括四个字节组,如在数据分组1304的字节2-9中的指示符所指定的。现在参照图18和20,字节10-29(也就是,数据分组1304的第一字节组)指示地址范围(LBA0,长度8)(也就是,所请求的地址范围(LBA0,长度64)的子集)在时间T1被修改;字节30-49(也就是,数据分组1304的第二字节组)指示地址范围(LBA62,长度16)(也就是,所请求的地址范围(LBA0,长度64)的交叉集)在时间T2被修改;字节50-69(也就是,数据分组1304的第三字节组)指示地址范围(LBA0,长度64)(也就是,所请求的地址范围(LBA0,长度64)的全集)在时间T4被修改;以及字节70-89(也就是,数据分组1 304的第四字节组)指示地址范围(LBA0,长度128)(也就是,所请求的地址范围(LBA0,长度64)的超集)在时间T5被修改。通过接收数据分组1304,主机634,从而被提供一些时间以及在那些时间被修改的相应地址范围,在所述时间存储在数据存储器643内地址范围(LBA0,长度64)的数据的至少一部分被修改。
[0245]还应该注意的是,因为发生在时间线1000的时间T3的写操作被指引到地址范围(LBA100,长度35),该地址范围不与所请求的地址范围(LBA0,长度64)重叠,所以数据分组1304不包括任何有关该写操作的信息。
[0246]
存储缓冲区选择
[0247]通常,在另一个方面,本发明涉及用于最优地选取一个或更多个用于数据存储的存储缓冲区的方法和装置。简要综述,在本发明该方面的一个实施例中,第一计算装置(例如,如上所描述的存储管理装置)接收需要临时或永久存储的数据。例如,第一计算装置从第二计算装置(例如,如上所描述的主机)接收一包括需要临时或永久存储的数据有效载荷的写操作。第一计算装置起初将接收到的数据存储在第一存储缓冲区,然后最优地标识一个或更多个第一计算装置内的附加存储缓冲区,所述附加存储缓冲区存储接收到的数据的冗余拷贝。存储缓冲区可位于,例如,第一计算装置中的若干处理器模块的其中一个之中。
[0248]在本发明该方面的一个实施例中,第一计算装置评估一个或更多个成本等式,以便最优地标识一个或更多个用于冗余地存储接收到的数据的拷贝的附加存储缓冲区。此外,在一个实施例中,第一计算装置将接收到的数据的第一拷贝存储在第一最优地标识的附加存储缓冲区,并还可将接收到的数据的第二和更多拷贝存储在第二和更多的最优地标识的附加存储缓冲区。因此,第一计算装置可提供冗余存储容量。
[0249]图21说明根据本发明该方面的存储管理装置1438的一个实施例,所述存储管理装置1438最优地标识一个或更多个存储缓冲区。一般而言,存储管理装置1438可拥有上面所描述的存储管理装置的能力,并可被实现为上述存储管理装置,并具有在此所描述的附加功能性。应该了解的是其它实现也是可能的。
[0250]在一个实施例中,存储管理装置1438包括多个处理器模块,例如一个第一处理器模块1478和至少一个第二处理器模块,例如三个第二处理器模块1478′、1478″、1478(通称1478′)。然而,在图21的存储管理装置1438中所描述的第一处理器模块1478和三个第二处理器模块1478′仅仅是说明性的。更一般来说,存储管理装置1438可包括任何数目的处理器模块1478、1478′。基于比如对可伸缩性、性能和成本的考虑,处理器模块1478、1478′的数量可被增加或减少。再次,一般而言,处理器模块1478、1478′可拥有上面所描述的处理器模块(例如,关于图10描述的处理器模块378)的能力,并可被实现为上述处理器模块,并具有在此所描述的附加功能性。
[0251]在一个实施例中,存储管理装置1438是用于存储数据(例如,用于暂时地存储数据)的装置。因此,在一个这样的实施例中,存储管理装置1438包括多个用于存储数据的存储缓冲区,1463、1463′、1463″、1463(通称1463)。在一个实施例中,例如如图21中所说明的,存储管理装置1438的每个处理器模块1478、1478′包括至少一个存储缓冲区1463。在另一个实施例中,存储管理装置1438的处理器模块1478、1478′中的一些,而不是全部包括一个存储缓冲区1463。在又一个实施例中,存储管理装置1438包括一个或更多个存储缓冲区1463,所述存储缓冲区1463独立地位于存储管理装置1438之上并且不是处理器模块1478、1478′的一部分。仍然在另一个实施例中,单个处理器模块1478、1478′可包括两个或更多存储缓冲区1463。一般而言,存储缓冲区1463可拥有上面所描述的存储缓冲区(例如,关于图10描述的存储缓冲区363)的容量,并可被实现为该存储缓冲区,并具有在此所描述的附加功能性。例如,存储缓冲区1463可被包含于处理器模块1478、1478′的内存296(参见图9)内。在一个实施例中,整个内存296构成存储缓冲区1463。在另一个实施例中,内存296内较小的、但邻接的块构成存储缓冲区1463。在又一个实施例中,若干分开的块在内存296内被连接起来,例如通过指针,以构成存储缓冲区1463。构成存储缓冲区1463的内存296内的地址空间可以是静态的,或替代性地,其可以在运行时被动态地分配。
[0252]在一个实施例中,存储管理装置1438的至少一个处理器模块(例如,第一处理器模块1478及/或至少一个第二处理器模块1478′)包括至少一个接收器1493、一个发送器1495、一个评估器(evaluator)1497和一个数据运算器1499。接收器1493和发送器1495每个均可用分别对接收和发送通信有用的任何形式、方法或方式实现,所述通信比如,例如为请求、命令和响应。在一个实施例中,接收器1493和发送器1495被实现为具有硬件接口的软件模块,在此软件模块能够解释通信或其必要部分。在另一个实施例中,接收器1493和发送器1495被实现为单个收发器(未显示)。处理器模块1478、1478′使用接收器1493和发送器1495来与其它处理器模块1478、1478′之一或更多个通信,及/或与一个或更多个计算装置(未显示)而不是存储管理装置1438通信。接收器1493和发送器1495可被实现为用于不同协议的多个装置,比如,例如,图10的目标模式驱动器382、与图10的内部网络380相联系的收发器或它的某种组合。
[0253]对它们来说,评估器1497及/或数据运算器1499可用能够完成如下所描述的功能的任何形式、方法或方式实现。例如,评估器1497及/或数据运算器1499可被实现为运行在微处理器上的软件模块及/或程序,及/或硬件装置,比如,例如专用集成电路(ASIC)或现场可编程门阵列(FPGA)。在一个实施例中,评估器1497和数据运算器1499被实现为上面所描述的主机接口361的一部分,例如目标模式驱动器382的一部分(参见图10)。
[0254]现在参照图22,在用于存储数据的方法1500的一个实施例的概要中,该方法例如使用图21的示范存储管理装置1438,来自存储管理装置1438的多个处理器模块1478、1478′中的处理器模块1478、1478′,比方说第一处理器模块1478,在步骤1504接收用于存储的数据。第一处理器模块1478然后在步骤1508将接收到的数据的第一实例(instance)(例如,接收到的数据本身)存储在第一处理器模块1478上的第一存储缓冲区1463,并在步骤1512评估第一成本等式以从多个存储缓冲区1463中标识第二存储缓冲区1463,所述第二存储缓冲区1463最优地存储接收到的数据的第二实例(例如,接收到的数据的拷贝)。可选地,在步骤1516,第一处理器模块1478评估第二成本等式以从多个存储缓冲区1463之中标识第三存储缓冲区1463,其中接收到的数据的第三实例(例如,另一个拷贝)最优地存储于所述第三存储缓冲区1463。再次可选地,在步骤1520,接收到的数据的第二实例可被存储在第二存储缓冲区1463并且接收到的数据的第三实例可被存储在第三存储缓冲区1463。此外,应该理解的是,在步骤1516和1520,任何数目的另外的成本等式(例如,第二、第三、第四和第五成本等式等等)可被评估以标识任何数目的存储缓冲区1463(例如,第三、第四、第五和第六存储缓冲区1463等等),在此最优地存储接收到的数据的任何数目的实例(例如,接收到的数据的第三、第四、第五和第六实例等等)。有利地,通过将接收到的数据的第二和另外的实例最优地存储在来自多个存储缓冲区1463之中的第二和另外的存储缓冲区1463,接收到的数据可被快速高效地进行冗余存储,从而改进容错性,并且接收到的数据全部可被快速高效地存取,而不用使存储管理装置1438超载。
[0255]更详细地,在一个实施例中,第一处理器模块1478的接收器1493,在步骤1504接收包括数据有效载荷的写操作。第一处理器模块1478的接收器1493,例如可跨越网络(未显示)从计算装置(未显示)而不是存储管理装置1438接收写操作。在步骤1508,接收到的写操作起初被存储在第一处理器模块1478的第一(仅在一些实施例中)缓冲区1463中。在一个实施例中,在第一处理器模块1478接收到写操作之后,以及在其已将接收到的写操作存储在它的第一缓冲区1463中后,第一处理器模块1478的数据运算器1499将数据有效载荷从其余的写操作分离出来,以使数据有效载荷的第一实例被创建和独立地存储于第一处理器模块1478的第一缓冲区1463中。在一个实施例中,除数据有效载荷之外,写操作包括至少一些控制信息。在这样的实施例中,第一处理器模块1478的数据运算器1499运行以将数据有效载荷从这个控制信息分离出来。在将数据有效载荷从其余的写操作分离出来之后,第一处理器模块1478的数据运算器1499然后复制数据有效载荷的第一实例以创建数据有效载荷的第二实例,以及可选地数据有效载荷的另外实例。
[0256]在步骤1512,第一处理器模块1478的评估器1497评估第一成本等式以从多个存储缓冲区1463之中标识第二存储缓冲区1463,而不同于第一处理器模块1478中的第一存储缓冲区1463,数据有效载荷的第一实例起初被存储在所述第一存储缓冲区1463,数据有效载荷的第二实例最优地存储于所述第二存储缓冲区1463。在一个实施例中,评估器1497标识位于第二处理器模块1478′上的第二存储缓冲区1463。在一个这样的实施例中,因为第二处理器模块1478′是不同于第一处理器模块1478的处理器模块,所以将数据有效载荷的第二实例存储在第二存储缓冲区1463可防止在第一处理器模块1478失效的情况下丢失数据有效载荷。
[0257]在步骤1512评估第一成本等式时,第一处理器模块1478的评估器1497可考虑各种因素。例如,在一个实施例中,对于不同于第一处理器模块1478中的第一存储缓冲区1463(数据有效载荷的第一实例起初被存储于所述第一存储缓冲区1463)的存储管理装置1438中的多个存储缓冲区1463中每一个,第一处理器模块1478的评估器1497分配一个值给存储管理装置1438中从第一处理器模块1478到该存储缓冲区1463的物理距离。在一个这样的实施例中,物理距离最靠近第一处理器模块1478的存储缓冲区1463被评估器1497标识为第二存储缓冲区1463,数据有效载荷的第二实例最优地存储在所述第二存储缓冲区1463。例如,在另一个实施例中,对于不同于第一处理器模块1478中的第一存储缓冲区1463(数据有效载荷的第一实例起初被存储于所述第一存储缓冲区1463)的存储管理装置1438中的多个存储缓冲区1463中每一个,第一处理器模块1478的评估器1497分配一个值给该存储缓冲区1463的可用容量。在一个这样的实施例中,具有最大可用容量的存储缓冲区1463被评估器1497标识为第二存储缓冲区1463,数据有效载荷的第二实例最优地存储在所述第二存储缓冲区1463。
[0258]在又一个实施例中,在步骤15 12评估第一成本等式时,并且对于包括存储缓冲区1463(其必须不同于第一处理器模块1478中的第一存储缓冲区1463)的一个或更多个第二处理器模块1478′中的每一个来说,第一处理器模块1478的评估器1497分配一个值给出现于该第二处理器模块1478′的负荷。在一个实施例中,正被讨论的负荷是正被讨论的第二处理器模块1478′与除存储管理装置1438之外的一装置(例如,如上所描述的主机)之间的输入/输出负荷。替代性地,在另一个实施例中,正被讨论的负荷是例如,正被讨论的第二处理器模块1478′与至少一个其它处理器模块1478、1478′之间的请求、命令和响应的互连负荷。这样的话,具有最低负荷值的第二处理器模块1478′的存储缓冲区1463被评估器1497标识为第二存储缓冲区1463,数据有效载荷的第二实例最优地存储在所述第二存储缓冲区1463。
[0259]在有些情况下,存储管理装置1438被实现成使多个存储缓冲区1463的一个或更多个仅对多个处理器模块1478、1478′的某子集来说是可存取的。例如,在这样一个包括分别具有存储缓冲区W、X、Y和Z的处理器模块A、B、C和D的存储管理装置1438(未显示)中,可能的情况是仅处理器模块A、B和C能够存取存储缓冲区W,仅处理器模块B和C能够存取存储缓冲区X,仅处理器模块A和C能够存取存储缓冲区Y,以及仅处理器模块A和D能够存取存储缓冲区Z。因此,在另一个实施例中,评估器1497在步骤1512评估第一成本等式以标识存储数据有效载荷的第二实例的第二存储缓冲区1463,以使将第二存储缓冲区1463和第一存储缓冲区1463(数据有效载荷的第一实例起初被存储在所述第一存储缓冲区1463)联系在一起时,可存取数据有效载荷的第一实例及/或第二实例的处理器模块1478的数目被最大化。当存储数据有效载荷的一个实例的存储缓冲区1463,及/或存储缓冲区1463位于之上的处理器模块1478失效时,最大化可存取数据有效载荷的第一实例及/或第二实例的处理器模块1478的数目可最大化处理灵活性和装置效率。在该实施例的一个实现中,对不同于第一处理器模块1478中的第一存储缓冲区1463(数据有效载荷的第一实例起初被存储在所述第一存储缓冲区1463)的存储管理装置1438中的多个存储缓冲区1463中的每一个来说,第一处理器模块1478的评估器1497分配一个值给存储管理装置1438中处理器模块1478、1478′的数目,该数目是指如果数据有效载荷的第二实例被存储在该存储缓冲区1463,则能够存取数据有效载荷的第一实例和第二实例中至少一个的处理器模块1478、1478′的数目。在一个这样的实施例中,如果数据有效载荷的第二实例被存储在那里,则能够最大化可存取数据有效载荷的第一及/或第二实例的处理器模块1478的数目的存储缓冲区1463因此可被评估器1497标识为第二存储缓冲区1463,数据有效载荷的第二实例最优地存储于所述第二存储缓冲区1463。
[0260]仍然在另一个实施例中,为了确定最优地存储数据有效载荷的第二实例的第二存储缓冲区1463,第一处理器模块1478的评估器1497考虑上面所描述的所有因素,或它的某子集,并将权重加到其所考虑的每个因素上。在一个这样的实施例中,存储数据有效载荷的第二实例的第二存储缓冲区1463就是显示出所考虑因素的最好权重组合的存储缓冲区1463。实际上,可改变每个因素的权重以适应特定的应用程序。
[0261]另外,在另一个实施例中,对多个存储缓冲区1463中的一个或更多个来说,为那些存储缓冲区1463考虑的一个或更多个因素的权重可被预调节,由此以使得不太需要在那里存储数据有效载荷的一份拷贝。这可被完成,例如,从而人为地限制存储在那些存储缓冲区1463的数据量,从而控制/限制对那些特定的存储缓冲区1463的请求,及/或为它们的性能以及因此为存储管理装置1438的性能设定一个上限。
[0262]在一个实施例中,存储管理装置1438存储了接收到的数据有效载荷的一个以上拷贝。因此,在这样一个实施例中,第一处理器模块1438的评估器1497在步骤1516评估第二成本等式,以及可选地,第三、第四和第五成本等式等等。第二成本等式的评估从多个存储缓冲区1463之中标识出第三存储缓冲区1463,所述第三存储缓冲区1463不同于第一和第二存储缓冲区1463(例如,第一、第二和第三存储缓冲区每个可位于不同的处理器模块1478、1478′上),其中数据有效载荷的第三实例最优地存储在所述第三存储缓冲区1463。在一个实施例中,由第一处理器模块1478的评估器1497评估的第二成本等式与上面所描述的第一成本等式相同,除了第一和第二存储缓冲区1463(通过第一成本等式的评估,已标识第二存储缓冲区1463)两者都未被评估器1497考虑之外。替代性地,在另一个实施例中,第二成本等式不同于第一成本等式。例如,在第一和第二成本等式中的每个所考虑的因素是一样的,但分配给每个考虑的因素的权重不同。替代性地,作为另一个例子,在一个成本等式中考虑的因素可以是在另一个成本等式中考虑的因素的某子集。
[0263]仍然在另一个实施例中,仅第一成本等式被评估,并且数据有效载荷的第三实例被存储在,除数据有效载荷的第一实例起初被存储所在的第一处理器模块1478中的第一存储缓冲区1463外,以及除在评估第一成本等式时标识的第二存储缓冲区1463外的任何存储缓冲区1463。
[0264]在一个实施例中,在步骤1520,数据有效载荷的第二、第三及/或另外的实例被分别存储于在步骤1512及/或1516标识的第二、第三及/或另外的存储缓冲区1463。为了使这能够发生,第一处理器模块1478的发送器1495将数据有效载荷的第二、第三及/或另外的实例分别发送至第二、第三及/或另外的存储缓冲区1463。因此,接收到的写操作的数据有效载荷被冗余地存储在存储管理装置1438的一个或更多个存储缓冲区1463中。
[0265]
时钟同步
[0266]通常,在另一个方面,本发明涉及用于同步多个处理器模块的内部时钟的方法和装置。简要综述,在本发明该方面的一个实施例中,多处理器系统(例如,如上所描述的存储管理装置)包括多个处理器模块,其中所述多个处理器模块中的每个都包括其自己的内部时钟。通过将所述处理器模块中的一个指派为具有用于多处理器系统的主内部时钟的主处理器模块,并通过使多处理器系统中其它处理器模块(指派为从属处理器模块)的每个均周期性地将其内部时钟与主内部时钟比较以及必要时校正它的内部时钟,可实现多个处理器模块内部时钟之间的同步。在一个实施例中,从属处理器模块校正它们的内部时钟而不曾导致它们在时间上向后退。
[0267]图23说明了根据本发明该方面的维持基本上一致的运行时钟的多处理器系统1638的一个实施例(例如,存储管理装置,一般而言其拥有上面所描述的存储管理装置的能力,并可被实现为上述存储管理装置,且具有在此所描述的附加功能性)。多处理器系统1638包括多个处理器模块1678、1678′、1678″、1678,其中所述处理器模块中每一个均包括其各自的内部时钟1675、1675′、1675″、1675。再次,在图23的多处理器系统1638中所描述的四个处理器模块1678、1678′、1678″、1678仅仅是说明性的,并且更一般地说,多处理器系统1638可包括任何数目或类型的处理器模块。
[0268]多处理器系统1638的多个处理器模块中一个或更多个的内部时钟(一个或多个)可从其它处理器模块的内部时钟“漂移”,例如由于一个处理器模块相对其它处理器模块升温而导致的处理器模块之间的温差。例如,可能的情况是,处理器模块1678″的内部时钟1675″开始比多处理器系统1638的其它内部时钟1675、1675′、1675″运行得更快并漂离多处理器系统1638的其它内部时钟1675、1675′、1675″。因此,为了同步多处理器系统1638的内部时钟1675、1675′、1675″、1675,并且从而为多处理器系统1638维持可靠的运行时钟,内部时钟1675″被校正,例如,如在此根据本发明该方面所描述的而被校正。
[0269]在本发明该方面的一个实施例中,第一处理器模块,例如如所说明的,处理器模块1678被指派为多处理器系统1638的主处理器模块。主处理器模块1678包括用于多处理器系统1638的主内部时钟。在一个这样的实施例中,每个其它处理器模块(也就是,至少一个其它处理器模块)1678′、1678″、1678被指派为多处理器系统1638的从属处理器模块。每个从属处理器模块1678′、1678″、1678(通称1678′)包括其各自的从属处理器模块内部时钟1675′、1675″、1675(通称1675′)。在一个实施例中,从属处理器模块1678′,根据下面将被描述的方法,周期地将它们的内部时钟与主内部时钟1675比较,并且必要时校正它们的内部时钟。
[0270]现在参照图24,在用于为多处理器系统1638维持基本上一致的运行时钟的方法1700的一个实施例中,从属处理器模块1678′通过迭代地执行方法1700的步骤1704、1708、1712、1716以及必要时执行1720,从而使从属处理器模块内部时钟1675′与主内部时钟1675同步。可选地,还可在步骤1704和1708之后,而在步骤1712、1716和1720之前执行步骤1710。在一个实施例中,方法1700的经由步骤1704、1708、1710(可选地)、1712、1716以及必要时1720的迭代,是由从属处理器模块1675′周期地执行的,例如一秒的每一部分(例如,半秒)或其它时间量。此外,在一些实施例中,在迭代地执行步骤1704、1708、1710(可选地)、1712、1716以及必要时1720之前,从属处理器模块1678′在步骤1702初始化从属处理器模块内部时钟1675′。
[0271]在一个实施例中,为了在步骤1 702初始化从属处理器模块内部时钟1675′,从属处理器模块1678′请求主内部时钟1675的当前时间并在某时段后,接收主内部时钟1675的当前时间。在一个实施例中,如果从属处理器模块对主内部时钟1675的当前时间的请求和接收之间的时段小于第一预先确定的时间量,则从属处理器模块1678′将从属处理器模块内部时钟1675′初始化为接收到的主内部时钟1675的当前时间和从属处理器模块对主内部时钟1675的当前时间的请求和接收之间的时段的一半之和。否则,如果从属处理器模块对主内部时钟1675的当前时间的请求和接收之间的时段大于第一预先确定的时间量,从属处理器模块1678′就丢弃接收到的主内部时钟1675的当前时间并请求在主内部时钟1675的新当前时间。在一些实施例中,从属处理器模块1678′持续丢弃接收到的主内部时钟1675的当前时间并请求主内部时钟1675的新当前时间,直到其接收到的主内部时钟1675的当前时间在第一预先确定的时间量之内。从属处理器模块1678′然后如上所描述的那样初始化从属处理器内部时钟1675′。
[0272]在一个实施例中,第一预先确定的时间量被预存在从属处理器模块1675′的内存296(参见图9)中。此外,第一预先确定的时间量是基于多处理器系统1638的硬件布局可配置的。在一个实施例中,第一预先确定的时间量被设置为落在大约26微秒和大约35微秒之间的具体时间。
[0273]在一替代性实施例中,不是如上所描述那样初始化从属处理器模块内部时钟1675,不执行步骤1702且从属处理器模块1678′代之以计算,如下所描述的,从属处理器模块内部时钟1675′和主内部时钟1675之间的偏移量。
[0274]总之,为使从属处理器模块内部时钟1675′与主内部时钟1675同步,从属处理器模块1678′首先在步骤1704,并且在根据从属处理器模块内部时钟1675′的第一时间,请求根据主内部时钟1675的当前时间。该请求可被以任何对进行请求有用的形式或方式传递。在一个实施例中,例如,该请求以数据分组的形式传递。从属处理器模块1678′还记录根据从属处理器模块内部时钟1675′的第一时间,在所述第一时间进行该请求。随后某时间,在步骤1708,从属处理器模块1678′,在根据从属处理器模块内部时钟1675′的第二时间,接收根据主内部时钟1675的当前时间。根据主内部时钟1675的当前时间可以任何对传递这样的信息有用的形式或方式被传送到从属处理器模块1678′,或由从属处理器模块1678′接收到。例如,根据主内部时钟1675的当前时间可在一数据分组中被传送到从属处理器模块1678′,以及由从属处理器模块1678′接收到。再次,以类似于步骤1704的方式,从属处理器模块1678′记录根据从属处理器模块内部时钟1675′的第二时间,在所述第二时间根据主内部时钟1675的当前时间被接收到。
[0275]可选地,在完成步骤1704和1708之后,而在执行步骤1712、1716以及必要时执行1720之前,从属处理器模块1678′在步骤1710确定根据从属处理器模块内部时钟1675′的第一时间(由从属处理器模块1678′在步骤1704记录)与根据从属处理器模块内部时钟的第二时间(由从属处理器模块1678′在步骤1708记录)之间的差是否小于第二预先确定的时间量。在一个这样的实施例中,如图24所说明的,仅当从属处理器模块1678′确定根据从属处理器模块内部时钟1675′的第一时间与根据从属处理器模块内部时钟1675′的第二时间之间的差小于第二预先确定的时间量时才会执行步骤1712、1716以及必要时,执行1720。否则,从属处理器模块1678′返回到步骤1704。通过照这样进行,从属处理器模块1678′排除对在紊乱的延迟之后接收到的主内部时钟1675的所有当前时间的考虑,并从而防止错误的时钟同步。
[0276]以和上面关于步骤1702所描述的第一预先确定的时间量类似的形式,第二预先确定的时间量可被预存在从属处理器模块1675′的内存296(参见图9)中,并基于多处理器系统1638的硬件布局是可配置的。在一个实施例中,类似第一预先确定的时间量,第二预先确定的时间量被设置为落在大约26微秒和大约35微秒之间的具体时间。
[0277]继步骤1704、1708和,可选地,1710完成之后,从属处理器模块1678′在步骤1712通过使用至少根据从属处理器模块内部时钟1675′的第一时间(由从属处理器模块1678′在步骤1704记录)与根据从属处理器模块内部时钟1675′的第二时间(由从属处理器模块1678′在步骤1708记录)来计算一预计时间。可选地,在一些实施例中,从属处理器模块1678′还在计算预计时间时使用一偏移量,例如如下所描述的。在一个实施例中,计算出的预计时间表示,响应从属处理器模块对根据主内部时钟1675的当前时间的请求,从属处理器模块1678′期望从主处理器模块1 678接收到什么。换言之,在一个实施例中,从属处理器模块1678′假定主内部时钟1675和从属处理器模块内部时钟1675′以相同速度运行。照这样,从属处理器模块1678′期待能够基于请求时间(由从属处理器模块1678′在步骤1704记录)、响应时间(由从属处理器模块1678′在步骤1708记录)以及可选地,任何前面已确定的从属处理器模块内部时钟1675′与主内部时钟1675之间的偏移量(如下所描述的),计算出根据主内部时钟1675′的当前时间。
[0278]在步骤1716,从属处理器模块1678′确定预计时间是否不同于接收到的根据主内部时钟1675的当前时间。如果是,从属处理器模块内部时钟1675′和主内部时钟1675就与从属处理器模块在步骤1712的假定相反,以不同的速度运行(也就是,从属处理器模块内部时钟1675′漂离主内部时钟1675)。可选地,在一个实施例中,从属处理器模块1678′,在执行步骤1716中,确定预计时间与接收到的根据主内部时钟1675的当前时间的差是否超过第三预先确定的时间量。在这样一个实施例中,当从属处理器模块1678′确定预计时间与接收到的根据主内部时钟1675的当前时间的差超过第三预先确定的时间量时,从属处理器模块1678′仅执行步骤1720。否则,如图24所说明的,从属处理器模块1678′返回到步骤1704。通过照这样进行,从属处理器模块1678′不会校正从属处理器模块内部时钟1675′与主内部时钟1675之间的微小的、经常可忽略的偏差。
[0279]再次,第三预先确定的时间量可被预存在从属处理器模块1675′的内存296(参见图9)中,并且是可配置的。较低的第三预先确定的时间量引起从属处理器模块内部时钟1675′与主内部时钟1675之间的更紧密的同步。在一个实施例中,第三预先确定的时间量被设置为大约5微秒。
[0280]在步骤1716,刚一确定预计时间不同于接收到的根据主内部时钟1675的当前时间,或可选地,确定预计时间与接收到的根据主内部时钟1675的当前时间的差超过第三预先确定的时间量,从属处理器模块1678′就在步骤1720校正从属处理器模块内部时钟1675′。在一个实施例中,通过有效地“减慢”或“加快”从属处理器模块内部时钟1675′来实现校正,如下面进一步描述,虽然其它校正技术也可被使用。已完成步骤1720,从属处理器模块1678′然后在贯穿方法1700步骤的下一次迭代中返回执行步骤1704。如果,另一方面,预计时间并非不同于接收到的根据主内部时钟1675的当前时间,或可选地,预计时间与接收到的根据主内部时钟1675的当前时间的差不超过第三预先确定的时间量,从属处理器模块1678′不执行步骤1720,而是,相反地从步骤1716返回至步骤1704以开始贯穿方法1700步骤的下一次迭代。
[0281]一般而言,在多处理器系统比如在图23中所描述的多处理器系统1638中,任何两个处理器模块的内部时钟,比方说主处理器模块1678和从属处理器模块1678′,即使它们可能不会相互漂离,也不会完全在时间上同步,而是在给定时间点,相互相差一定量。在一个实施例中,不在如上所描述的步骤1702中初始化从属处理器模块内部时钟1675′,从属处理器模块1678′代之以计算从属处理器模块内部时钟1675′和主内部时钟1675之间的差或偏移量。该偏移量是在贯穿方法1700的步骤的第一次迭代期间在一时间点上计算出来的,并此后被从属处理器模块1678′用在校正从属处理器模块内部时钟1675′。
[0282]因此,在一个这样的实施例中,在贯穿方法1700的步骤的第一次迭代中,在已完成步骤1704、1708以及可选的1710之后,但在完成步骤1712、1716以及必要时完成1720之前,从属处理器模块1678′计算偏移量。例如,在一个实施例中,从属处理器模块1678′通过从根据从属处理器模块内部时钟1675′的第一时间(由从属处理器模块1678′在步骤1704记录)与根据从属处理器模块内部时钟1675′的第二时间(由从属处理器模块1678′在步骤1708′记录)之和的一半减去接收到的根据主内部时钟1675的当前时间(由从属处理器模块1678′在步骤1708接收),来计算偏移量。实际来说,在这样的实施例中,从属处理器模块1678′假定将对根据主内部时钟1675的当前时间的请求发送至主处理器模块1678所用的时间等于将主处理器模块1678的响应发送回从属处理器模块1678′所用的时间。因此,如果,在这样的实施例中,根据从属处理器模块1678′的内部时钟1675′的时间正好等于根据主处理器模块1678的主内部时钟1675的时间,那么根据主处理器模块内部时钟1675′的第一时间(由从属处理器模块1678′在步骤1704记录)与根据从属处理器模块内部时钟1675′的第二时间(由从属处理器模块1678′在步骤1708′记录)之和的一半应该等于接收到的根据主内部时钟1675的当前时间(由从属处理器模块1678′在步骤1708接收)。如果实际上情况并非如此,那么从属处理器模块1678′的内部时钟1675′偏离了主内部时钟1675。
[0283]此外,在另一个这样的实施例中,在完成偏移量的计算之后,从属处理器模块1678′然后将偏移量用于在贯穿方法1700步骤的第一次迭代中的步骤1712以及贯穿方法1700的步骤的随后迭代中的步骤1712计算预计时间。在一个实施例中,当从属处理器模块1678′贯穿方法1700的步骤迭代时,其不会在贯穿方法1700的步骤的第一次迭代之后再次计算偏移量。
[0284]在方法1700(在此从属处理器模块计算偏移量)的另一个实施例中,从属处理器模块1678′不调整从属处理器模块内部时钟1678′,所以它的时间完全等于根据主内部时钟1675的时间,然而,相反地,从属处理器模块1678′如下所解释的那样在步骤1720校正从属处理器模块内部时钟1675′,以使偏移量不漂移。换言之,从属处理器模块1678′试图保持从属处理器模块内部时钟1675′从主内部时钟1675偏移一定量。在一个这样的实施例中,每个从属处理器模块1678′的目标模式驱动器382(参见图10)使用根据从属处理器模块内部时钟1678′的I/O请求被接收的时间加上或减去为该从属处理器模块内部时钟所计算的偏移量,为接收到的I/O请求的控制信息加上时间戳。因此,在这样的实施例中,多处理器系统1638中每个从属处理器模块1678′使用与根据主内部时钟1675的I/O请求被接收的时间基本相等的时间,来为接收到的I/O请求加上时间戳。然而,注意由于在此所描述的时钟漂移现象,接收到的I/O请求被加时间戳的时间可能不会正好等于根据主内部时钟1675的I/O请求被接收的时间。然而,后一问题是由如下所描述的多处理器系统1638处理的,并且它不影响多处理器系统1638的正常运转。
[0285]在方法1700的更详细的细节中,在一个实施例中,对于贯穿方法1700的步骤的每一次迭代,从属处理器模块1678′,在步骤1712计算预计时间时,首先通过从根据从属处理器模块内部时钟1675′的第二时间(由从属处理器模块1678′在步骤1708记录)减去根据从属处理器模块内部时钟1675′的第一时间(由从属处理器模块1678′在步骤1704记录)来计算迭代的往返时间。此外从属处理器模块1678′可将所计算的贯穿方法1700的步骤的每一次迭代的往返时间存储在,例如,它的内存296(参见图9)中。因此,在贯穿方法1700的步骤的第一次迭代之后的贯穿方法1700步骤的任何当前迭代中,从属处理器模块1678′可通过使用所计算的贯穿方法1700的步骤的当时当前迭代的往返时间,以及通过使用贯穿方法1700的步骤的一个或更多个先前迭代的往返时间,来计算平均的往返时间。
[0286]在一个实施例中,由从属处理器模块1678′计算的平均往返时间只不过是贯穿方法1700步骤的当时当前迭代的往返时间与贯穿方法1700步骤的所有先前迭代的往返时间的平均。在另一个实施例中,由从属处理器模块1678′计算的平均往返时间是贯穿方法1700步骤的当时当前迭代的往返时间与一个或更多个贯穿方法1700步骤的最近的先前迭代的往返时间的移动平均。在又一个实施例中,由从属处理器模块1678′计算的平均往返时间是加权的移动平均往返时间。
[0287]在一个实施例中,在贯穿方法1700的步骤的第一次以及随后每次迭代上,从属处理器模块1678′在步骤1712通过计算根据从属处理器模块内部时钟1675′的第一时间(由从属处理器模块1678′在当前迭代的步骤1704记录)与贯穿方法1700的步骤的该迭代的往返时间的一半之和,以及可选地从其中减去偏移量,来计算预计时间。在另一个实施例中,在贯穿方法1700步骤的第一次迭代之后的一贯穿方法1700步骤的迭代上,从属处理器模块1678′在步骤1712通过计算根据从属处理器模块内部时钟1675′的第一时间(由从属处理器模块1678′在该迭代的步骤1704记录)与所计算的平均往返时间的一半(例如,如上所描述的)之和,以及可选地从其中减去偏移量,来计算预计时间。
[0288]一旦从属处理器模块1678′已计算出预计时间,其然后在步骤1716确定预计时间是否不同于根据主内部时钟1675的当前时间,或可选地,预计时间与根据主内部时钟1675的当前时间的差是否超过第三预先确定的时间量。在一个实施例中,为作出该确定,从属处理器模块1678′首先通过从根据主内部时钟1675的当时当前时间(由从属处理器模块1678′在该迭代的步骤1708接收)减去预计时间(由从属处理器模块1678′在该迭代的步骤1712计算),从而为贯穿方法1700的步骤的每一次迭代计算该迭代的漂移值。此外,从属处理器模块1678′可将贯穿方法1700步骤的每一次迭代的计算漂移值存储在,例如,它的内存296(参见图9)中。因此,如前所述,在贯穿方法1700步骤的第一次迭代之后的贯穿方法1700步骤的任何当前迭代中,从属处理器模块1678′可通过使用贯穿方法1700步骤的当时当前迭代的所计算的漂移值,以及通过使用贯穿方法1700步骤的一个或更多个先前迭代的漂移值,来计算平均漂移值。
[0289]在一个实施例中,由从属处理器模块1678′计算的平均漂移值只不过是贯穿方法1700步骤的当时当前迭代的漂移值与贯穿方法1700步骤的所有先前迭代的漂移值的平均。在另一个实施例中,由从属处理器模块1678′计算的平均漂移值是贯穿方法1700步骤的当时当前迭代的漂移值与贯穿方法1700步骤的一个或更多个最近先前迭代的漂移值的移动平均。在又一个实施例中,由从属处理器模块1678′计算的平均漂移值是加权的移动平均漂移值。
[0290]在一个实施例中,在贯穿方法1700步骤的第一次以及每个随后的迭代上,当该迭代的漂移值是非零的时,从属处理器模块1678′在步骤1716确定预计时间不同于接收到的根据主内部时钟1675的当前时间(由从属处理器模块1678′在当前迭代的步骤1708接收)。在另一个实施例中,在贯穿方法1700步骤的第一次迭代之后的一贯穿方法1700步骤的迭代上,当所计算的平均漂移值,例如,如上所描述的那样是非零时,从属处理器模块1678′确定预计时间不同于接收到的根据主内部时钟1675的当前时间(由从属处理器模块1678′在该迭代的步骤1708接收)。
[0291]刚一确定预计时间不同于接收到的根据主内部时钟1675的当前时间,或可选地,刚一确定预计时间与接收到的根据主内部时钟1675的当前时间的差超过第三预先确定的时间量,从属处理器模块1678′就在步骤1720校正从属处理器模块内部时钟1675′。在一个实施例中,预计时间超过接收到的根据主内部时钟1675的当前时间(或可选地,超过接收到的根据主内部时钟1675的当前时间多于第三预先确定的时间量)的情况下,这意味着从属处理器模块内部时钟1675′已经比主内部时钟1675运行得快,从属处理器模块1678′就通过减慢从属处理器模块内部时钟1675′来校正从属处理器模块内部时钟1675′。在另一个实施例中,在接收到的根据主内部时钟1675的当前时间超过预计时间(或可选地,超过预计时间多于第三预先确定的时间量)的情况下,这意味着从属处理器模块内部时钟1675′已经比主内部时钟1675运行得慢,从属处理器模块1678′就通过加快从属处理器模块内部时钟1675′来校正从属处理器模块内部时钟1675′。
[0292]在一个实施例中,多处理器系统1638包括自由运行的计数器,所述计数器可在单个CPU指令的每次执行时被增加,并且从属处理器模块1678′被配置以通过将自由运行的计数器的计数校准到微秒来实现从属处理器模块内部时钟1675′。从属处理器模块1678′可,例如,起初被配置以设想1微秒等于2800个自由运行计数器的计数(例如,从属处理器模块1678′可,例如,起初被配置以设想1微秒等于执行2800条CPU指令所需的时间,如可能2.8GHz(千兆赫兹)的CPU时钟,以及每一时钟周期执行一条指令的CPU的情况)。因此,在一个实施例中,为减慢从属处理器模块内部时钟1675′,从属处理器模块1678′增加其设想在一给定时间间隔的自由运行计数器的计数数目,而不影响自由运行计数器。同样地,为加快从属处理器模块内部时钟1675′,从属处理器模块1678′可减少其设想在一给定时间间隔的自由运行计数器的计数数目,而不影响自由运行计数器。重要地,在一些这样的实施例中,从属处理器模块1678′以这种形式校正从属处理器模块内部时钟1675′以使其从不在时间上向后退。更确切地,从属处理器模块内部时钟1675′在时间上不断地向前进,如上所描述通过减慢或加快用于校正。
[0293]图25描述了根据从属处理器模块内部时钟1675′的时间与根据主内部时钟1675的时间的关系的示范曲线图1800。在该示范曲线图中,为解释的简单起见,可以假定,如果如上所描述的那样计算,偏移量为零,即使如果实际上如上所描述的那样计算它,它不会一定为零。因此,理想地,如线1804所表示的,根据从属处理器模块内部时钟1675′的时间总是等于根据主内部时钟1675的时间。然而,实际上,从属处理器模块1678′可相对主处理器模块1678发生漂移(例如,由于温度变化),这样从属处理器模块内部时钟1675′比主内部时钟1675运行得快(如线段1808和1812所表示的)。替代性地,主处理器模块1678可相对从属处理器模块1678′发生漂移(例如,由于温度变化),这样主内部时钟1675比从属处理器模块内部时钟1675′运行得快(如线段1816所表示的)。照这样,从属处理器模块1678′根据上面所描述的方法1700,校正从属处理器模块内部时钟1675′,以相对主内部时钟1675“减慢”从属处理器模块内部时钟1675′(如示范线段1816所表示的),或替代性地,相对主内部时钟1675“加快”从属处理器模块内部时钟1675′(如示范线段1812所表示的)。如所描述的,从属处理器模块1678′以这种形式校正从属处理器模块内部时钟1675′以使其从不在时间上向后退。
[0294]在另一个实施例中,图23的多处理器系统1638是网络(未显示)中的服务器。因此,处理器模块,比方说从属处理器模块1678′,可从网络中的另一个计算装置(例如,一主机)接收一个或更多个写操作。在这样一个实施例中,从属处理器模块1678′可在一贯穿方法1700步骤的迭代的步骤1716确定预计时间与接收到的根据主内部时钟1675的当前时间(由从属处理器模块1678′在贯穿方法1700步骤的该迭代的步骤1708接收)的差小于一指定时间量1820,这被显示在图25的曲线1800上并且大于之前描述的第三预先确定的时间量。在这种情况下,从属处理器模块1678′在写操作实际上被完成之前确认接收到的写操作。替代性地,从属处理器模块1678′可确定预计时间与接收到的根据主内部时钟1675的当前时间的差大于指定时间量1820。在这种情况下,从属处理器模块1678′制止对接收到的写操作的确认,直到通过如上参考方法1700所描述的从属处理器模块内部时钟1675′的校正,预计时间再次被确定其与接收到的根据主内部时钟1675的当前时间的差小于指定时间量1820。同样地,就后一情况来说,多处理器系统1638中的所有其它处理器模块可同时制止对接收到的写操作的确认,直到如从属处理器模块1678′所计算的,预计时间再次被确定其与接收到的根据主内部时钟1675的当前时间的差小于指定时间量1820。在这些实施例中,当第一从属处理器模块的内部时钟运行得比主内部时钟1675快并且在正方向漂移到指定时间量1820,而第二从属处理器模块的内部时钟运行得比主内部时钟1675慢并且在负方向漂移到指定时间量1820时,最极端的情况,即多处理器系统1638将持续确认接收到的写操作,就会发生。
[0295]在一个实施例中,指定时间量1820是网络中的主机可请求多处理器系统1638处理第一写操作,其后接收来自多处理器系统1638对请求的确认,以及其后请求多处理器系统1638处理第二写操作的最小时间量的二分之一。在这样的实施例中,假定上面所描述的极端情况,主机可将第一写操作发送至其内部时钟已在正方向漂移至指定时间量1820的第一从属处理器模块,其后接收来自多处理器系统1638的对第一写操作的确认,并其后紧接着将第二写操作发送至其内部时钟已在反方向漂移至指定时间量1820的第二从属处理器模块,并仍保证第二从属处理器模块的目标模式驱动器382(参见图10)将以一个时间为接收到的第二写操作加时间戳,该时间比第一从属处理器模块的目标模式驱动器382(参见图10)为接收到的第一写操作加时间戳所用时间要晚。替代性地,仍在其它实施例中,指定时间量另外可设置为保证在多处理器系统1638中处理接收的写操作的正确次序的任何时间量。
[0296]在又一个实施例中,在多处理器系统1638包括自由运行计数器和主处理器模块1678被配置以通过将自由运行计数器的计数校准到微秒来实现主内部时钟1675的情况下,如上对于从属处理器模块内部时钟1675′所描述的,主处理器模块1678维持一校准表,所述校准表将主内部时钟1675与现实世界时钟联系起来。在一个实施例中,如上所描述的,自由运行计数器上的2800个计数等于现实世界时钟上的1微秒。在一个这样的实施例中,当多处理器系统1638将一时间呈现给网络中主机处的用户时,主处理器模块1678处的校准表首先被查阅以将多处理器系统1638所保持的运行时间转换为现实世界时间。
[0297]
映射产生和使用
[0298]通常,本发明的另外的方面涉及通过使用在指定的过去时间存储在数据存储器中数据的位置的映射(例如,时间映射)产生该数据存储器在过去时间的映象的系统、方法和制品。该映射允许数据存储系统快速高效地地确定在过去时间存储在数据存储器中的数据的位置,而不用搜索有关过去数据位置的记录的整个索引。
[0299]简要综述,在本发明的一个实施例中,数据存储系统包括存储管理装置,所述存储管理装置包括用于接收过去时间规约的接收器,以及用于处理被指引到数据存储器中一个或更多个目标存储单元的I/O请求的I/O处理器。如之前所描述的,在一个实施例中,存储单元是数据存储器块的单字节或多字节群。存储管理装置还包括用于记录由I/O处理器处理的写请求的编索引模块。编索引模块包括内存,所述内存为每一写请求存储一个记录,所述记录可包括:1)目标存储单元的标识;2)之前存储在目标存储单元中的数据的位置;以及3)写时间,其表示写请求被接收的时间。另外,存储管理装置包括映射模块,所述映射模块使用一个或更多个记录来产生在指定过去时间存储在目标存储单元的数据的位置的映射。包含于存储管理装置内的映象产生(image generation)模块至少部分地基于映射模块产生的映射,呈现在过去时间的数据存储器的映象。
[0300]图26说明了根据本发明该方面的一实施例的存储管理装置1938。存储管理装置1938可被集成于在此所描述的数据储存系统中,例如,参考图1、4、5和13描述的数据储存系统。作为一个例子,存储管理装置1938可与主机和物理存储器通信,从而向主机提供对存储在物理存储器中的数据的存取。另外,可使用各种方法来组织存储在物理存储器中的数据并将其呈现给主机。例如,存储管理装置1938可将一个或更多个卷,包括逻辑卷,呈现给主机。并且,如之前所讨论的,存储管理装置1938可向主机提供对与多个数据存储器相联系的一个或更多个当前存储器和一个或更多个时间存储器的存取。另外,如之前所描述的,呈现给主机的映象可以是固定或动态映象。存储管理装置1938还可以实现归因于之前所描述的方面和实施例的存储管理装置的另外的功能性。
[0301]在一个实施例中,存储管理装置1938包括相互通信的接收器1961、处理器1962、编索引模块1995、映射模块1997和映象产生模块1999。这些单元中的每个均可以软件、硬件或软件和硬件两者的某种组合的形式实现。接收器1961,例如,可被实现为图10的一个或更多个主机接口361的一部分。接收器1961,在一个实施例中,被实现于图10的目标模式驱动器382中。接收器1961与主机通信并接收过去时间的规约。过去时间是主机对存储管理装置呈现在过去时间的数据存储器映象的请求的一部分。该请求还可以包括特定的数据存储器的标识,有时还包括逻辑块地址和长度。
[0302]在一个实施例中,对过去时间的数据存储器的映象的请求在带内由接收器1961接收,也就是说,从主机通过与主机传递数据命令时所使用的通信协议(例如,读请求与写请求)相同的通信协议。在另一个实施例中,接收器1961接收带外的请求。例如,接收器1961接收请求是通过与主机传递数据命令时所用的通信协议不同的通信协议,通过不同信道(例如,通过用户接口、物理接口或不同于主机的命令行控制台,例如,系统管理员接口),或通过它们的某种组合。
[0303]处理器1962处理被指引到一个或更多个目标存储单元的I/O请求。处理器1962可被实现于之前在本文所描述的元件之一中。例如处理器1962可被实现于图10的处理器模块378中所显示的一个或更多个元件中。在一个实施例中,处理器1962被实现于图10中所显示的I/O管理器362中。处理器1962处理被指引到数据存储器中存储单元(例如,逻辑块)的I/O请求。作为读或写请求目标的存储单元也被称为目标存储单元。
[0304]如以前所描述的,写请求经常被指引到多个存储单元。在一个实施例中,存储管理装置1938在执行写请求之前重写存储于目标存储单元中的数据之前在目标存储单元上执行写时拷贝操作。所拷贝的数据(也就是,过去的数据)然后被存储管理装置1938移到另一个位置。如所描述的,数据的实际拷贝可能不会在特例中的写操作刚一发生就被执行,这是因为,例如,将被重写的数据已经保存在别处,或因为数据在被写之前被暂时地保存在内存中,或因为数据不是被移动,而是指向该数据的指针被修改。例如在一个实施例中,每个被指引到目标存储单元的写请求可引起数据被写到当前存储器和时间存储器两者。因此,对于紧接着随后的被指引到相同目标存储单元的写操作,执行实际的写时拷贝是不必要的,这是因为过去的数据已被存储在时间存储器中。因此,这里写时拷贝操作可意味着实际的拷贝,而且还可以包括把写时拷贝的效果考虑进去的最优化。如前所述,下面描述的例子通常呈现的存储管理装置1938的操作,就好象写时拷贝总是被执行一样,且要理解的是最优化可被用于实践。
[0305]存储管理装置1938还包括编索引模块1995,所述编索引模块1995在存储管理系统中存储过去数据的位置记录,以便便于随后对用于呈现过去时间的数据存储器的映象的(连同其他用途)过去数据的检索。编索引模块1995还可被实现于软件、硬件或它们的某种组合中,以及例如实现于本文之前所描述的元件之一中。例如,在一个实施例中,编索引模块1995被实现于图10的I/O管理器362之一或更多个中。编索引模块1995包括用于存储位置记录的内存1996。在该实施例的一个版本中,内存1996是编索引模块1995组成部分。在另一个版本中,内存不是编索引模块1995的组成部分,而是在存储管理装置1938内的其它地方,例如,在图10的处理器模块378中的其它地方。功能上,编索引模块1995记录由I/O处理器1962处理的写请求,并在内存1996中存储被处理的每个写请求的记录。该记录包括目标存储单元的标识、之前存储在目标存储单元中的数据的位置、以及表示相应写命令被接收的时间的写入时间。每个写请求可被指引到单个存储单元,例如,一个块,或多个存储单元。然而,由编索引模块存储的记录提供一种机制,通过该机制在指定过去时间存储在每一存储单元中的数据可被定位。在一个实施例中,所述时间是存储管理装置1938接收写命令的时间。
[0306]存储管理装置1938还包括映射模块1997,所述映射模块1997使用由编索引模块1995存储的记录以映射指定过去时间的数据存储器中存储单元的过去数据的当前位置。映射功能性考虑到数据存储器的过去映象的快速产生。映射模块1997可被实现于图10的处理器模块378所显示的一个或更多个元件中。例如,在一个实施例中,映射模块1997被实现于图10所示的I/O管理器362之一或更多个中。功能上,映射模块1997创建指向存储管理系统中位置的指针的列表,例如,指向过去数据在指定过去时间处于物理存储器中的位置。一旦映射被创建,其可被存储管理装置1938存储在一位置,在该位置其可在将来被快速存取以再次呈现在过去时间的数据存储器的映象。在一个实施例中,例如,图10和11的I/O管理器362之一或更多个管理该映射。
[0307]该映射可以是动态的,例如,当附加写请求被处理器1962处理时,其可被更新。通常,这样的更新对在映射被产生的时间之后执行写时拷贝操作时确保该映射保持准确来说是必要的。映射的动态性质将参照图27和28被进一步解释。
[0308]存储管理装置1938还包括映象产生模块1999,所述映象产生模块1999至少部分地基于由映射模块1997产生的映射,来呈现在过去时间的数据存储器的映象。映象产生模块1999还可被实现于图10的处理器模块378中所显示的一个或更多个元件中。例如,在一个实施例中,映象产生模块1999被实现于图10中所示的主机接口361中。
[0309]接收器1961、处理器1962、编索引模块1995、映射模块1997和映象产生模块1999可被实现于分布式体系结构(如图10中所示的)中。在这种方法中,每个处理器模块378均负责处理和编索引被指引到一个或更多个数据存储器中的特定存储单元的写命令。因此,包含于每个处理器模块378中的编索引模块1995为被指引到编索引模块1995负责的存储单元的每一写命令存储记录。当请求过去时间的数据存储器的映象时,每一映射模块1997均为其负责的数据存储器部分(如果有的话)产生在指定过去时间的一映射。该映射是使用存储在相应编索引模块1995中的记录而产生的。至少部分地基于该映射,每个处理器模块378中的映象产生模块1999然后呈现其负责的数据存储器的映象的一部分(如果有的话)。在一个实施例中,每个处理器模块378包括对数据存储器的公共部分(例如,相同的存储单元)负责的编索引模块1995、映射模块1997和映象产生模块1999。
[0310]上面所描述的方法还允许存储管理装置1938包括增加数据存储系统可靠性的内置冗余。例如,两个独立的处理器模块378可被指定以执行上面所描述的对相同存储单元的接收、处理、编索引、映射和映象产生操作。在一个实施例中,第一处理器模块378被用作主处理模块,而第二处理器模块378′作为备份,例如,如果第一处理器模块378发生问题。
[0311]图27说明了用于被指引到数据存储器,由处理器1962处理并由编索引模块1995记录的写请求小集合的记录索引2009。索引2009包括四个记录2010、2010′、2010″和2010,所述四个记录每个分别由唯一的写请求标识符1287、1288、1290和1291标识。每个记录2010标识出相关联的写命令被指引到的目标逻辑单元(LUN),也就是目标LUN标识。另外,每个记录均包括目标LUN之上的存储单元的位置(一个或更多个),被重写的过去数据的位置,以及存储管理装置1938接收到写命令的时间。在图27所示的实施例中,存储单元的位置由与写请求相联系的逻辑块地址(LBA)和长度(也就是,包含目标存储单元的LBA的数目)指示。虽然图27中的每个记录2010包括目标LUN标识,但是该标识可从索引本身被限于单个LUN的记录排除。并且,在图27中,LUN标识被包含在用于每个记录2010的过去数据的位置中。目标LUN和过去数据被存储所在的LUN在图27所示的每一记录2010都不同。例如,图27的每个写请求1287、1288、1290和1291都标识为LUN2502的目标LUN相联系,而与写请求1287、1288和1291相联系的过去数据被存储在LUN2500中,并且与写请求1290相联系的过去数据被存储在LUN2501中。虽然,这些例子呈现写时拷贝操作,其中不同的LUN被用于存储新的数据和过去数据,但是实际上,新的数据和旧数据可被存储在相同LUN上。当目标LUN还被用于存储过去数据时,所有的LUN标识可从每一个体记录排除,例如,在索引本身被限于单个LUN的记录之处。
[0312]至于索引2009中的位置值,在“新的数据”列中左边的第一个值是逻辑块地址(也就是,存储单元),其中相应的写操作开始于所述逻辑块地址。第二个值,“新的数据”列中右边的项是长度,也就是,写操作被指引到的存储单元的数目。在图27中所示的实施例中,在“过去数据”列中最左边的项是过去数据被写入的LUN的LUN标识。出现在“过去数据”列中的中央项,是由于相关联的写时拷贝操作而过去数据开始被存储的逻辑块地址。出现在“过去数据”列中最右边的项,是当过去数据被拷贝以及写到该位置时其所占的存储单元的数目。因此,索引2009提供充足的信息,从而允许系统标识与每个记录2010相联系的新近被写入的数据以及过去数据的特定位置。
[0313]在一个实施例中,存储单元是特定的512字节块,所述512字节块是LUN的一部分,因此长度指示写请求将操作于多少个512字节块上。例如,写请求1287发生在时间(t)6100。它被指引到LUN2502中的目标存储单元,开始于LBA0且长度为17个块。存储在块0-16的过去数据被拷贝并重写到LUN2500的块64-80(也就是,位置64,17)。应该了解的是,其它块长度也可被使用。
[0314]类似地,写请求1288导致LUN2502的块16-20中的数据被复制到LUN2500的位置85-89。在写请求1288执行之后,块16在t=6100以及t=6117已成为两个写操作的目标,而块0-15和17-20中的每个已成为单个写操作的目标。写请求1290是下一个记录的写请求。在其执行之后,LUN2502的块6-9中的数据被拷贝并写到LUN2501的块37-40,并且新的数据被写到LUN2502的块6-9中。在此,块6-9和块16已成为两个写操作的目标,而块0-5、10-15和17-20中的每个已成为单个写操作的目标。写请求1291在处理写请求1290之后被处理。作为写请求1291的结果,块7-10中的数据作为过去数据被写到LUN2500的块46-49,而新的数据被存储在LUN2502的块7-10中。在写请求1291执行之后,块7-9已成为三个写操作的目标,块6、10和16已成为两个写操作的目标,并且块0-5、11-15和17-20每个均已成为单个写操作的目标。
[0315]图28说明了由映射模块1997根据记录2010产生的两个简化示范映射2100、2101,所述记录2010由编索引模块1995存储在索引2009中。所述映射演示由记录2010提供的信息如何被映射模块1997使用,以映射在指定过去时间存储在数据存储器中的数据的位置。为便于解释,所述映射被指引到一数据存储器中的20个存储单元。存储管理装置1938可同任何大小的数据存储器,或任何数目的数据存储器一起被使用,因此应该了解的是,采用存储管理装置1938的数据管理系统将不会限于如该说明性例子中的具有20个存储单元的单个数据存储器。
[0316]通常,映射2100、2101是为指定的过去时间产生的并被显示在产生时间。为准确地反映发生在映射的初始产生之后的写请求,映射可在其初始产生之后被再生或修改。此处,术语“初始产生时间”指的是映射最初被创建的时间。术语“产生时间”指的是,在初始产生时间之后,映射被更新的时间点。映射2100是映射在初始产生时间t=6127的视图。映射2100是响应接收器1961接收对在指定过去时间t=6106的数据存储器的映象的请求而被创建的。在图28所示的方法中,映射2100、2101仅包括关于自指定过去时间以来以成为写请求主体的存储单元的消息。其它存储单元中的数据可被定位而不用映射,这是因为这样的数据仍存在于其原始被写入的存储单元(也就是,当前存储器)中。虽然不限于该方法,但是这样一种实现是有利的,因为它考虑到更快的映射产生以及,因此更快的映象产生。
[0317]在一个实施例中,过去时间的规约是在请求时间从主机提供,并基本上地同时地由接收器1961接收。在该实施例的一个版本中,映射模块1997开始产生映射2100,基本上与接收器1961收到请求是同时的。
[0318]参照存储在图27的索引2009中的时间,写请求1287发生在指定过去时间(t=6106)之前。这些位置记录2010所关心的不是产生映射2100,这是因为,例如,与写请求1287相联系的过去数据的位置到指定过去时间时已经被重写。然而,对于发生在指定过去时间之后以及初始产生时间之前(以及就更新映射来说,在映射产生时间之前)的每个写请求都采用了映射。例如,发生在过去时间之后以及初始产生时间之前的写请求1288和1290中的每一个。因此,映射模块1997将使用与写请求1288和1290相联系的记录2010来产生映射2100。那些发生在产生时间之后的写请求,当然,当映射2100被产生时可能仍不存在。这是真实的,例如在映射2100基本上与请求同时产生的情况下,这是因为在这样的情况中,写请求还没有发生。然而,如下更详细地描述的,映射模块1997可更新现有映射2101以反映发生在映射的初始产生时间之后的写请求的处理(和相关联的写时拷贝操作)。
[0319]在图28中,映射2100包括指向存储单元的过去数据的位置的指针,所述存储单元自指定过去时间t=6106以来已成为写请求主体。因此,块6-9被映射到LUN2501的块37-40,且块16-20被映射到LUN2500的块85-89。映射模块1997使用存储在索引2009(图27)中的信息以产生映射。在图28中所示的实施例中,块0-5和块10-15的存储单元未被包含在映射中,这是因为那些存储单元自指定过去时间t=6106以来未成为写命令的目标,因此它们仍可直接从当前存储器得到。
[0320]第二映射2101说明通常映射可如何随时间变化以反映在初始产生时间之后的写请求的处理。例如:如果存储单元之前未被映射,那么一指针就被加到那些成为后续写请求目标的存储单元的映射。在本例中,映射2101具有产生时间6131,所述产生时间6131反映写请求1291。写请求1291对LUN 2502中的块7、8、9和10起作用。因此,块10提供了映射更新所应用的一个位置例子。块10表示指针的添加,这是由于写请求1291而需要的指针添加。所述指针反映这样的事实,在指定过去时间t=6106存储在块10中的数据已被移动,并且此刻存储在LUN2500的块49中。映射2101的其余部分,包括块6-9的映射,自第一映射2100以来保持不变。块6-9的映射保持未改变是因为,虽然在时间t=6130,写时拷贝操作被执行于块6-9上,但其不影响在指定过去时间t=6106存储在块6-9中的数据的位置。该数据仍然存储在LUN2501的块37-40中。
[0321]映射2100和2101可被存储于允许已映射的数据范围的高效检索的任何结构中。在一个实施例中,映射2100和2101被存储在二叉树中以允许包含在映射中的块的快速标识,并定位自指定过去时间以来已被重写的存储单元的数据来源(当前位置)。在另一个实施例中,映射被存储在B+树中。在这些实施例中每一个的版本中,查找树的每个节点均包括一指针,该指针指向该范围的数据来源。数据库、文件及其他结构也可以用来存储映射。
[0322]为便于解释,第二映射2101被认为是在t=6131产生的。然而,应该认识到,映射2101不必全部是新产生的。映射2101可以是新产生的,但其还可以是对映射2100的更新或修改的结果。因此,映射2100和映射2101可独立并行地存在,或映射2101可替换映射2100。此外,存储管理装置1938可以响应在初始产生时间之后被编索引的写请求而自动地产生映射更新。另外,前面有关图26-28的描述描述了用于存储包含在数据存储器中数据的单个目标LUN的使用。再次,应该理解的是,在一些实现中数据存储器可包括多个LUN(所述LUN是写请求的目标)上的数据,存储过去数据,或其组合。另外,数据存储器可包括时间存储器和当前存储器,所述时间存储器和当前存储器每个均包括存储在多个LUN上的数据。
[0323]在一个实施例中,存储管理装置1938在请求指定过去时间的映象之处开始处理映射。然而,产生映射可能是耗时的,因此在一个实施例中,存储管理装置1938使用映射来响应对包含在该映射中的存储单元的请求,并搜索索引2009查找未包含在该映射中的存储单元的位置。如果存储单元被包含在索引记录2010中,那么该信息被包含在该映射中以作日后参考。如果存储单元未被包含在该索引中,也在该映射中产生一记号。
[0324]当映射是完整的,因此全部的适当索引记录2010已经被加入到该映射时,存储管理装置1938就不再需要查阅该索引2009,并可仅引用该映射。同样地,映射中用于指示数据位于当前存储器中的明确项可从该映射中移除,以使其更有效率。
[0325]在另一个实施例中,标记或其它指示符被用于标识完整的映射。在该实施例的一个版本中,直到映射2100被建立时,索引2009才被用作将被用于产生映象的数据位置的来源。一旦映射2100完成,其被用作将被用于产生映象的数据位置的来源,并且索引不再被使用。在该实施例的一个版本中,未包括在映射中的存储单元不会被作记号。
[0326]
用于处理I/O请求的系统
[0327]通常,本发明另外的方面涉及用于处理I/O请求的系统和方法。简要综述,在本发明的一个实施例中,系统处理被指引到至少一个逻辑存储单元的I/O请求。该系统包括用于存储多个有序的操作集合的操作内存,每个集合均与一I/O请求相联系。该系统还包括与操作内存通信的处理器,其用于将存储在操作内存中的操作排列为第一队列或第二队列。第一队列和第二队列与处理器通信。第一队列基于目标逻辑单元的标识对操作进行排队。第二队列基于操作类型基础上对操作进行排队。
[0328]通常,在一个实施例中,与一请求相联系的第一操作被放置在与一个或更多个LUN或一个LUN的一部分相联系的队列上。该操作在LUN队列上被排队,直到在对被指引到重叠存储单元(如被排队的请求被指引到的存储单元)的请求的处理中没有其它操作(例如,重叠可以是两个请求被指引到一个或更多个相同存储单元之处)为止。换言之,在该实施例中,一操作从LUN队列被拿掉,并且只有当在处理中没有对当时的重叠存储单元的操作时才会被处理。与请求相联系的第一和其余操作可随后被处理,而不用关心与其它操作重叠。用于多个请求的操作可被,例如,批量处理以提高效率。其余操作可被有序地放置在操作特定的队列上,以便于这样的批量处理。因此,所描述的两种类型的队列促进了请求的处理而没有地址冲突。
[0329]图29说明根据本发明该方面的用于处理I/O请求的系统。主机2234通过存储管理装置2238与物理存储器2236通信。物理存储器2236可包括一个或更多个逻辑单元(LUN),例如,LUN 1到LUN X。存储在这些LUN中的数据可通过存储管理装置2238被呈现给主机2234。存储管理装置2238通过第一通信链路2240与主机2234通信。存储管理装置2238通过第二通信链路2242与物理存储器2236通信。如同之前所描述的方面一样,第一通信链路2240可以是任何类型的数据通信链路,例如LAN、存储网络或包括光纤信道和小型计算机系统接口(SCSI)的总线。以太网(例如,吉比特以太网)和无线通信是可用于第一通信链路2240的其它可能。在一个实施例中,存储管理装置在逻辑层传递SCSI协议,并且能使用各种物理层的一个或更多个来传递,所述物理层包括SCSI总线、光纤信道、光纤信道2或以太网上的iSCSI。在通信链路2240上,响应主机2234的/O请求,存储管理装置2238所起的作用就好象其是物理存储器2236一样。主机2234的I/O请求可包括对存储单元的读和写请求。
[0330]一旦从主机2234接收到I/O请求,存储管理装置2238就产生操作的有序集合,所述操作被有序地处理以执行该I/O请求。在一个实施例中,例如,被指引到一存储单元的写请求导致五个操作的有序集合,其包括:1)读存储在目标存储单元中的现有数据;2)将现有数据写至另一个位置;3)为在步骤2执行的操作建立索引;4)将新的数据写至目标存储单元;以及5)释放该写请求,例如,产生一肯定应答或确认:该写请求被完成。另一个例子是导致两个操作的有序集合的读请求。第一操作是读存储在目标存储单元的数据,并且第二步骤是释放该读请求。在其它实施例中,上面所描述的I/O请求被修改以包括对若干系统配置有利的额外操作。例如,如上所描述的,写请求可包括被指引到更新时间映射的操作。在其它实施例中,作为最优化的一部分,与I/O请求相联系的操作的数目可被减少或重排序。
[0331]存储管理装置2238的硬件和软件体系结构对高效处理操作的有序集合是有利的。存储管理装置2238包括通过内部网络2280相互通信的操作内存2296、处理器2262、LUN队列2221以及操作-类型队列2222。在一个实施例中,LUN队列2221包括每一相应LUN的独立队列,所述LUN包含在物理存储器2236中,例如,LUN 1到LUN X。操作一类型队列2222包括用于基于将被排队的操作的类型组织操作的独立队列。例如,编索引队列被用于存储来自多个有序集合的索引操作。另外,操作一类型队列不是专用于单个LUN;因此,编索引队列及其他操作一类型队列可存储被指引到多个LUN的操作。功能上,在一个实施例中,在每一有序操作集合中的第一操作被排列在适当的LUN队列中。每一有序操作集合中第一操作之后的操作不被排列在LUN队列中。作为替代,随后的操作被排列在操作-类型队列中。
[0332]图30说明了本系统的一个实施例所采用的通用处理。在步骤2304,存储管理装置2238接收来自主机2234的I/O请求。例如,在一个实施例中,主机接口361(图10)接收I/O请求。在步骤2305,存储管理装置2238产生与该I/O请求相联系的有序操作集合。然后,在步骤2306,来自操作的有序集合的第一操作被放入LUN队列,所述LUN队列负责作为接收到的I/O请求目标的LUN。第一操作从队列中被拿掉并被处理。在步骤2307,有序集合中随后的操作被处理。在一个实施例中,可用之前在本文描述的实施例来完成这些步骤的执行。例如,通常,每一步骤均可在处理器模块378(图10)中执行。更具体地说,在该实施例的一个版本中,I/O管理器362执行步骤2305并产生操作的有序集合,而且LUN队列和操作-类型队列可被实现于内存296(图9)中,所述内存296可以包含或可以不被包含在I/O管理器362中。在一个实施例中,第一操作之后的有序集合中的操作被存储在内存中,而第一操作被存储在LUN队列中。一旦第一操作被处理,来自有序集合的第二操作就从内存被拉出并被放入与第二操作对应的操作类型的操作-类型队列。一旦第二操作被处理,来自有序集合的第三操作就从内存被拉出并被存储在与之对应的操作类型的操作一类型队列中。对于与I/O请求相联系的每一操作,重复将一操作从操作内存2296拉出,将其存储在适当的队列中,处理该操作,以及将有序集合中的后续操作拉入适当的队列中的步骤,直到由I/O请求产生的全部操作都被完成。
[0333]现在参照图31,其说明了与I/O请求对应的表项2410的表格2407。每个表项均包括存储管理装置2238接收I/O请求的时间、I/O请求的标识、目标LUN的标识(例如,LUN#)、受I/O请求影响的逻辑块地址(或其它存储单元) (例如,目标存储单元)、I/O请求类型,以及由于I/O请求而产生的有序操作集合。存储管理装置2238能够处理与1千兆字节或更大的数据储存系统相联系的极大量的I/O请求。然而,该说明性表格呈现一信息的小集合,用于解释的目的。表格2407中的表项覆盖一段时间,至少从t=6100到t=6130。两种类型的I/O请求被包含在表格2407中,也就是,读请求(1290)和写请求(1286、1287、1288、1289和1291)。然而,本系统可处理各种I/O请求比如对修改历史的请求。另外,I/O请求已在表格2407覆盖的时间段中被指引到两个不同的LUN,也就是,LUN 2502和LUN 2503。
[0334]表格2407包括与每个I/O请求相联系的有序操作集合。在标号为1-5的列中操作集合以它们被处理的次序出现。例如,I/O请求1288是包括五个有序操作的写请求:1)读目标存储单元中的现有数据;2)将现有数据写至另一个位置;3)为在步骤2中执行的操作建立索引;4)将新的数据写至目标存储单元;以及5)释放该写请求。在另一个实施例中,写请求包括不同的有序操作集合。例如,在使用时间映射的系统中,写请求可包括六个有序操作:1)读目标存储单元中的现有数据;2)将现有数据写至另一个位置;3)为在步骤2中执行的操作建立索引;4)将新的数据写至目标存储单元;5)必要时更新一个或更多个时间映射;以及6)释放该写请求。此外,可通过将所述有序操作中的一个或更多个分成子操作来扩展I/O请求-类型中的有序操作的数量。例如,紧接的前面有序集合的操作5可被分成被指示确定一时间映射是否在之前已产生的一个操作,以及被指示映射更新的另一操作。另外,所述步骤可无序执行,例如,如本文参考最优化所描述的。
[0335]图32提供一简化图,所述简化图此刻将通过使用图31的简化例子而被用于解释存储管理装置2238的操作,所述存储管理装置2238包括LUN队列和操作-类型队列。图32的表格中的数据与图31的表格2407中的信息对应。最左列中的信息表示存储管理装置2238接收到相关联的I/O请求的时间。标号为LUN 2502和LUN 2503的列表示两个LUN队列。图32的右半边描述了操作-类型队列。其中显示了四种类型的操作-类型队列:1)将现有数据从目标存储单元写至另一个位置的操作队列(这些队列还被称为“写-现有数据”队列);2)索引队列,其用于将记录由完成前面的写操作而产生的位置的操作排队;3)写新数据队列,其用于将新的数据写至目标存储单元的操作排队;以及4)释放队列,其用于将指示有序集合中的前面操作已完成的操作排队。
[0336]所述队列的内容表示来自表格2407中显示的操作的有序集合的各个操作。每个操作均由产生该操作的I/O请求标识,以及连字符的右边,操作在其所属有序集合中所占的位数来表示。因此,从I/O请求1286产生的操作的有序集合中的第四操作(也就是,写新数据操作)在图32中表现为1286-4。作为另一个例子,由于I/O请求1288而产生的操作的有序集合中的第一操作被表示为1288-1。
[0337]在时间t=6100,I/O请求1286由存储管理装置2238收到。由于I/O请求1286产生操作的有序集合(也就是,1286-1、1286-2、1286-3、1286-4、和1286-5),所述操作的有序集合对应图31中显示于t=6100的操作集合。来自该有序集合的操作被存储在操作内存2296中。从该有序集合中的第一操作开始,该有序集合的每一操作均被移入一队列中,一次一个,并被处理。因此,在t=6100,操作1286-1被放入LUN2502队列中而操作1286-2、1286-3、1286-4和1286-5被存储在操作内存2296中。第一操作(操作1286-1)存储在LUN2502队列中,这是因为I/O请求1286被指引至LUN2502。
[0338]在图12中,存储管理装置2238的处理状态然后在t=6119被查看。到此时,存储管理装置2238已接收了两个另外的I/O请求,也就是,1287和1288(分别在t=6114和t=6117)。并且,操作1286-1(也就是,读存在于目标存储单元中的数据)已被处理。因此,操作1286-2已被标识并存储在写一现有数据队列中。因为操作1286-1被处理,所以它不再被存储在LUN 2502队列中。然而,请求1287和1288两者都被指引到LUN2502。因此,LUN 2502队列此刻包括来自这两个未决(pending)I/O请求中每一个的第一操作。这两个操作将被按次序执行,所述次序是它们由存储管理装置2238接收的次序,也就是,只要在对重叠存储单元的处理中没有请求,1287-1后面就是1288-1。
[0339]存储管理装置2238可包括在此更详细地描述的这样的查找树、算法及其他系统和方法,从而高效准确地处理I/O请求。在一个实施例中,存储管理装置2238使用重叠检测进程来确定新接收到的I/O请求是否把任何存储单元作为目标,所述存储单元还是当前正被处理的一个或更多个I/O请求的目标。如果是这样的话,有序集合中新接收的I/O请求的第一操作将被保持在适当的LUN队列中直到前面I/O请求的所有操作都被处理。然而,如这里,在新接收的I/O请求(也就是,1287和1288)没有如之前接收的I/O请求(一个或更多个)(例如,1286)一样把任何相同的目标存储单元作为目标的情况下,存储管理装置2238可一起处理多个有序集合中第一操作之后的操作(例如,1286、1287和1288)。为了便于之前描述的处理,存储管理装置2238可包括在此更详细地描述的系统和方法,从而批量处理排在操作-类型队列中的操作。因此,操作可被保持在操作-类型队列中直到它们被其它相同类型的操作加入队列,从而提高存储管理装置2238的总体处理速度和效率。
[0340]在时间t=6122,存储管理装置2238已处理操作1286-2(写现有数据),并确定请求1286、1287和1288被指引到目标LUN 2502的不相重叠的部分,顺序地处理操作1287-1和1288-1,以及接收到另外两个I/O请求(也就是,1289和1290)。来自每一新接收的I/O请求的第一操作(也就是,1289-1和1290-1)被存储在LUN 2502队列中。当操作1287-1和1288-1被处理时,它们从LUN队列中被除去。操作1286-2已从写现有队列被除去,并且操作1286-3已从操作内存2296被拉出并被存储在索引队列中。类似地,操作1287-2和1288-2已从操作内存2296被拉出并被存储在写现有队列中。
[0341]队列在t=6124的视图示范了上面所描述的批量处理方法的简化例子。在t=6122和t=6124之间,操作1287-2和1288-2从写现有队列被除去并被一起处理。结果,操作1287-3和1288-3从操作内存2296被弹出并被存储在索引队列中,在所述索引队列中它们加入仍未被处理的操作1286-3。关于LUN队列中的操作,操作1289-1被处理,并因此,操作1289-2从操作内存2296被弹出并被存储在写-现有数据队列中。然而,因为在作为I/O请求1289和1290目标的存储单元中存在重叠(也就是,如图31所列的块26-28),操作1290-1直到I/O请求1289的所有操作都被处理才会被处理。同时,操作1290-1保持在LUN 2502队列中,并且操作1290-2、1290-3、1290-4和1290-5将保持在操作内存2296中。
[0342]索引队列中的三个操作(也就是,1286-3、1287-3和1288-3)此刻被一起处理。在三个索引操作完成之后,相应的写新数据操作(也就是,分别是1286-4、1287-4和1288-4)从操作内存2296被弹出并在t=6125被存储在写-新数据的队列中。并且在t=6125,被指引到LUN2503的I/O请求1291由存储管理装置2238收到。来自由于请求1291而产生的有序集合的第一操作被存储在LUN 2503队列中。此外,在t=6125,没有队列中的其它操作被指引到LUN 2503;因此,操作1291-1被存储为LUN 2503队列中的第一操作。随后的操作(也就是,1291-2、1291-3、1291-4和1291-5)被存储在操作内存2296中。在这个时候,在图32中所显示的两个LUN队列中的每一个均包括单个操作。虽然操作1291-1在稍后时间被接收,但它可在操作1290-1之前被处理,这是因为在LUN 2503队列中在1291-1之前没有操作,并且在本例中,没有LUN2503的操作在处理。相比之下,操作1290-1将保持在队列中直到与I/O请求1289相联系的所有操作都被完成(也就是,1289-2、1289-3、1289-4和1289-5)。
[0343]在时间t=6127,由于在t=6125已将每一操作存储在操作-类型队列中,操作1291-1已被处理。作为该处理的结果,操作1286-5、1287-5和1288-5从操作内存2296被弹出并被移至释放队列。在这时候,与I/O请求1286、1287和1288相联系的操作不再被存储在操作内存2296中。并且,操作1289-4从操作内存被弹出并被存储在写-新数据队列中,而且操作1291-2从操作内存被弹出并被存储在写-现有数据队列中。根据本例应该理解,操作-类型队列可被用于服务多个LUN。例如,操作1291-2可与被指引到LUN 2502或任何其它LUN的组合的操作一起被处理(包括批量处理),所述LUN正由存储管理装置2238服务。
[0344]到时间t=6129,示例I/O请求的第一个请求被完成。释放操作1286-5、1287-5和1288-5被一起处理。每个释放操作均提供系统肯定应答,即相关联的I/O请求被完成。一旦释放操作被处理,相应的I/O请求就被完成,并且LUN队列和操作-类型队列都不存储任何与已完成的I/O请求相联系的操作。因此,在t=6129,操作-类型队列仅包括索引队列中的操作1291-3,和释放队列中的1289-5。因为I/O请求1289的处理未完成,所以操作1290-1保持在LUN 2502队列中。
[0345]现在参照图33,在系统元件的功能描述中,存储管理装置2538包括操作产生器2525。操作产生器2525接收源自主机2534的I/O请求。如之前所描述的,对于每个I/O请求,有序操作的集合由I/O请求类型决定。在一个实施例中,操作产生器2525在刚一接收到I/O请求时就确定I/O请求类型。基于I/O请求类型,操作产生器2525从每个从主机2534接收的I/O请求提取有序操作集合。在一个实施例中,操作产生器2525被包含在存储管理装置2538的处理模块378(图10)中。在该实施例的一个版本中,操作产生器被包含在图10的目标模式驱动器382中。存储管理装置2538还包括操作池2524,所述操作池存储在操作被移到队列之前所提取的每一操作。在一个实施例中,操作池2524被包含在操作内存2296中。在该实施例的一个版本中,操作内存被包含在图10的缓冲区363中。
[0346]存储管理装置2538既包括LUN排队模块2521又包括操作-类型排队模块2522。LUN排队模块2521从操作的每一有序集合,从操作池2524接收第一操作,并将其存储在其被处理的适当LUN中。在图33中所示的实施例中,LUN排队模块2521包括处理管理模块2526。在一个实施例中,通常,处理管理模块2526管理存储在LUN队列中的操作的处理。更具体地说,处理管理模块2526确保存储在LUN队列中的操作以这种方式处理,以使当有序集合中随后的操作被拉到操作-类型队列时,它们相对存储在操作-类型队列中的任何其它操作是幂等的。处理管理模块2526所使用的处理本文的其他地方被更详细地描述。然而,在一个实施例中,处理管理模块2526采用搜索树数据结构来组织存储在LUN队列2221中的操作的执行次序。在另一个实施例中,处理管理模块采用公平算法来确保被指引到接收低容量I/O请求的LUN的操作及时地得到处理。在该实施例的一个版本中,处理管理模块2526监控每个未决操作存储在LUN队列中的时间量。
[0347]操作-类型排队模块2522接收来自操作池2524的每个有序集合中第一操作之后的操作并将它们存储在适当的操作-类型队列中。操作-类型排队模块还包括批处理模块2528。批处理模块2528可被用于最优化存储在操作-类型队列中的操作的处理。例如,两个被指引到相邻的存储单元的未决操作可在单批中处理,从而减少必须由物理存储器执行的读写操作的数量。因此,为了增加总体处理速度,批处理可包括延迟未决操作的处理直到获得较大的批量。
[0348]存储管理装置2538还包括编索引模块2523。编索引模块2523产生由于写时拷贝操作而被移动的数据的位置记录。编索引模块2523可被包含在图10的I/O管理器362中。在一个实施例中,索引队列(例如,如图32中所示)存储在编索引模块2523中产生记录创建的操作。
[0349]
重叠检测
[0350]根据所公开技术的至少一些方面实现的存储管理装置可通过高效地处理被指引到来自企业内主机处理器的特定逻辑存储单元及/或其部分的I/O请求,从而提高企业信息技术基础结构的性能。和传统的存储交互作用要求主机处理器(或处理线程)等候完成对存储装置的I/O请求相对比,所公开的技术使存储管理装置能够向主机处理器确认I/O请求的完成,在此,至少若干这样的I/O请求实际上未被完成,而是被排队(基于,例如,它们的接收时间和它们的目标逻辑存储单元),并且在此,相应操作的排队顺序已被最优化以使操作的执行最小化磁盘存取的次数并因此改进了企业存储系统的性能。
[0351]作为这种最优化的非限制例子,响应于接收对准逻辑存储单元中特殊位置的写请求,和随后的对准相同(或部分重叠)位置的读请求,并入所公开技术至少一些方面的存储管理装置可确定在所述请求之间存在重叠,并抑制读请求执行直到写请求被完成之后。作为另一个例子,如果检测到重叠,通过使用临时存储中的数据,读取就可在写完成之前被服务,例如,所存储的数据可随后从RAM(而不是从相对低速的磁盘)被读取,由此减少磁盘存取的总次数。
[0352]并且,在一些I/O请求处理中,比如本文其它地方所描述的,可通过将I/O请求的并行处理(例如,而不是作为特殊最优化的一部分)限制到被指引到不相重叠的存储单元(例如,块)的I/O请求来增强I/O请求的处理。因此可通过高效地确定是否存在被指引到重叠存储单元的I/O请求,而不用,例如,对所有未决I/O请求进行审阅,以及使用该信息确定一I/O请求是应该被处理还是被排队,从而改进这样的处理。因此,除启用如上所描述的最优化之外,高效地提供有关作为未决I/O请求目标的位置的信息资源(比如列表、数据库、树状结构、链接表或其它资源)可允许存储管理系统更高效地处理I/O请求,这是因为存储管理系统可将并行处理限制到把不相重叠的存储单元作为目标的I/O请求。
[0353]现在参照图34,说明性的存储管理装置(未显示)可包括一个或更多个软件进程2602(例如,调度程序软件进程),所述软件进程2602接收并存储与特定的逻辑存储单元2612、2614或其部分相联系的请求队列2608、2610中的I/O请求2604、2606,这种请求2604、2606把所述逻辑存储单元2612、2614或其部分作为目标。特定请求队列2608内的I/O请求2604优选被组织以确保请求2604以它们被接收的次序(例如,在时间T1接收到的I/O请求1 2604′被安置在在随后时间T2接收到的I/O请求2 2604″之前)被处理(或安置在队列2608内)。请求队列2608、2610还可以优选地被配置以存储与特定逻辑存储单元2612、2614或其部分相联系的请求2604、2606。特定2608队列中的I/O请求2604对准逻辑存储单元2612中的各种重叠及/或不相重叠的地址范围。例如,与被指引到逻辑存储单元2612的I/O请求2604′相联系的地址范围(地址0到地址15)2616′可与另一个与另一个I/O请求2604相联系的地址范围(地址8到地址11)2616重叠。类似地,与I/O请求2604′相联系的地址范围(地址0到地址15)2616′可不同于与另一个I/O请求2604″相联系的地址范围(地址16到地址32)2616″并因此前者不与后者重叠。
[0354]排队的I/O请求2604、2606可进一步与一个或更多个操作序列2618联系起来,所述操作序列指定某些操作2620应该被执行的顺序以履行相应的I/O请求2604、2606。调度程序软件进程2602可组织与相应的操作队列2622中的排队的I/O请求2604、2606相联系的操作2620,并可用最优化与作为目标的逻辑存储单元2612、2614相联系的存储装置的性能的方式(比如通过,例如最小化对这样的存储装置的磁盘存取次数)来进一步执行这样的排队操作2620。为了确保排列在一个或更多个操作队列2622中排队的操作2620以和相应I/O请求2604、2606接收时间一致的以及引起性能最优化的方式执行,调度程序软件进程2602可搜索排队数据结构2624(例如,二叉树及/或其它类型树形数据结构)以确定操作2620是否与不相重叠的地址范围(例如,2616′和2616″)联系在一起或是否一个或更多个操作2620与重叠的地址范围(例如,2616′和2616)联系在一起。如果地址范围2616重叠,那么调度程序软件进程2602拆分二叉树2624内的一个或更多个节点2626,以使每个节点2626均与不相重叠的地址范围相联系。
[0355]在一个说明性实施例中,可根据所公开技术的至少一些方面而被调度程序软件进程2602搜索的二叉树数据结构2624中的每个节点2626可包括:逻辑存储单元2612的标识符、指向I/O请求2604列表(例如,链接表)的指针、指向一个或更多个操作序列2618的指针及/或标识符、指向操作序列2618内特定操作2620的指针及/或标识符、指向逻辑存储单元2612内不相重叠的地址范围2616的指针、指向父节点的指针(如果父节点存在,否则指向空)及/或指向子节点的指针(如果子节点存在,否则指向空)。与每个节点相联系的数据和指针不仅被用于形成树形数据结构2624内的相互关系,而且被用于当确定特定I/O请求2604及/或相关联的操作2620是否被指引到逻辑存储单元2612或其部分内的重叠/不相重叠的地址范围2616时,促进通过调度程序软件进程2602对有关数据的搜索与取回。
[0356]在一个说明性操作中,并且现在参照图35,存储管理装置(未显示)的调度程序软件进程2602从一个或更多个主机接收被指引到一个或更多个逻辑存储单元2612、2614或其部分的I/O请求2604、2606。调度程序软件进程2602为每个逻辑存储单元2612建立一个请求队列2608,如果这样的请求队列2608已经不存在,并且所述调度程序软件进程2602根据把这样的逻辑存储单元2612作为目标的I/O请求2604被接收的时间来存储所述I/O请求2604(或与此关联的标志)(2702)。调度程序软件进程2602评估排队的I/O请求2604以获得及/或形成上面所讨论的数据和指针,所述数据和指针用于形成排队数据结构2624的节点2626,以使每一节点2626均与不相重叠的地址范围2616联系起来(2704)。
[0357]作为非限制的例子,调度程序软件进程2602可提取及/或形成与一个或更多个逻辑存储单元2612、排队的I/O请求2604、与I/O请求2604相联系的操作2620和操作序列2618、由I/O请求2604指定的地址范围2616相联系的标识符及/或指针,及/或否则获得任何其它对形成二叉树数据结构2624的节点2626是必需的或所希望的信息。如果两个或更多排队的I/O请求2604对准重叠的地址范围2616,那么调度程序软件进程2602可形成包括相应不相重叠的地址范围的节点2626。例如,如果第一I/O请求2604′对准第一逻辑单元2612的地址范围2616′(地址0到15),并且第二I/O请求2604对准重叠的地址范围2616(地址8-12),然后调度程序2602,例如,可形成关联的地址范围不相重叠的三个节点,也就是,第一节点可与地址0到7(所述地址进一步与第一I/O请求2604′相联系)相联系,第二节点可与地址8到12(所述地址进一步与第一和第二I/O请求2604′、2604相联系)相联系,以及第三节点可与地址13到15(所述地址进一步与第一I/O请求2604′相联系)相联系。照这样,调度程序2602确保每个节点均与逻辑存储单元内明显不同的不相重叠的地址范围对应,而不管I/O请求是指定重叠还是不相重叠的地址范围。一旦节点2626形成,调度程序2602将所述节点安排到使用例如指向其它节点的父指针及/或子指针的数据结构2624(例如,二叉树)中,所述数据结构2624可以,但是不需要显示出逻辑存储单元2612内基本上相邻的地址范围2616(2706)。
[0358]调度程序2602可通过首先搜索二叉树2626以证实没有具有重叠地址范围的I/O请求被包含在该请求前面的其节点2626内,从而执行与I/O请求2604相联系的操作2620(2708)。通过如上所描述的那样排队操作队列中的操作,与请求相联系的操作的执行可分级进行。例如,与I/O请求相联系的写操作可被执行,而另一个被指引到在随后出现的I/O请求中指定的相同或重叠地址的写操作可在第一写操作完成之后被执行,以使两个请求的处理以有序的方式发生。
[0359]在一个实施例中,由调度程序2602排队的操作2620是基于一批或更多批在特定的时段接收到的I/O请求2604。在另一个实施例中,由调度程序2602排队的操作2620可在I/O请求被接收时基本上实时地发生。在又一个实施例中,调度程序2602起初可用批量模式排队操作2620,并随后基于基本上实时接收的I/O请求2604重新排列操作队列2620。不管所实现的特定排队方法如何,调度程序2602可通过如相应的I/O请求2604被添加、处理及/或移动的那样来添加、移动及/或拆分所述二叉树数据结构内的节点,从而维持并更新二叉树数据结构2624。例如,调度程序2602可从二叉树2624移动一个或更多个节点2626,如果相应的I/O请求完成以及这样的节点没有另外与其它迄今未执行的I/O请求相联系(2710)。如果新的I/O请求被接收并且未被指引到与那些已在二叉树2624中的地址重叠的地址,那么调度程序2602可通过形成与新的I/O请求的不相重叠的地址对应的新节点来扩展二叉树2624,并可将这样的新节点添加至二叉树2624,这可(但是不需要)随后引起操作队列2622内操作的重排。如果新的I/O请求被接收并且对准与那些已在二叉树2624中的地址重叠的地址,那么调度程序2602可将二叉树中的一个或更多个现有节点2626拆分成多个节点以确保二叉树2624中每个节点2626均包含不相重叠的地址(注意拆分节点比创建新的节点和将新的节点结合到二叉树2624中快)(2714)。
[0360]以这个方式,二叉树2624基本上保持最新并可支持调度程序2602正在进行的排队操作,尤其是确定新近接收的I/O请求是否与重叠操作2620地址的地址相联系,所述操作2620已被排在一个或更多个操作队列2622中。当接收到新的I/O请求,调度程序2602可快速搜寻二叉树2624的节点2626以确定在新的I/O请求指定的地址范围中是否存在相对于与现有及/或已排队请求及/或操作相联系的地址范围的任何重叠。如之前所讨论的,与新近接收的I/O请求相联系并具有相对二叉树2624中的地址的不重叠的地址的操作可被排队,而不用过度担心会无序地执行这样的操作,而重叠的地址需要更谨慎的考虑以确保操作以正确次序执行,从而避免数据破坏问题。
[0361]现在参照图36A中所说明的二叉树的示范实施例,通过,例如将与显示最早接收时间的I/O请求(也就是I/O请求0)有关的信息与第一节点2802联系起来,调度程序软件进程2602可形成二叉树数据结构2624(图34)的第一节点2802(也就是,节点0)。如上,相关联的信息可包括下列:被该I/O请求作为目标的逻辑存储单元的标识符2804、指向一个或更多个I/O请求的一个或多个指针2806、指向与I/O请求相联系的操作及/或操作序列的一个或更多个指针2808,及/或指向与I/O请求相联系的不相重叠的地址范围的一个或更多个指针2810。节点2802还可以包括指向父节点的指针2812,条件是这样的父节点存在(否则是指向空的指针),以及包括指向一个或更多个子节点的指针2814、2816,条件是这样的子节点存在(否则是指向空的指针)。子指针2814中的一个可随后被重定向到与一较小的地址范围相联系的子节点,而另一个子指针2816可被重定向到与一较大的地址范围相联系的子节点。
[0362]现在参照图36B,通过例如形成与另一个随后接收的I/O请求(也就是,I/O请求1)相联系的新节点2818,调度程序2802可扩展二叉树,所述I/O请求对准与现有节点2802的地址范围(也就是,地址0-15)不相重叠的地址范围2820(也就是,地址16-32)。为了保持图的清晰,图36B-36D不再重复与所描述的节点相联系的所有信息(之前结合图36A中节点2802所描述的),但是本领域技术人员将认识到对于每个这样的节点将存在相似的信息。
[0363]现在参照图36C,调度程序2602可通过拆分一个或更多个现有节点2802来扩展二叉树,以响应接收到对准一地址范围(也就是,地址8-11)的新I/O请求,所述地址范围(地址8-11)重叠了与一个或更多个这样的现有节点2802相联系的地址范围(也就是,地址0-15),在此在二叉树中由此产生的每个结点被组织以使它们与不相重叠的地址范围相联系。例如,原先与地址0-15相联系的图36B的节点0 2802可被分成两个另外的节点2822、2824(也就是,节点2和3),所述节点2822、2824的地址范围(也就是,分别为地址0-7和8-11)不与节点0 2802的已更新的地址范围(也就是,地址12-15)相重叠。与节点2802、2818、2822、2824中每个相联系的指针、标识符及/或其它信息可根据需要被更新,以反映更新的树形结构。例如,节点0 2802中的地址范围指针2810可被修改以指向特定逻辑存储单元内的地址范围12-15,节点2 2822的地址范围指针2826可被形成并对准该逻辑存储单元内的地址范围0-7,节点2 2822的I/O请求指针2828可被形成并被指引到I/O请求0,节点32824中的地址范围指针2830可被形成并对准该逻辑存储单元内的地址范围8-11,以及节点3 2824的两个I/O请求指针2832可被形成并被指引到I/O请求0和2(因为这两个请求都对准地址8-11)。类似地,其它节点信息,比如被指引到相关联的操作序列、操作及/或父节点或子结点的指针和标识符可被更新以形成更新的二叉树数据结构。
[0364]现在参照图36D,当相应的I/O请求完成时,调度程序2602可通过移动一个或更多个节点来修改二叉树。例如,当I/O请求0完成时,图36C的节点0 2802和节点2 2822可从二叉树除去,因为这样的节点没有引用任何其它I/O请求(也就是,它们的I/O请求指针2806、2828仅对准I/O请求0)。二叉树中的其余节点2818、2824可被重新组织以反映新的树形层次,并且它们的关联信息可被类似地更新以反映它们相对除去的节点2802、2822的独立性。例如,节点3 2824的I/O请求指针2832可被更新以仅指向I/O请求2而不指向I/O请求0,因为I/O请求0已被履行,并且节点1和3 2818、2824的父指针和子指针可被修改以反映新的二叉树层次。
[0365]虽然上面讨论的与图36A-36D有关的实施例是相对简单化的以保持本公开内容的清晰,但是本领域技术人员将认识到所公开的技术可被应用于大量的I/O请求,所述I/O请求可显示出影响多个逻辑存储单元的各种类型交互,在此每个这样的逻辑存储单元(或其部分)包括一组排列在明显不同的二叉树中的节点。如之前所讨论的,这些二叉树使得一个或更多个调度程序2602能够为查找新近接收的I/O请求指定的地址范围而快速搜索二叉树的地址范围指针,从而确定是否任何未决I/O请求与新近接收的I/O请求的地址范围重叠,所述未决I/O请求的操作可在处理中或被排队等待处理。调度程序因此可使用搜索结果来快速确定是否有可能开始执行与请求相联系的操作。对大量的请求来说,该效率对性能是有好处的。所公开的技术还可被用于其它类型的排队数据结构及/或其它类型的命令/请求。
[0366]
检查点
[0367]在一个实施例中,存储管理装置可用于设立写时拷贝操作序列的检查点,并且这些检查点对从存储管理装置故障的实时恢复是有用的。例如,在设计具有冗余的存储管理装置中,可能有一个被分配用于处理被指引到特定数据存储器的I/O操作的主处理模块,以及一个或更多个辅助处理模块,所述辅助处理模块可在刚一检测出主处理模块中的错误或故障时就完成主处理模块的任何正在处理中的I/O操作的处理。刚一接管对为主处理模块成功地处理未完成的I/O操作有用的信息,所公开技术的实施例就启用这样的辅助处理模块。同时,所公开技术的实施例以和其它事务信息的存储集成的、轻便的以及便于交流的方式,促进这些检查点的使用。
[0368]另外,所公开技术的实施例促进了通过主处理模块的处理最优化的利用,这是因为辅助处理模块不需要知道主处理模块尝试的任何最优化来在发生故障时成功地代替主处理模块,并且辅助处理模块可使用所公开的检查点信息来确定对于任何未完成的I/O操作,辅助处理器需要完成什么处理。这在具有多个数据存储器的大型系统尤其是有利的,在所述大型系统中在任何给定时间可能有几千、几万或更多的未完成的I/O事务。
[0369]在一个说明性实施例中以及参考图37和38,存储管理装置2938可从主机2934截取/接收I/O请求2904(例如,写请求、读请求等等),该请求以特定的当前存储器2944作为目标(3002),并且存储管理装置2938可响应该请求,从或许多个这样的操作序列类型2910(例如,写请求序列2912、读请求序列2914等等)来标识与I/O请求2904相联系的一特定类型的操作序列(3004)。作为非限制的例子,示范的写请求序列2912可包括以下关于图38的块3006-3010和3014-3018所讨论的操作。
[0370]存储管理装置2938解析写请求2904以提取存储装置的标识符2916,以及,当前存储器2944内的位置2918(包括,例如,特定的开始地址和数据长度),其中由写请求2904指定及/或与写请求包含在一起的当前数据将被写到所述位置2918。存储管理装置2938读存储在当前存储器2944内位置2918的数据2920(在此被称为“原始数据”)(3006),并将这样的数据2920拷贝到与选取的存储装置相联系的时间存储器2946中的目的地位置2922(3008)。与写请求2904相联系的事务信息2926被记录在一个或更多个数据结构、文件及/或数据库(未显示)中,并且可包括,例如,与当前存储器2944及/或时间存储器2946相联系的装置标识符2916,唯一地标识写请求2904的写请求标识符2928,受写请求2904影响的当前存储器2944和时间存储器2946内的位置2918、2922,写请求2904被接收的时间2930,及/或与写请求2904相联系的其它信息类型(3010)。事务信息2926可在拷贝数据2920至目的地位置2922之前、之后或同时被记录。
[0371]如果原始数据2920未被成功地拷贝至目的地位置2922,及/或如果事务信息2926未被正确地记录,那么存储管理装置2938将产生错误消息,所述错误消息可被传递给存储管理装置2938的用户及/或其它与此关联的实体或软件进程(3012)。否则,刚一成功拷贝数据2920和记录事务信息2926,存储管理装置2938就产生指示符2932(在此被称为“索引检查点”),所述指示符2932确认数据拷贝和事务信息记录操作已成功地完成,并且该索引检查点2932随后被存储或记录,例如,作为事务信息2926的一部分(3014)。
[0372]在产生和存储索引检查点2932之后,存储管理装置2938将由写请求2904指定的当前数据(还被称为“有效载荷数据”)写至当前存储器2944内的适当位置2918(3016)。如果当前数据未被成功地写入,那么可产生一错误消息(3012)。否则,存储管理装置2938产生指示符2933(在此被称为“释放检查点”),所述指示符2933确认当前数据已被成功地写到当前存储器2944中的所需位置2918,并且该释放检查点2933随后作为事务信息2926的一部分被存储/记录(3018)。索引检查点2932、释放检查点2933及/或其它事务信息2926可为了每一写请求及/或其它类型的存储事务事件而被产生,并因此可被用于从具有间隔尺寸的存储事务故障(例如,电源故障、硬件故障、数据破坏事件等等)恢复,所述间隔尺寸使得数据恢复、存储命令队列再生/同步,及/或存储系统重配置能够发生在,例如,与刚好在存储事务故障发生之前基本上一致的时间。
[0373]索引和释放检查点2932、2933可用于增强存储系统的容错性,尤其对于硬件故障及/或电源故障的容错性,硬件故障及/或电源故障可影响向存储单元写入及/或从存储单元读取的处理器模块或其它类型装置。例如,包括一个主处理器模块和一个或更多个备用处理器模块的容错系统在如下情况中可受益于所公开的技术,在此主处理器模块失效,且备用处理器模块之一通过使得备用处理器模块内的存储、命令/操作队列基本上等同于主处理器模块在刚好在其故障之前或与其故障一致的时间点的存储、命令/操作队列,从而承担对影响一个或更多个存储单元的交互的主要控制。以这种方式,备用处理器模块可承担它的责任而不用必须再执行命令或完成其它操作,所述命令或操作也许已由主处理器模块在其故障之前完成且另外可能不必传递给备用处理器模块。所公开的技术还可以被用来复制排队的I/O请求及/或相关联的操作的历史,用于分析或其它用途。
[0374]在一个说明性实施例中且现在参照图39,备用处理器模块(未显示)可包括一个或更多个请求队列3102,所述请求队列3102包含,例如,在特定时间接收并把一个或更多个逻辑存储单元3108的特定地址及/或地址范围3106作为目标的I/O请求3104。在特定的请求队列3102′中的I/O请求3104可以,但不需要,被组织以对存储于特定逻辑单元3108′中地址的数据起作用,而在其它请求队列3102″中的I/O请求可被组织以对存储在不同的逻辑单元3108″中地址的数据起作用。备用处理器模块还可以包括一个或更多个操作类型队列3110,所述操作类型队列3110可,例如包括与一个或更多个请求队列3102中的I/O请求3104相联系的操作。每个操作队列3110可以,但不需要,仅包含特定类型的操作。第一说明性操作队列3110i可包含多个操作,在此一个或更多个这样的操作与I/O请求3104″相联系(对应于,例如写请求),并包括从与当前存储器2944(图37)相联系的逻辑存储单元3108′的第一地址范围3106″读原始数据。第二说明性操作队列3110ii可包含多个操作,在此一个或更多个这样的操作与I/O请求3104″相联系,并包括将原始数据从当前存储器2944的第一地址范围3106″拷贝到时间存储器2946中一位置。第三说明性操作队列3110iii可包含多个操作,在此一个或更多个这样的操作与I/O请求3104″相联系,并包括记录记录事务信息2926(图37)。第四说明性操作队列3110iv可包含多个操作,在此一个或更多个这样的操作与I/O请求3104″相联系,并包括产生索引检查点2932。第五说明性操作队列3110v包含多个操作,在此一个或更多个这样的操作与I/O请求3104″相联系,并包括将有效载荷数据写到逻辑单元3108′的地址范围3106″。第六说明性操作队列3110vi包含多个操作,在此一个或更多个这样的操作与I/O请求3104″相联系,并包括确认有效载荷数据被成功地写到逻辑存储单元3108′的地址范围3106″。第七说明性操作队列3110vii可包含多个操作,在此一个或更多个这样的操作与I/O请求3104″相联系,并包括产生释放检查点2933。
[0375]在一个说明性恢复处理中,所述恢复处理使用索引检查点2932及/或释放检查点2933从硬件/电源故障中恢复,并且现在参照图39和40,存储管理装置2938、存储系统管理员及/或被分配了监控及/或从这样的故障恢复的任务的其它类型实体可检测错误消息及/或其它类型的错误标志,所述错误消息及/或其它类型错误标志指示硬件故障及/或电源故障。为了确保备用处理器模块的请求队列3102和操作队列3110的内容与此刻故障的主处理器模块的相应队列的内容相符,存储管理装置2938可评估在它的请求队列3102中的每个I/O请求3104,至少部分地基于相应索引及/或释放检查点2932、2933,以确定是否这样的I/O请求3104之前被主处理器模块在其故障之前履行或部分地履行。刚一作出这样的确定,存储管理装置2938就可修改备用处理器模块的请求队列3102及/或操作队列3110,以使它们基本上与在主处理器模块故障之前排队在其中的I/O请求和相关联的操作相符。
[0376]例如,存储管理装置2938可搜索备用处理器模块的请求队列3102以标识一个或更多个在主处理器模块故障之前已被排队的I/O请求3104(3202)。对于每个被标识的I/O请求,存储管理装置2938可通过例如,在被通信地耦合到存储管理装置2938的数据结构、文件、数据库及/或其它类型数据储存库中搜索这样的索引检查点2932,来确定相关联的索引检查点2932是否存在(3204)。在一个实施例中,检查点与其它有关数据库中的写请求的信息一起被记录,所述数据库存储重写数据的位置及其他上面所描述的信息。
[0377]如果关联的索引检查点2932未被定位(就写时拷贝请求来说,表示原始数据未被成功地从当前存储器2944拷贝到时间存储器2946内的一位置),那么存储管理装置2938可将与备用处理器模块的一个或更多个操作队列3110内的I/O请求3104相联系的操作的完全集合排队以备随后的执行(3206)。否则,存储管理装置2938可通过例如在上述的数据储存库中搜索这样的释放检查点2933,来确定相关联的释放检查点2933是否存在(3208)。如果关联的释放检查点2933未被定位,那么存储管理装置2938可将与备用处理器模块的一个或更多个操作队列3110内的I/O请求3104相联系的操作的一个子集排队(3210)。例如,以及在I/O请求与写时拷贝操作序列对应的情况下,排队操作的子集可包括操作:将I/O请求指定的有效载荷数据写到逻辑存储单元3108内的特定位置,确认有效载荷数据被成功地写入,及/或产生与这样的请求相联系的释放检查点。否则,以及如果相关联的释放检查点2933被定位(表示主处理器模块在其故障之前已完全地履行了I/O请求),那么存储管理装置2938可将与这样的I/O请求相联系的操作从备用处理器模块的操作队列3110除去(3212)。
[0378]对于备用处理器模块的请求队列3102中的每一I/O请求3104,上述方法可被重复,并因此使备用处理器模块的队列与现在已故障的主处理器模块的相应队列一致。以这种方式,备用处理器模块的请求和操作队列3102、3110被清除过时的请求和操作,从而最小化且或许全部消除不必要的及/或另外的不合需要的操作的数量,所述不必要的及/或另外的不合需要的操作否则由于在硬件/电源故障事件时主处理器模块和备用处理器模块的队列中的不一致而需要被执行。一旦备用处理器模块的队列3102、3110已被清除不需要的操作和请求及/或装载需要的操作,如以上所讨论的,这样的操作队列3110中的其余操作序列可根据请求队列3102中的I/O请求序列而被执行。在此时,硬件/电源故障恢复工作已被完成,并且备用处理器模块可重新开始正常的排队操作。
[0379]本领域技术人员将认识到,上述的方法仅仅是说明性的,而且多种相似的方法可被执行以产生基本上相同的结果。例如,相关联的释放检查点2933的存在可在确定相关联的索引检查点2932的存在之前被确定。
[0380]
用于启动映射产生的写请求记录
[0381]通常,在另一个方面,本发明涉及用于记录被指引到数据存储器的写请求的方法和装置,所述数据存储器具有与之相联系的当前存储器和时间存储器,并且本发明还涉及用于使得能够产生过去时间的数据存储器至少一部分的(例如,当前存储器的或其某个子部分)时间映射至少一部分的方法与装置。如上所述,时间映射是在现在时间产生的映射,而且具有存储在指定过去时间点的数据存储器的至少一部分中的数据的当前位置。
[0382]同样如上所述,在一个实施例中,当例如用户在现在时间请求过去时间的数据存储器的至少一部分的(例如,当前存储器的或其某个子部分)映象时,时间映射由计算装置(例如,如上所描述的存储管理装置)产生。通过产生时间映射,计算装置就不需要在对该映象或其一部分覆盖的数据的每个请求上,贯穿整个索引搜索旧数据的位置。相反,通过引用时间映射,计算装置可快速高效地确定在过去时间存储在数据存储器的至少一部分的数据位置,并因此,快速高效地响应用户请求。因此,提高了系统效率并增加了用户满意度。
[0383]虽然产生时间映射提高了在过去时间存储在数据存储器的至少一部分中的数据可被存取的速度,但本发明的当前方面涉及用于记录被指引到数据存储器的写请求,并从而提高了时间映射本身可被产生的速度的方法和装置。另外,本发明的当前方面便于快速呈现在过去时间存储在数据存储器中的数据,即使时间映射仍然正在被产生。
[0384]在一个实施例中,刚一收到对先前映象的请求,计算装置就开始产生时间映射。如果,在时间映射被完成之前,用户请求所述映象的一部分覆盖的数据并且所述数据的位置还未被加入时间映射中,那么系统可足够快地搜索数据以提供合理的响应时间,即使该响应将不会象如果时间映射被完成并使用时那么快。如此处所描述的,代替贯穿整个索引搜索过去数据的位置,只有所述索引的一部分或多个部分需要被搜索以响应用户对所述映象的所述部分覆盖的数据的请求。在产生该响应中完成的工作(例如,确定数据的位置)还可被存储在时间映射中,从而提高系统总效率。
[0385]因此,在一个实施例中,刚一收到对创建先前映象的请求,时间映射就被产生,例如,作为一后台处理。如果对数据的请求被指引到所述先前映象,而所请求的数据的位置仍未被时间映射指示(例如,时间映射还未被完全产生),那么在此所描述的技术可用于标识所请求数据的位置,并响应用户对所述数据的请求。时间映射然后用所请求数据的位置被更新。
[0386]简要综述,在本发明该方面的一个实施例中,第一计算装置(例如,如上所描述的存储管理装置)从第二计算装置(例如,如上所描述的主机)接收多个写请求。第一计算装置存储这些写请求的记录。在一个实施例中,至少一个第一数据库表和一个第二数据库表被用于记录有关写请求的信息,以及被用于跟踪由数据存储器上的写请求引起的任何变化。更具体地说,对于接收到的每个写请求,第一计算装置将写请求项记录在第一数据库表中。所述写请求项包含有关接收到的写请求的信息。此外,每当写请求项被记录在第一数据库表中,第一计算装置,如果必要,就更新第二数据库表中的记录。包含在第二数据库表的记录中的数据以汇总形式表示被指引到数据存储器的写请求。在一个实施例中,例如,包含在第二数据库表的记录中的数据指定数据存储器中由于执行写请求而被重写的特定存储单元。
[0387]根据本发明该方面的一个特征,第一计算装置能够快速高效地解释存储在第二数据库表的记录中的数据,从而确定哪个特定的存储单元已被重写。此外,在一个实施例中,给定一特定的过去时间点,并使其承担产生时间映射的任务,第一计算装置能够解释存储在第二数据库表的记录中的数据,从而标识多个第一数据库表的子集来搜索与时间映射的产生有关的写请求项。换言之,在一个实施例中,本发明不需要第一计算装置在产生时间映射时贯穿全部第一数据库表以及贯穿全部写请求项进行搜索。因此,提高了总效率,并使时间映射的快速产生成为可能。
[0388]另外,在另一个实施例中,如果,在时间映射被完成之前,用户请求在过去时间存储在数据存储器中的数据,所述数据的当前位置仍未被时间映射指示,但如果时间映射被完成该当前位置就被指示,那么第一计算装置仍能快速高效地标识所述数据的位置,而不用搜索全部第一数据库表,并能对用户作出响应。此外,在产生该响应中完成的工作可被用于完成时间映射。
[0389]图41说明了存储管理装置3338的一个实施例,所述存储管理装置3338记录被指引到数据存储器的写请求,并且使得能够产生过去时间的数据存储器至少一部分(例如,数据存储器的当前存储器的或其某个子部分)的时间映射的至少一部分。一般而言,存储管理装置3338可具有上面所描述的存储管理装置的能力,并可被实现为这样的存储管理装置,且具有在此所描述的附加功能性。应该了解的是其它实现也是可能的。
[0390]在一个实施例中,存储管理装置3338使用至少一个第一数据库表3350,但典型地使用多个第一数据库表3350,用于记录多个写请求项。存储管理装置3338还使用第二数据库表3352,所述第二数据库表3352包括至少一个用于每个第一数据库表3350的记录,所述第一数据库表3350被存储管理装置3338使用。此外,存储管理装置3338还包括更新模块3354,所述更新模块3354用于每当写请求项被记录在第一数据库表中时更新第二数据库表3352中的至少一个记录。如之前所描述的,存储管理装置3338还管理与当前存储器3344和时间存储器3346相联系的至少一个数据存储器3343。
[0391]可选地,存储管理装置3338还可以包括标识模块3356、搜索模块3358、时间映射产生模块3360和I/O模块3362。为响应对在过去时间存储在数据存储器3343的至少一部分中(例如,在当前存储器3344中或其某个子部分中)的数据的请求,存储管理装置3338可使用标识模块3356解释第二数据库表3352中的一个或更多个记录,并从而标识一个或更多个第一数据库表3350来搜索相关的写请求项。存储管理装置3338然后可使用搜索模块3358执行这样的搜索并且,在已发现有关的写请求项时,可使用时间映射产生模块来产生过去时间的数据存储器至少一部分的时间映射的至少一部分。此外,存储管理装置3338可使用I/O模块3362来响应对在过去时间存储在位于数据存储器3343内的至少一个指定存储单元中的数据的读请求。
[0392]第一数据库表3350和第二数据库表3352可分别用任何对记录写请求项和记录有用的形式、方法或方式来实现。在一个实施例中,例如,第一数据库表3350及/或第二数据库表3352被实现为电子表格。替代性地,第一数据库表3350及/或第二数据库表3352可被实现为文本或表格式的分隔文件、位图、数组、树、索引、帐目或任何其它对组织数据有用的方式。
[0393]对它们来说,更新模块3354、标识模块3356、搜索模块3358、时间映射产生模块3360和I/O模块3362可用任何能够完成如下所描述的功能的形式、方法或方式来实现。例如,更新模块3354、标识模块3356、搜索模块3358、时间映射产生模块3360及/或I/O模块3362可被实现为运行在微处理器上的软件模块或程序及/或硬件装置,比如,例如专用集成电路(ASIC)或现场可编程门阵列(FPGA)。
[0394]数据存储器3343可具有上面所描述的数据存储器的能力,并且可用上面所描述的当前存储器和时间存储器来实现,且具有在此所描述的附加功能性。例如,与当前存储器3344和时间存储器3346中之一或两者相联系的数据可被存储在存储管理装置3338的内存中或物理存储器(未显示)中,对所述数据来说,其可被直接地存储或被虚拟化等等。
[0395]典型地,存储管理装置3338从一个或更多个其它计算装置接收多个写请求,比如,例如上面所描述的主机。写请求被指引到数据存储器3343。在一个特定的实施例中,写请求被指引到数据存储器3343的当前存储器3344。在一个这样的实施例中,每当存储管理装置3338接收到将新的数据写到当前存储器3344的一个或更多个指定块的请求时,存储管理装置3338如之前所描述的,执行写时拷贝操作。换言之,存储管理装置3338拷贝存储在当前存储器3344的指定块中的现有数据,将所述现有数据写到比如时间存储器3346内的另一个位置,然后将新的数据写到当前存储器3344的指定块。作为该写时拷贝操作的一部分,有关写请求的信息,包括被重写的数据的新位置,可被记录在第一数据库表3350中。第二数据库表3352然后被更新以反映写请求的执行和将写请求相联系的信息记录在第一数据库表3350中。
[0396]现在参照图42,在方法3400的一个实施例的简要概述中,所述方法3400例如使用图41的示范存储管理装置,用于记录被指引到数据存储器的写请求,存储管理装置3338在每个写请求执行之后(例如,在上面所描述的每个写时拷贝操作之后),在至少一个第一数据库表3350中记录一写请求项(步骤3404)。存储管理装置3338还为每个第一数据库表3350在第二数据库表3352中保留至少一个记录(步骤3408),并且每当一写请求项被记录在第一数据库表3350中时更新第二数据库表3352中的至少一个记录(步骤3412),例如通过使用更新模块3354。
[0397]在一个实施例中,当构造时间映射或另外确定存储在特定存储单元中的数据的位置时,以及典型地在比步骤3404、3408和3412更靠后的时间,存储管理装置3338使用标识模块3356来解释第二数据库表3352中的一个或更多个记录以标识至少一个将要搜索的第一数据库表3350(步骤3416),并且使用搜索模块3358来搜索至少一个所标识的第一数据库表3350(步骤3420)。存储管理装置3338然后使用时间映射产生模块3360来产生过去时间的数据存储器3343的至少一部分的(例如,当前存储器3344的或其某个子部分的)时间映射的至少一部分(步骤3424),及/或使用I/O模块3362,来响应对在过去时间存储在位于数据存储器至少一部分内的至少一个指定存储单元中的数据的请求。
[0398]更详细地,并且现在参照图42和43,在一个实施例中,在存储管理装置3338收到被指引到数据存储器3343的写请求之后,存储管理装置3338在步骤3404,在第一数据库表3350中记录写请求项3504。每个写请求项3504包括有关写请求的信息。例如,写请求项3504可包括位于数据存储器3343内(例如,当前存储器3344内)的至少一个存储单元的标识,其中写请求被指引到所述存储单元,及/或包括写请求被存储管理装置3338接收到的时间。
[0399]在一个实施例中,每个接收的写请求引起如上所描述的写时拷贝操作的执行。在这样的实施例中,每个写请求引起之前存储于位于数据存储器3343内(例如,当前存储器3344内)的至少一个存储单元的以前的数据被拷贝到新的位置,比如数据存储器3343的时间存储器3346内。包含在写请求中的数据然后被写到位于数据存储器3343内(例如,当前存储器3344内)的至少一个存储单元,其中以前的数据是从所述存储单元拷贝的。因此,写请求项3504还可包括以前的数据被拷贝到的新位置(例如,时间存储器3346内的位置)。
[0400]如在图43中所说明的,当存储管理装置3338收到一个以上被指引到数据存储器3343的写请求时,存储管理装置3338在第一数据库表3350中记录多个写请求项3504。在一个实施例中,存储管理装置3338在单个第一数据库表3350中记录全部的写请求项3504,例如第一数据库表33501,直到达到写请求项3504的最大数目。典型地,第一数据库表33501的写请求项3504的最大数目是针对效率,或基于分配给第一数据库表33501的储存容量而设置的。一旦第一数据库表33501中的写请求项3504的数目达到最大值,存储管理装置3338就采用新的第一数据库表33502并且每当收到写请求时就将写请求项3504记录在其中。再次,当记录在第一数据库表33502中的写请求项3504达到最大值时,存储管理装置3338采用新的第一数据库表33503(未显示),等等。
[0401]在步骤3408,存储管理装置3338为每个第一数据库表3350在第二数据库表3352中保留至少一个记录3508。参照图43,数据存储器3343的至少一部分(例如,数据存储器3343的当前存储器3344或其某个子部分)可被存储管理装置3338概念地组织成数目为m的“存储桶”,在此m>1,并且m个存储桶中的每个均和位于数据存储器3343的至少一部分内的固定数目的存储单元有关。在一个这样的实施例中,对于每个第一数据库表3350,存储管理装置3338在第二数据库表3352中,如所说明的,为m个存储桶中的每个保留一记录3508。替代性地,在另一个实施例中,存储管理装置3338没有把数据存储器3343的至少一部分分成存储桶。在这样的实施例(未显示)中,存储管理装置3338在第二数据库表3352中为第一数据库表3350中的每一个保留单个记录3508。
[0402]仍然参照图43,每个记录3508包括多个比特项,且每个比特项被置位(也就是,″1″)或复位(也就是,″0″)。此外,在一个实施例中,如图43中竖向定线出于解释目的而说明的,记录3508中每个比特项与位于数据存储器3343的至少一部分内的至少一个存储单元对应。
[0403]起初,在一个实施例中,当第一数据库表3350为空时(也就是,当没有写请求项3504已被记录在第一数据库表3350中时),与该第一数据库表3350相联系的每个记录3508中的所有比特项都被复位(也就是″0″)。其后,每当存储管理装置3338在该第一数据库表3350中记录一写请求项3504时,存储管理装置3338在步骤3412更新第二数据库表3352中的至少一个记录3508(与该第一数据库表3350相联系的)。在一个实施例中,通过使用更新模块3354来将至少一个记录3508中每个复位的比特项置位,存储管理装置3338更新至少一个记录3508,且所述每个比特项与位于数据存储器3343的至少一部分内的被与瞬时写请求项相联系的写请求重写的存储单元对应。因此,与第一数据库表3350相联系的记录3508中每个置位(也就是,″1″)的比特项指出,与所述比特项对应的位于数据存储器3343至少一部分内的至少一个存储单元在该第一数据库表3350的形成期间被重写至少已一次。另一方面,与第一数据库表3350相联系的记录3508中每个复位(也就是,″0″)的比特项指出,与所述比特项对应的位于数据存储器3343至少一部分内的至少一个存储单元在该第一数据库表3350的形成期间没有被重写至少一次。照这样,第二数据库3352中一个或更多个记录3508的数据(也就是,比特项)表示,写请求对数据存储器3343至少一部分的状态的影响(也就是,所述数据标识被写请求重写的位于数据存储器3343至少一部分内的至少一个存储单元)。
[0404]本领域技术人员将认识到,在图43中所说明的每个记录3508的五比特项仅仅是说明性的,并且用于解释本发明的当前方面的目的。实际上,每个记录3508可包括,例如,比特项的一个或更多个字节或比特项的一个或更多个字(任何长度的)。此外,虽然在图43中每个记录3508的数据以二进制表示的方式说明,但每个记录3508可替代性地以十进制、十六进制或其它表示法存储其数据。此外,除了表示写请求对数据存储器3343至少一部分的状态的影响的比特项之外,每个记录3508可包括用于标识该记录3508所关联的第一数据库表3350的标识符。
[0405]如刚刚描述的,例如使用如上的数据库表3350、3352存储所述数据并为它编索引之后,存储管理装置3338可高效地确定第一数据库表3350的写请求项3504是否与到数据存储器3343中特定存储单元的写入相联系。因此,响应对在过去时间存储在数据存储器3343至少一部分中(例如,当前存储器3344中或其某个子部分中)的数据的请求,例如来自用户,存储管理装置3338的标识模块3356首先,在步骤3416,标识至少一个第一数据库表3350以搜索相关的写请求项3504。在一个实施例中,为标识哪个(或哪些个)第一数据库表3350要被搜索,存储管理装置3338的标识模块3356确定位于数据存储器3343至少一部分内的哪个存储单元已被重写。在一个这样的实施例中,存储管理装置3338的标识模块3356,为位于数据存储器3343至少一部分内的每个存储单元(所述存储单元具有对应的比特项),确定第二数据库表3352中的至少一个记录3508是否具有用于所述存储单元的被置位(也就是,″1″)的比特项。
[0406]更具体地说,在一个实施例中,对数据存储器3343至少一部分内的每个特定存储单元来说,存储管理装置3338的标识模块3356在与该特定存储单元对应的每个记录3508中的数据的比特项之上执行一布尔逻辑“或”操作。为便于解释,并仍参照图43,当存储管理装置3338已经采用一个以上的第一数据库表3350时,这可视地解释为在垂直对齐的记录3508中的数据列上执行一布尔逻辑“或”操作。如果布尔逻辑“或”操作为特定列返回″1″,那么与该列对应的特定存储单元已被重写,并且在至少一个第一数据库表3350中存在与一个或更多个被指引到该特定存储单元的写请求相联系的一个或更多个写请求项3504。否则,如果布尔逻辑“或”操作为特定列返回″0″,那么与该列对应的特定存储单元在第二数据库表3352中的记录3508所覆盖的任何时间都未被重写。
[0407]例如,取在图43中所说明的数据存储器3343至少一部分的存储桶1的三个记录中的示范数据(也就是,记录1,1、记录2,1、和记录n,1),在这些记录的垂直对齐的比特项之上执行之前描述的布尔逻辑“或”操作(也就是,10010 OR 10010 OR 01010),从而生成结果11010。该结果指出,在图43中表示的位于数据存储器3343至少一部分内的第一、第二和第四存储单元在某个时间点已被重写,而且对于这些存储单元中的每一个,用于存储桶1的至少一个记录3508具有与该存储单元对应的比特项,且该比特项被置位(也就是,″1″)的。该结果还指出,在图43中所表示的位于数据存储器3343所述部分内的第三和第五存储单元在该数据覆盖的时间点未被重写,而且对于这些存储单元的每一个,与该存储单元对应的存储桶1的记录3508中的每个比特项被复位(也就是″0″)。
[0408]存储管理装置3338的标识模块3356,刚一为位于数据存储器3343至少一部分内的特定存储单元确定至少一个记录3508具有一个用于该特定存储单元的被置位(也就是,″1″)的比特项,就标识那些一个或更多个记录3508,所述记录3508具有用于该特定存储单元的被置位的比特项。标识模块3356然后还标识一个或更多个第一数据库表3350,那些标识的记录3508为所述第一数据库表3350而保存。在一个实施例中,为完成这些步骤,存储管理装置3338的标识模块3356首先仅仅扫描有关的比特项以确定哪个已被置位为″1″。回到我们的例子,所述例子包括在图43中所说明的数据存储器3343至少一部分的存储桶1的三个记录3508(也就是,记录1,1、记录2,1和记录n,1),存储管理装置3338的标识模块3356扫描与第一、第二和第四存储单元对应的那些记录的比特项,所述第一、第二和第四存储单元位于在图43中所说明的数据存储器3343的至少一部分内。然而,存储管理装置3338的标识模块3356不需要,并且没有扫描,与位于在图43中所说明的数据存储器3343至少一部分内的第三和第五存储单元对应的这些记录的比特项,这是因为标识模块3356知道,由于之前描述的布尔逻辑“或”操作的执行,它们全部被复位(也就是,″0″)。
[0409]由于如此扫描那些记录3508的比特项,存储管理装置3338的标识模块3356于是将根据本发明,标识以下的第一数据库表3350以搜索写请求项3504,所述写请求项与对位于在图43中所说明的数据存储器3343至少一部分内的第一、第二和第四存储单元的写请求有关:
存储单元 | 要搜索的第一数据库表 |
第一 | 33501,33502 |
第二 | 3350n |
第四 | 33501,33502,3350n |
[0410]在标识模块3356在步骤3416已标识一个或更多个将要搜索的第一数据库表3350之后,存储管理装置3338的搜索模块3358在步骤3420搜索那些被标识的第一数据库表3350。在此,应该记得,存储管理装置3338将已被请求,例如,被用户请求在过去时间存储在数据存储器3343至少一部分中(例如,在当前存储器3344中或在其某个子部分中)的数据。因此,在一个实施例中,对每一位于数据存储器3343至少一部分内的至少一个存储单元来说,所述存储单元在记录3508中具有对应的被置位的比特项(例如,回到我们上面的例子,对在图43中所说明的数据存储器3343至少一部分中的第一、第二和第四存储单元中的每一个来说),存储管理装置3338的搜索模块3358执行下列步骤。首先,搜索模块3358,如上所描述的,搜索通过标识模块3356标识的第一数据库表3350的写请求项3504。搜索模块3358然后根据那些写请求项3504确定过去时间之后的第一时间,在所述第一时间,存储在该至少一个存储单元的以前数据由于执行之前描述的写时拷贝操作而被拷贝到新位置(比如数据存储器3343的时间存储器3346内),并在该至少一个存储单元被重写。在确定第一时间之后,搜索模块3358然后根据写请求项3504确定以前的数据在该第一时间被拷贝到的新位置,例如时间存储器3346内的新位置。以前的数据当前正被存储在该新位置。所述新位置被用于产生过去时间的数据存储器3343至少一部分的时间映射的至少一部分,及/或用于响应用户对在过去时间存储在数据存储器3343至少一部分中的数据的读请求,每个均如下所描述的。
[0411]当然,在一些实施例中,即使位于数据存储器3343至少一部分内的存储单元具有在记录3508中的被置位的对应比特项,搜索模块3358也将不能确定在所述过去时间之后的第一时间,在所述第一时间存储在该存储单元的以前数据被拷贝到新位置(例如,时间存储器3346内)并在该存储单元被重写。搜索模块3358将不能作出该确定的情况的一个例子是,位于数据存储器3343至少一部分内的存储单元在过去时间之前的时间被重写,而不是在过去时间之后被重写。在这种情况下,在过去时间存储在该存储单元中的数据将不会已被复制到新位置,但作为替代,仍将在现在时间被存储在该存储单元中。
[0412]如上所解释的,在布尔逻辑“或”操作为图43中垂直对齐的比特项的特定行返回″0″的情况下,数据存储器3343至少一部分中的与该列对应的特定存储单元在由第二数据库表3352中的记录覆盖的任何时间都未被重写。因此,在这种情况下,在过去时间存储在该特定存储单元中的数据同样将不会已被复制到新位置,但作为替代,仍将在现在时间被存储在该存储单元中。
[0413]在一个实施例中,在搜索模块3358已经为位于数据存储器3343至少一部分内的每个存储单元标识了在过去时间存储在该存储单元的数据现在当前存储所在的位置(如所解释的,其仍在该存储单元中还是其位于新位置中,比如时间存储器3346内)之后,存储管理装置3338的时间映射产生模块3360在步骤3424产生过去时间的数据存储器3343至少一部分的时间映射的至少一部分。在一个实施例中,时间映射产生模块3360通过将位于数据存储器3343至少一部分内的每个存储单元映射到在过去时间存储在该存储单元中的数据现在当前存储所在的位置来产生时间映射。映射可以是,例如,如在数据库中为位于数据存储器3343至少一部分内的每个存储单元记录在过去时间存储在该存储单元中的数据现在当前存储所在位置的标识一样简单。
[0414]在另一个实施例中,存储管理装置3338,例如从如上所描述的主机接收对在过去时间存储在位于数据存储器3343至少一部分内的至少一个指定存储单元中的数据的读请求。在一个实施例中,在存储管理装置3338的时间映射产生模块3360已开始为相同的过去时间产生一时间映射之后,而在其完成该时间映射之前,读请求被收到。在这种情况下,如果完成的时间映射的某个部分覆盖在读请求中指定的少一个存储单元,那么存储管理装置3338的I/O模块3362就在步骤3428从该时间映射确定数据的位置(如所解释的,如果所请求的数据未被重写,其可以是位于数据存储器3343至少一部分内的指定存储单元,或者如果所请求的数据已被重写,其可以是比如时间存储器3346内的新位置)。替代性地,如果,在这种情况下,完成的时间映射的某个部分没有覆盖在读请求中指定的至少一个存储单元,或者如果,在其它实施例中,存储管理装置3338,例如没有被配置以生成时间映射或仅生成或开始生成一过去时间(其不同于在读请求中指定的过去时间)的时间映射,那么存储管理装置3338就执行上面所描述的方法3400的步骤3416和3420。然而,在这样执行方法3400的步骤3416和3420时,存储管理装置3338不需要为位于数据存储器3343至少一部分内的每个存储单元执行之前描述的操作。相反,存储管理装置3338仅需为在读请求中指定的每个存储单元执行方法3400的步骤3416和3420的之前描述的操作。换言之,存储管理装置3338仅需确定新位置(一个或更多个),其中之前存储在读请求中指定的每个存储单元的数据被拷贝到所述新位置并且现在位于所述新位置。
[0415]在确定所述新位置之后,在步骤3428响应读请求,存储管理装置3338的I/O模块3362从新位置读数据并将其发送至请求方,例如如上所描述的主机。此外,在如下情况中,即存储管理装置3338的时间映射产生模块3360已开始为一过去时间(其与在读请求中指定的过去时间相同)产生时间映射,但在读请求被接收时还未完成该时间映射,以及在已被完成的时间映射的某个部分没有覆盖在读请求中指定的至少一个存储单元的情况下,存储管理装置3338在对读请求产生响应时完成的工作(也就是,执行方法3400的步骤3416和3420以确定新位置(一个或更多个),其中之前存储在读请求中指定的每个存储单元中的数据被拷贝到并且现在位于所述新位置)可被存储管理装置3338的时间映射产生模块3360用于完成该时间映射。
[0416]本领域技术人员将认识到,上面所描述的方法3400的实现可用各种方法改变或修改,同时仍然采用所描述的原理而不会影响方法的结果。例如,在一个实施例中,记录3508中每个被置位的比特项可由″0″表示,与″11″相反,而每个被复位的比特项可由″1″表示,与″0″相反。在这样的实施例中,在为位于数据存储器3343至少一部分内的特定存储单元确定至少一个记录3508是否具有用于该特定存储单元的且被置位的比特项时,标识模块3356在与该特定存储单元对应的每个记录3508的比特项上执行布尔逻辑“和”操作,与上面所描述的布尔逻辑“或”操作相反。在这种情况下,如果布尔逻辑“和”操作为特定列返回″0 ″,那么与该列对应的特定存储单元已被重写,并且在至少一个第一数据库表3350中存在与一个或更多个被指引到该特定存储单元的写请求相联系的一个或更多个写请求项3504。否则,如果布尔逻辑“和”操作为特定列返回1,那么与该列对应的特定存储单元未在被第二数据库表3508中的记录3508覆盖的任何时间被重写。此外,作为另一个例子,比特项可用于表示任何数目的存储单元,只要当数据被写或读时转换被一致地应用。
[0417]本发明可作为包含在一个或更多个制造物品之上或之中的一个或更多个计算机可读的程序的一个或更多个模块来提供。所述制造物品可以是,作为非限制的例子,软盘、硬盘、CD ROM(光盘只读存储器)、快速存储卡、PROM(可编程只读存储器)、RAM(随机存取存储器)、ROM(只读存储器)或磁带。通常,计算机可读的程序可用任何程序设计语言实现。一些可被使用的语言的例子包括C、C++或JAVA。软件程序可作为目标码被存储在一个或更多个制造物品之上或之中。
[0418]在此所描述的内容的变动、修改及其它实现将被本领域普通技术人员想到而不脱离如所要求的本发明的精神和范围。因此,本发明将不由前述说明性的描述限定,而是由权利要求的精神和范围限定。
[0419]权利要求是:
Claims (22)
1.一种设立写时拷贝操作序列的检查点的方法,所述方法包括:
(a)接收第一写请求,所述写请求标识将从第一数据存储器的第一地址开始被写的有效载荷数据;
(b)读取与所述第一数据存储器的所述第一地址相联系的原始数据;
(c)将所述原始数据拷贝至从第二地址开始的第二数据存储器;
(d)记录与所述第一写请求相联系的事务信息,所述事务信息包括与所述第二地址相联系的标志;
(e)产生第一检查点,所述第一检查点确认事务信息被成功记录以及所述原始数据被成功拷贝至所述第二数据存储器;
(f)将所述有效载荷数据写至从所述第一地址开始的所述第一数据存储器;
(g)响应将所述有效载荷数据成功写至所述第一数据存储器,确认所述写时拷贝操作序列的成功完成;以及
(h)产生第二检查点,所述第二检查点确认所述写时拷贝操作序列的成功完成。
2.根据权利要求1所述的方法,其中所述事务信息进一步包括与所述第一写请求被接收的时间相联系的标志。
3.根据权利要求1所述的方法,其中记录所述事务信息包括将第一地址、第二地址和所述第一写请求被接收的时间存入至少一个数据结构中。
4.根据权利要求1所述的方法,其进一步包括:
基于所述第一和第二检查点中的至少一个,形成至少一个存储单元如其在存储事务故障之前存在的样子的表示。
5.根据权利要求4所述的方法,其中所述存储事务故障与硬件故障和电源故障中的至少一个对应。
6.根据权利要求1所述的方法,其进一步包括:
基于在所述事务信息中发现所述第二检查点,将与第二写请求相联系的信息从处理器模块的至少一个队列除去。
7.根据权利要求1所述的方法,其进一步包括:
基于在所述事务信息中发现所述第一检查点,将与所述第一写请求相联系的信息载入处理器模块的至少一个队列。
8.一种从与写时拷贝操作序列相联系的故障中恢复的方法,所述方法包括:
标识至少一个在故障之前排队的写请求,所述写请求对应写时拷贝操作序列中的多个操作;
确定是否响应完成所述操作序列的第一部分而形成第一检查点;
确定是否响应完成所述写时拷贝操作序列的至少一个第二部分而形成第二检查点;以及
基于所述第一和第二检查点中的至少一个,处理所述排队的写请求以至少部分地从所述故障中恢复,所述写请求处理包括:
当没能定位所述第一检查点时,将所述写时拷贝操作序列中的多个操作进行排队,用于执行,
当定位所述第一检查点而没能定位所述第二检查点时,将用于执行的所述多个操作的一子集进行排队,排队的操作的子集包括与所述写时拷贝操作序列的所述第二部分而不是所述第一部分相联系的操作,以及
当定位所述第一和第二检查点时,将所述写时拷贝操作序列中的所述多个操作从至少一个操作队列除去。
9.根据权利要求8所述的方法,其中所述故障对应与处理器模块相联系的硬件故障。
10.根据权利要求8所述的方法,其中所述写时拷贝操作序列的所述第一部分包括与将存储于第一数据存储器内一位置的原始数据拷贝至第二数据存储器相联系的至少一个操作,所述第一数据存储器内的所述位置正被所述排队的写请求标识。
11.根据权利要求8所述的方法,其中所述写时拷贝操作序列的所述第二部分包括与将所述排队的写请求标识的有效载荷数据写至第一数据存储器内一位置相联系的至少一个操作。
12.一种从存储事务故障中恢复的方法,所述方法包括:
接收一写请求,所述写请求标识将被从第一数据存储器的第一地址开始写的有效载荷数据;
将与所述第一数据存储器的所述第一地址相联系的原始数据拷贝至从第二地址开始的第二数据存储器;
记录与所述写请求相联系的事务信息,所述事务信息包括与所述第一和第二地址相联系的标志以及所述写请求被接收的时间;
产生第一指示符,所述第一指示符确认所述事务信息的记录;
将所述有效载荷数据写至从所述第一地址开始的所述第一数据存储器;以及
响应存储事务故障,使用所述第一指示符和至少一些所述事务信息以至少部分地从其中恢复。
13.根据权利要求12所述的方法,其进一步包括:产生第二指示符,所述第二指示符确认所述有效载荷数据被写至所述第一数据存储器。
14.根据权利要求12所述的方法,其中所述第一指示符进一步确认,与所述第一数据存储器的所述第一地址相联系的所述原始数据被成功地拷贝至所述第二数据存储器。
15.根据权利要求12所述的方法,其进一步包括:基于所述第二数据存储器中拷贝的原始数据的至少一些,形成至少一个存储单元如其在所述存储事务故障之前存在的样子的表示。
16.根据权利要求12所述的方法,其中所述存储事务故障与主处理器模块的硬件故障和电源故障的至少一个对应。
17.根据权利要求16所述的方法,其进一步包括:
产生第二指示符,所述第二指示符确认所述有效载荷数据被写至所述第一数据存储器;以及
基于在所述事务信息中发现所述第二指示符,将与第二写请求相联系的信息从备用处理器模块的至少一个队列除去,其中所述备用处理器模块响应所述存储事务故障而承担所述主处理器模块的任务。
18.根据权利要求17所述的方法,其进一步包括:基于在所述事务信息中发现所述第一指示符,将与第三写请求相联系的信息载入所述备用处理器模块的所述至少一个队列。
19.一种从存储事务故障中恢复的方法,所述方法包括:
检测发生在时间T1的存储事务故障;
标识与第一写请求相联系的第一指示符,所述第一写请求在时间T1之前被接收,所述第一指示符确认从所述第一写请求指定的第一地址开始原始存储的数据已被拷贝至第二地址;以及
基于至少一些所拷贝的数据,形成至少一个存储单元如其在所述存储事务故障之前存在的样子的表示。
20.根据权利要求19所述的方法,其中所述存储事务故障与主处理器模块的硬件故障和电源故障中的至少一个对应。
21.根据权利要求20所述的方法,其进一步包括:
标识第二指示符,所述第二指示符确认所述第一写请求指定的有效载荷数据被写至从所述第一地址开始的数据存储器;
基于所述第二指示符,将与第二写请求相联系的信息从备用处理器模块的至少一个队列除去,其中所述备用处理器模块响应所述存储事务故障而承担主处理器模块的任务。
22.根据权利要求21所述的方法,其进一步包括:
基于所述第一指示符,将与所述第一写请求相联系的信息载入所述备用处理器模块的至少一个队列。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/924,560 US7409587B2 (en) | 2004-08-24 | 2004-08-24 | Recovering from storage transaction failures using checkpoints |
US10/924,560 | 2004-08-24 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101073064A true CN101073064A (zh) | 2007-11-14 |
CN100562856C CN100562856C (zh) | 2009-11-25 |
Family
ID=35944827
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2005800362779A Active CN100562856C (zh) | 2004-08-24 | 2005-08-24 | 使用检查点从存储事务故障中恢复 |
Country Status (5)
Country | Link |
---|---|
US (1) | US7409587B2 (zh) |
EP (2) | EP2575046A3 (zh) |
JP (2) | JP4848523B2 (zh) |
CN (1) | CN100562856C (zh) |
WO (1) | WO2006023990A2 (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103582868A (zh) * | 2011-05-27 | 2014-02-12 | 微软公司 | 操作者状态检查点 |
CN104657229A (zh) * | 2015-03-19 | 2015-05-27 | 哈尔滨工业大学 | 基于高可用性硬件检查点的多核处理器卷回恢复系统及其卷回恢复方法 |
CN104680307A (zh) * | 2015-01-04 | 2015-06-03 | 腾讯科技(深圳)有限公司 | 一种物品事务处理方法和装置 |
CN104978241A (zh) * | 2015-05-29 | 2015-10-14 | 上海爱数软件有限公司 | 一种cow类型文件系统的数据恢复方法及装置 |
CN106663031A (zh) * | 2014-08-21 | 2017-05-10 | 微软技术许可有限责任公司 | 工作流执行中系统资源的公平共享 |
CN111344682A (zh) * | 2017-10-30 | 2020-06-26 | Arm有限公司 | 存储设备的初始化 |
CN112527208A (zh) * | 2020-12-21 | 2021-03-19 | 江苏国科微电子有限公司 | 一种数据对拷方法、装置、系统及介质 |
US10997569B2 (en) | 2015-01-04 | 2021-05-04 | Tencent Technology (Shenzhen) Company Limited | Method and device for processing virtual cards |
CN113094229A (zh) * | 2021-03-26 | 2021-07-09 | 山东英信计算机技术有限公司 | 一种存储器及存储器防止信息丢失的检测方法 |
CN113157512A (zh) * | 2021-04-29 | 2021-07-23 | 山东华芯半导体有限公司 | 实现大容量ssd在小内存机器上进行数据校验测试的方法 |
CN115220958A (zh) * | 2021-04-16 | 2022-10-21 | 泰拉克劳德有限责任公司 | 用于提取和编目指定文件活动数据的系统和方法 |
CN115687317A (zh) * | 2022-10-21 | 2023-02-03 | 南京上游软件有限公司 | 一种实现基于Java端多叉树对象增删改查服务的方法 |
Families Citing this family (134)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7146524B2 (en) | 2001-08-03 | 2006-12-05 | Isilon Systems, Inc. | Systems and methods for providing a distributed file system incorporating a virtual hot spare |
US7685126B2 (en) * | 2001-08-03 | 2010-03-23 | Isilon Systems, Inc. | System and methods for providing a distributed file system utilizing metadata to track information about data stored throughout the system |
US7454529B2 (en) * | 2002-08-02 | 2008-11-18 | Netapp, Inc. | Protectable data storage system and a method of protecting and/or managing a data storage system |
US7882081B2 (en) * | 2002-08-30 | 2011-02-01 | Netapp, Inc. | Optimized disk repository for the storage and retrieval of mostly sequential data |
US7437387B2 (en) * | 2002-08-30 | 2008-10-14 | Netapp, Inc. | Method and system for providing a file system overlay |
CN1692356B (zh) * | 2002-11-14 | 2014-06-04 | 易斯龙系统公司 | 用于对现存文件重新条带化的方法 |
US8024172B2 (en) * | 2002-12-09 | 2011-09-20 | Netapp, Inc. | Method and system for emulating tape libraries |
US7567993B2 (en) * | 2002-12-09 | 2009-07-28 | Netapp, Inc. | Method and system for creating and using removable disk based copies of backup data |
US6973369B2 (en) * | 2003-03-12 | 2005-12-06 | Alacritus, Inc. | System and method for virtual vaulting |
US7437492B2 (en) * | 2003-05-14 | 2008-10-14 | Netapp, Inc | Method and system for data compression and compression estimation in a virtual tape library environment |
US7577806B2 (en) | 2003-09-23 | 2009-08-18 | Symantec Operating Corporation | Systems and methods for time dependent data storage and recovery |
US7991748B2 (en) | 2003-09-23 | 2011-08-02 | Symantec Corporation | Virtual data store creation and use |
US7296008B2 (en) * | 2004-08-24 | 2007-11-13 | Symantec Operating Corporation | Generation and use of a time map for accessing a prior image of a storage device |
US7904428B2 (en) | 2003-09-23 | 2011-03-08 | Symantec Corporation | Methods and apparatus for recording write requests directed to a data store |
US7827362B2 (en) | 2004-08-24 | 2010-11-02 | Symantec Corporation | Systems, apparatus, and methods for processing I/O requests |
US7725760B2 (en) | 2003-09-23 | 2010-05-25 | Symantec Operating Corporation | Data storage system |
US7730222B2 (en) | 2004-08-24 | 2010-06-01 | Symantec Operating System | Processing storage-related I/O requests using binary tree data structures |
US7287133B2 (en) | 2004-08-24 | 2007-10-23 | Symantec Operating Corporation | Systems and methods for providing a modification history for a location within a data store |
US7325159B2 (en) * | 2004-02-04 | 2008-01-29 | Network Appliance, Inc. | Method and system for data recovery in a continuous data protection system |
US7426617B2 (en) | 2004-02-04 | 2008-09-16 | Network Appliance, Inc. | Method and system for synchronizing volumes in a continuous data protection system |
US7783606B2 (en) * | 2004-02-04 | 2010-08-24 | Netapp, Inc. | Method and system for remote data recovery |
US7406488B2 (en) * | 2004-02-04 | 2008-07-29 | Netapp | Method and system for maintaining data in a continuous data protection system |
US7315965B2 (en) * | 2004-02-04 | 2008-01-01 | Network Appliance, Inc. | Method and system for storing data using a continuous data protection system |
US7559088B2 (en) * | 2004-02-04 | 2009-07-07 | Netapp, Inc. | Method and apparatus for deleting data upon expiration |
US7904679B2 (en) * | 2004-02-04 | 2011-03-08 | Netapp, Inc. | Method and apparatus for managing backup data |
US7490103B2 (en) * | 2004-02-04 | 2009-02-10 | Netapp, Inc. | Method and system for backing up data |
US7720817B2 (en) * | 2004-02-04 | 2010-05-18 | Netapp, Inc. | Method and system for browsing objects on a protected volume in a continuous data protection system |
US20050182910A1 (en) * | 2004-02-04 | 2005-08-18 | Alacritus, Inc. | Method and system for adding redundancy to a continuous data protection system |
US8028135B1 (en) | 2004-09-01 | 2011-09-27 | Netapp, Inc. | Method and apparatus for maintaining compliant storage |
US8238350B2 (en) * | 2004-10-29 | 2012-08-07 | Emc Corporation | Message batching with checkpoints systems and methods |
US8055711B2 (en) * | 2004-10-29 | 2011-11-08 | Emc Corporation | Non-blocking commit protocol systems and methods |
US8051425B2 (en) | 2004-10-29 | 2011-11-01 | Emc Corporation | Distributed system with asynchronous execution systems and methods |
US7581118B2 (en) * | 2004-12-14 | 2009-08-25 | Netapp, Inc. | Disk sanitization using encryption |
US7774610B2 (en) * | 2004-12-14 | 2010-08-10 | Netapp, Inc. | Method and apparatus for verifiably migrating WORM data |
US8296271B1 (en) * | 2005-03-28 | 2012-10-23 | Federal Home Loan Mortgage Corporation | System and method for optimizing data recovery in a parallel database |
US20070011288A1 (en) * | 2005-05-31 | 2007-01-11 | International Business Machines Corporation | Apparatus and method for achieving thermal management through the allocation of redundant data processing devices |
US20070028144A1 (en) * | 2005-07-29 | 2007-02-01 | Stratus Technologies Bermuda Ltd. | Systems and methods for checkpointing |
US8190588B1 (en) * | 2005-09-19 | 2012-05-29 | Amazon Technologies, Inc. | Providing a distributed transaction information storage service |
US7401251B1 (en) * | 2005-09-29 | 2008-07-15 | Emc Corporation | Architecture for managing failover and recovery after failover in a data storage environment |
US7370235B1 (en) * | 2005-09-29 | 2008-05-06 | Emc Corporation | System and method for managing and scheduling recovery after a failure in a data storage environment |
US7401198B2 (en) * | 2005-10-06 | 2008-07-15 | Netapp | Maximizing storage system throughput by measuring system performance metrics |
US7551572B2 (en) * | 2005-10-21 | 2009-06-23 | Isilon Systems, Inc. | Systems and methods for providing variable protection |
US7797283B2 (en) * | 2005-10-21 | 2010-09-14 | Isilon Systems, Inc. | Systems and methods for maintaining distributed data |
US7917474B2 (en) * | 2005-10-21 | 2011-03-29 | Isilon Systems, Inc. | Systems and methods for accessing and updating distributed data |
US7788303B2 (en) | 2005-10-21 | 2010-08-31 | Isilon Systems, Inc. | Systems and methods for distributed system scanning |
WO2007062111A1 (en) * | 2005-11-23 | 2007-05-31 | Fsi International, Inc. | Process for removing material from substrates |
KR100762689B1 (ko) * | 2005-12-08 | 2007-10-01 | 삼성에스디아이 주식회사 | 휴대용 표시장치 |
US7752401B2 (en) | 2006-01-25 | 2010-07-06 | Netapp, Inc. | Method and apparatus to automatically commit files to WORM status |
US7848261B2 (en) * | 2006-02-17 | 2010-12-07 | Isilon Systems, Inc. | Systems and methods for providing a quiescing protocol |
US7756898B2 (en) * | 2006-03-31 | 2010-07-13 | Isilon Systems, Inc. | Systems and methods for notifying listeners of events |
US7711913B1 (en) * | 2006-04-20 | 2010-05-04 | Crossroads Systems, Inc. | System and method for backing up extended copy commands |
US7650533B1 (en) | 2006-04-20 | 2010-01-19 | Netapp, Inc. | Method and system for performing a restoration in a continuous data protection system |
US7769723B2 (en) * | 2006-04-28 | 2010-08-03 | Netapp, Inc. | System and method for providing continuous data protection |
US7877757B2 (en) * | 2006-05-05 | 2011-01-25 | Microsoft Corporation | Work item event monitor for procession of queued events |
KR101381551B1 (ko) | 2006-05-05 | 2014-04-11 | 하이버 인크 | 그룹 기반의 완료 및 증분 컴퓨터 파일 백업 시스템, 프로세스 및 장치 |
TWI316188B (en) * | 2006-05-17 | 2009-10-21 | Ind Tech Res Inst | Mechanism and method to snapshot data |
US8539056B2 (en) * | 2006-08-02 | 2013-09-17 | Emc Corporation | Systems and methods for configuring multiple network interfaces |
GB0616068D0 (en) * | 2006-08-12 | 2006-09-20 | Ibm | Method,Apparatus And Computer Program For Transaction Recovery |
US7899800B2 (en) * | 2006-08-18 | 2011-03-01 | Isilon Systems, Inc. | Systems and methods for providing nonlinear journaling |
US7590652B2 (en) | 2006-08-18 | 2009-09-15 | Isilon Systems, Inc. | Systems and methods of reverse lookup |
US7680836B2 (en) * | 2006-08-18 | 2010-03-16 | Isilon Systems, Inc. | Systems and methods for a snapshot of data |
US7953704B2 (en) | 2006-08-18 | 2011-05-31 | Emc Corporation | Systems and methods for a snapshot of data |
US7882071B2 (en) * | 2006-08-18 | 2011-02-01 | Isilon Systems, Inc. | Systems and methods for a snapshot of data |
US7822932B2 (en) * | 2006-08-18 | 2010-10-26 | Isilon Systems, Inc. | Systems and methods for providing nonlinear journaling |
US7676691B2 (en) | 2006-08-18 | 2010-03-09 | Isilon Systems, Inc. | Systems and methods for providing nonlinear journaling |
US7680842B2 (en) * | 2006-08-18 | 2010-03-16 | Isilon Systems, Inc. | Systems and methods for a snapshot of data |
US20080154979A1 (en) * | 2006-12-21 | 2008-06-26 | International Business Machines Corporation | Apparatus, system, and method for creating a backup schedule in a san environment based on a recovery plan |
US20080155191A1 (en) * | 2006-12-21 | 2008-06-26 | Anderson Robert J | Systems and methods for providing heterogeneous storage systems |
US8286029B2 (en) * | 2006-12-21 | 2012-10-09 | Emc Corporation | Systems and methods for managing unavailable storage devices |
US7593938B2 (en) * | 2006-12-22 | 2009-09-22 | Isilon Systems, Inc. | Systems and methods of directory entry encodings |
US7509448B2 (en) * | 2007-01-05 | 2009-03-24 | Isilon Systems, Inc. | Systems and methods for managing semantic locks |
US7779048B2 (en) | 2007-04-13 | 2010-08-17 | Isilon Systems, Inc. | Systems and methods of providing possible value ranges |
US8966080B2 (en) | 2007-04-13 | 2015-02-24 | Emc Corporation | Systems and methods of managing resource utilization on a threaded computer system |
US7900015B2 (en) * | 2007-04-13 | 2011-03-01 | Isilon Systems, Inc. | Systems and methods of quota accounting |
US7685186B2 (en) | 2007-06-25 | 2010-03-23 | Microsoft Corporation | Optimized and robust in-place data transformation |
US7882068B2 (en) * | 2007-08-21 | 2011-02-01 | Isilon Systems, Inc. | Systems and methods for adaptive copy on write |
US7966289B2 (en) * | 2007-08-21 | 2011-06-21 | Emc Corporation | Systems and methods for reading objects in a file system |
US7949692B2 (en) * | 2007-08-21 | 2011-05-24 | Emc Corporation | Systems and methods for portals into snapshot data |
US8078421B1 (en) | 2007-12-19 | 2011-12-13 | Western Digital Technologies, Inc. | Multi-cell disk drive test system providing a power recovery mode |
US7949636B2 (en) | 2008-03-27 | 2011-05-24 | Emc Corporation | Systems and methods for a read only mode for a portion of a storage system |
US7953709B2 (en) * | 2008-03-27 | 2011-05-31 | Emc Corporation | Systems and methods for a read only mode for a portion of a storage system |
US7984324B2 (en) * | 2008-03-27 | 2011-07-19 | Emc Corporation | Systems and methods for managing stalled storage devices |
US7870345B2 (en) | 2008-03-27 | 2011-01-11 | Isilon Systems, Inc. | Systems and methods for managing stalled storage devices |
JP4627327B2 (ja) * | 2008-05-23 | 2011-02-09 | 富士通株式会社 | 異常判定装置 |
KR101323741B1 (ko) * | 2008-12-26 | 2013-10-30 | 삼성전자주식회사 | 네비게이션 장치의 궤적 컨텐츠 생성 및 검색 방법 및 장치 |
US8832684B2 (en) * | 2009-06-18 | 2014-09-09 | The Johns Hopkins University | Methods for improving atomicity of runtime inspections |
US20110289289A1 (en) * | 2010-05-20 | 2011-11-24 | Microsoft Corporation | Backup and restore of items using bounded checkpoint and log buffers in memory |
US8453000B2 (en) | 2010-08-31 | 2013-05-28 | Infinidat Ltd. | Method and system for reducing power consumption in an emergency shut-down situation |
US8255637B2 (en) | 2010-09-27 | 2012-08-28 | Infinidat Ltd. | Mass storage system and method of operating using consistency checkpoints and destaging |
US8527546B2 (en) | 2010-11-25 | 2013-09-03 | International Business Machines Corporation | Generating a checkpoint image for use with an in-memory database |
US10140699B2 (en) | 2010-12-07 | 2018-11-27 | University Of Iowa Research Foundation | Optimal, user-friendly, object background separation |
EP2665406B1 (en) | 2011-01-20 | 2021-03-10 | University of Iowa Research Foundation | Automated determination of arteriovenous ratio in images of blood vessels |
US9155320B2 (en) * | 2011-07-06 | 2015-10-13 | International Business Machines Corporation | Prefix-based leaf node storage for database system |
JP5853819B2 (ja) * | 2012-03-29 | 2016-02-09 | 富士通株式会社 | 制御プログラム、制御方法、記憶制御装置および情報処理システム |
US9545196B2 (en) | 2012-05-04 | 2017-01-17 | University Of Iowa Research Foundation | Automated assessment of glaucoma loss from optical coherence tomography |
US10387331B2 (en) * | 2012-06-05 | 2019-08-20 | Vmware, Inc. | Process for maintaining data write ordering through a cache |
JP5948416B2 (ja) * | 2012-07-03 | 2016-07-06 | 富士通株式会社 | 情報処理装置、情報保存処理プログラム及び情報保存処理方法 |
US9065746B2 (en) * | 2012-08-24 | 2015-06-23 | Vce Company, Llc | Compliance testing engine for integrated computing system |
US9268598B2 (en) * | 2012-09-13 | 2016-02-23 | International Business Machines Corporation | Recording and profiling transaction failure source addresses and states of validity indicator corresponding to addresses of aborted transaction in hardware transactional memories |
US9619345B2 (en) | 2012-09-13 | 2017-04-11 | International Business Machines Corporation | Apparatus for determining failure context in hardware transactional memories |
CN104662552B (zh) * | 2012-10-19 | 2017-12-12 | 迈克菲股份有限公司 | 安全的盘访问控制 |
US9183246B2 (en) * | 2013-01-15 | 2015-11-10 | Microsoft Technology Licensing, Llc | File system with per-file selectable integrity |
US9251002B2 (en) | 2013-01-15 | 2016-02-02 | Stratus Technologies Bermuda Ltd. | System and method for writing checkpointing data |
US9146868B1 (en) * | 2013-01-17 | 2015-09-29 | Symantec Corporation | Systems and methods for eliminating inconsistencies between backing stores and caches |
WO2014143891A1 (en) * | 2013-03-15 | 2014-09-18 | University Of Iowa Research Foundation | Automated separation of binary overlapping trees |
WO2015038137A1 (en) * | 2013-09-13 | 2015-03-19 | Hewlett-Packard Development Company, L.P. | Failure recovery of a task state in batch-based stream processing |
US9507674B2 (en) * | 2013-11-22 | 2016-11-29 | Netapp, Inc. | Methods for preserving state across a failure and devices thereof |
ES2652262T3 (es) | 2013-12-30 | 2018-02-01 | Stratus Technologies Bermuda Ltd. | Método de retardar puntos de comprobación inspeccionando paquetes de red |
WO2015102875A1 (en) | 2013-12-30 | 2015-07-09 | Stratus Technologies Bermuda Ltd. | Checkpointing systems and methods of using data forwarding |
US9652338B2 (en) | 2013-12-30 | 2017-05-16 | Stratus Technologies Bermuda Ltd. | Dynamic checkpointing systems and methods |
KR20150081810A (ko) * | 2014-01-07 | 2015-07-15 | 한국전자통신연구원 | 데이터 저장장치에 대한 다중 스냅샷 관리 방법 및 장치 |
WO2015143435A1 (en) | 2014-03-21 | 2015-09-24 | University Of Iowa Research Foundation | Graph search using non-euclidean deformed graph |
US10019323B1 (en) * | 2014-03-25 | 2018-07-10 | EMC IP Holding Company LLC | Method and system for container data recovery in a storage system |
US9304865B2 (en) | 2014-03-26 | 2016-04-05 | International Business Machines Corporation | Efficient handing of semi-asynchronous raid write failures |
US10198321B1 (en) * | 2014-04-01 | 2019-02-05 | Storone Ltd. | System and method for continuous data protection |
US10152396B2 (en) * | 2014-05-05 | 2018-12-11 | Oracle International Corporation | Time-based checkpoint target for database media recovery |
US9720752B2 (en) | 2014-10-20 | 2017-08-01 | Netapp, Inc. | Techniques for performing resynchronization on a clustered system |
GB2533342A (en) * | 2014-12-17 | 2016-06-22 | Ibm | Checkpointing module and method for storing checkpoints |
US9922056B2 (en) * | 2015-01-09 | 2018-03-20 | International Business Machines Corporation | Priority based failover for databases |
US10115194B2 (en) | 2015-04-06 | 2018-10-30 | IDx, LLC | Systems and methods for feature detection in retinal images |
RU2632133C2 (ru) | 2015-09-29 | 2017-10-02 | Общество С Ограниченной Ответственностью "Яндекс" | Способ (варианты) и система (варианты) создания модели прогнозирования и определения точности модели прогнозирования |
US11500854B2 (en) | 2015-10-30 | 2022-11-15 | International Business Machines Corporation | Selective data synchronization to troubleshoot production environment failures |
CN106897311B (zh) | 2015-12-21 | 2020-08-11 | 财团法人工业技术研究院 | 数据库批次更新方法、数据还原日志产生方法与存储装置 |
CN107220145B (zh) * | 2017-05-19 | 2021-06-01 | 北京计算机技术及应用研究所 | 一种闪存数据库数据恢复的方法 |
US10613948B2 (en) | 2017-08-31 | 2020-04-07 | International Business Machines Corporation | Repairing partially completed transactions in fast consensus protocol |
RU2693324C2 (ru) | 2017-11-24 | 2019-07-02 | Общество С Ограниченной Ответственностью "Яндекс" | Способ и сервер преобразования значения категориального фактора в его числовое представление |
RU2692048C2 (ru) | 2017-11-24 | 2019-06-19 | Общество С Ограниченной Ответственностью "Яндекс" | Способ и сервер для преобразования значения категориального фактора в его числовое представление и для создания разделяющего значения категориального фактора |
CN108897794B (zh) * | 2018-06-12 | 2020-11-27 | 东软集团股份有限公司 | 无主键数据表的同步方法、装置、存储介质和电子设备 |
CN109189608B (zh) * | 2018-08-13 | 2019-07-26 | 武汉达梦数据库有限公司 | 一种保证复制事务一致性的方法以及相应的复制装置 |
KR20240036122A (ko) * | 2018-08-23 | 2024-03-19 | 애플 인크. | 프로세스 데이터 공유 방법 및 디바이스 |
KR102610395B1 (ko) * | 2019-01-22 | 2023-12-05 | 삼성전자주식회사 | 비휘발성 메모리 장치를 포함하는 메모리 시스템 |
JP7335502B2 (ja) | 2019-10-07 | 2023-08-30 | 富士通株式会社 | 情報処理システム、情報処理方法および情報処理プログラム |
US12099524B2 (en) * | 2022-06-09 | 2024-09-24 | Salesforce, Inc. | Database systems and related replication monitoring methods |
US20240193141A1 (en) * | 2022-12-08 | 2024-06-13 | Google Llc | Parameter-Based Versioning For Log-Based Block Devices |
Family Cites Families (160)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3444528A (en) * | 1966-11-17 | 1969-05-13 | Martin Marietta Corp | Redundant computer systems |
US3533082A (en) | 1968-01-15 | 1970-10-06 | Ibm | Instruction retry apparatus including means for restoring the original contents of altered source operands |
US3715729A (en) * | 1971-03-10 | 1973-02-06 | Ibm | Timing control for a multiprocessor system |
GB1509193A (en) | 1974-04-17 | 1978-05-04 | Nat Res Dev | Computer systems |
US4228496A (en) | 1976-09-07 | 1980-10-14 | Tandem Computers Incorporated | Multiprocessor system |
US4156907A (en) * | 1977-03-02 | 1979-05-29 | Burroughs Corporation | Data communications subsystem |
US4191996A (en) * | 1977-07-22 | 1980-03-04 | Chesley Gilman D | Self-configurable computer and memory system |
US4141066A (en) * | 1977-09-13 | 1979-02-20 | Honeywell Inc. | Process control system with backup process controller |
US4351023A (en) | 1980-04-11 | 1982-09-21 | The Foxboro Company | Process control system with improved system security features |
US4403303A (en) | 1981-05-15 | 1983-09-06 | Beehive International | Terminal configuration manager |
US4453215A (en) | 1981-10-01 | 1984-06-05 | Stratus Computer, Inc. | Central processing apparatus for fault-tolerant computing |
ATE25779T1 (de) | 1981-10-01 | 1987-03-15 | Stratus Computer Inc | Digitale datenverarbeitungsanlage mit zuverlaessigkeits-bus-protokoll. |
US4459658A (en) | 1982-02-26 | 1984-07-10 | Bell Telephone Laboratories Incorporated | Technique for enabling operation of a computer system with a consistent state of a linked list data structure after a main memory failure |
DE3215177A1 (de) * | 1982-04-23 | 1983-10-27 | Hartmann & Braun Ag, 6000 Frankfurt | Ueberwachungssystem fuer eine oder mehrere, gleichartig aufgebaute prozessstationen |
US4483001A (en) | 1982-06-16 | 1984-11-13 | International Business Machines Corporation | Online realignment of memory faults |
US4479214A (en) | 1982-06-16 | 1984-10-23 | International Business Machines Corporation | System for updating error map of fault tolerant memory |
US4507751A (en) * | 1982-06-21 | 1985-03-26 | International Business Machines Corporation | Method and apparatus for logging journal data using a log write ahead data set |
US4648031A (en) * | 1982-06-21 | 1987-03-03 | International Business Machines Corporation | Method and apparatus for restarting a computing system |
US4498145A (en) * | 1982-06-30 | 1985-02-05 | International Business Machines Corporation | Method for assuring atomicity of multi-row update operations in a database system |
US4521847A (en) | 1982-09-21 | 1985-06-04 | Xerox Corporation | Control system job recovery after a malfunction |
JPS5960667A (ja) * | 1982-09-30 | 1984-04-06 | Hitachi Ltd | 磁気テ−プジヤ−ナルの判別方法 |
US4819154A (en) * | 1982-12-09 | 1989-04-04 | Sequoia Systems, Inc. | Memory back up system with one cache memory and two physically separated main memories |
EP0128945B1 (en) * | 1982-12-09 | 1991-01-30 | Sequoia Systems, Inc. | Memory backup system |
JPH0670880B2 (ja) * | 1983-01-21 | 1994-09-07 | 株式会社日立マイコンシステム | 半導体記憶装置 |
US4639856A (en) * | 1983-11-04 | 1987-01-27 | International Business Machines Corporation | Dual stream processor apparatus |
US4607365A (en) | 1983-11-14 | 1986-08-19 | Tandem Computers Incorporated | Fault-tolerant communications controller system |
US4608688A (en) | 1983-12-27 | 1986-08-26 | At&T Bell Laboratories | Processing system tolerant of loss of access to secondary storage |
US4959774A (en) | 1984-07-06 | 1990-09-25 | Ampex Corporation | Shadow memory system for storing variable backup blocks in consecutive time periods |
US4674038A (en) | 1984-12-28 | 1987-06-16 | International Business Machines Corporation | Recovery of guest virtual machines after failure of a host real machine |
US4754397A (en) | 1985-02-15 | 1988-06-28 | Tandem Computers Incorporated | Fault tolerant modular subsystems for computers |
US4703481A (en) | 1985-08-16 | 1987-10-27 | Hewlett-Packard Company | Method and apparatus for fault recovery within a computing system |
US4814971A (en) * | 1985-09-11 | 1989-03-21 | Texas Instruments Incorporated | Virtual memory recovery system using persistent roots for selective garbage collection and sibling page timestamping for defining checkpoint state |
US4713811A (en) | 1985-11-07 | 1987-12-15 | Tytronix Corporation | Automatic mode switching unit for a serial communications data system |
US4736339A (en) * | 1985-12-16 | 1988-04-05 | Gte Communication Systems Corporation | Circuit for simplex I/O terminal control by duplex processors |
US4703421A (en) | 1986-01-03 | 1987-10-27 | Gte Communication Systems Corporation | Ready line synchronization circuit for use in a duplicated computer system |
US4878167A (en) | 1986-06-30 | 1989-10-31 | International Business Machines Corporation | Method for managing reuse of hard log space by mapping log data during state changes and discarding the log data |
US5089958A (en) * | 1989-01-23 | 1992-02-18 | Vortex Systems, Inc. | Fault tolerant computer backup system |
ATE148241T1 (de) * | 1989-06-13 | 1997-02-15 | Ibm | Verfahren zum entfernen unbestätigter änderungen an gespeicherten daten durch ein datenbankverwaltungssystem |
EP0428021B1 (en) * | 1989-11-03 | 1998-09-02 | Compaq Computer Corporation | Method for data distribution in a disk array |
JP2772103B2 (ja) | 1990-03-28 | 1998-07-02 | 株式会社東芝 | 計算機システム立上げ方式 |
US5201044A (en) * | 1990-04-16 | 1993-04-06 | International Business Machines Corporation | Data processing method for file status recovery includes providing a log file of atomic transactions that may span both volatile and non volatile memory |
US5479654A (en) | 1990-04-26 | 1995-12-26 | Squibb Data Systems, Inc. | Apparatus and method for reconstructing a file from a difference signature and an original file |
EP0465018B1 (en) | 1990-06-29 | 1997-05-14 | Oracle Corporation | Method and apparatus for optimizing undo log usage |
US5544347A (en) * | 1990-09-24 | 1996-08-06 | Emc Corporation | Data storage system controlled remote data mirroring with respectively maintained data indices |
US5212784A (en) * | 1990-10-22 | 1993-05-18 | Delphi Data, A Division Of Sparks Industries, Inc. | Automated concurrent data backup system |
US5255270A (en) | 1990-11-07 | 1993-10-19 | Emc Corporation | Method of assuring data write integrity on a data storage device |
JP2603757B2 (ja) | 1990-11-30 | 1997-04-23 | 富士通株式会社 | アレ−ディスク装置の制御方法 |
US5235601A (en) | 1990-12-21 | 1993-08-10 | Array Technology Corporation | On-line restoration of redundancy information in a redundant array system |
JP2993528B2 (ja) * | 1991-05-18 | 1999-12-20 | 富士通株式会社 | テキスト管理・復元方式 |
EP0516900B1 (en) * | 1991-06-04 | 1996-05-01 | International Business Machines Corporation | Data backup and recovery in a data processing system |
US5764877A (en) | 1991-06-25 | 1998-06-09 | Digital Equipment Corporation | Media recovery with time-split B-trees |
US5287501A (en) * | 1991-07-11 | 1994-02-15 | Digital Equipment Corporation | Multilevel transaction recovery in a database system which loss parent transaction undo operation upon commit of child transaction |
US5325519A (en) | 1991-10-18 | 1994-06-28 | Texas Microsystems, Inc. | Fault tolerant computer with archival rollback capabilities |
US5280611A (en) * | 1991-11-08 | 1994-01-18 | International Business Machines Corporation | Method for managing database recovery from failure of a shared store in a system including a plurality of transaction-based systems of the write-ahead logging type |
US5802264A (en) | 1991-11-15 | 1998-09-01 | Fujitsu Limited | Background data reconstruction in a storage device array system |
US5369758A (en) * | 1991-11-15 | 1994-11-29 | Fujitsu Limited | Checking for proper locations of storage devices in a storage array |
US5297258A (en) * | 1991-11-21 | 1994-03-22 | Ast Research, Inc. | Data logging for hard disk data storage systems |
US5450546A (en) | 1992-01-31 | 1995-09-12 | Adaptec, Inc. | Intelligent hardware for automatically controlling buffer memory storage space in a disk drive |
US5339406A (en) | 1992-04-03 | 1994-08-16 | Sun Microsystems, Inc. | Reconstructing symbol definitions of a dynamically configurable operating system defined at the time of a system crash |
US5241670A (en) | 1992-04-20 | 1993-08-31 | International Business Machines Corporation | Method and system for automated backup copy ordering in a time zero backup copy session |
US5331646A (en) | 1992-05-08 | 1994-07-19 | Compaq Computer Corporation | Error correcting code technique for improving reliablility of a disk array |
JPH05341918A (ja) | 1992-05-12 | 1993-12-24 | Internatl Business Mach Corp <Ibm> | 二重化デイスク記憶装置システムを構成するための接続装置 |
US5414840A (en) * | 1992-06-25 | 1995-05-09 | Digital Equipment Corporation | Method and system for decreasing recovery time for failed atomic transactions by keeping copies of altered control structures in main memory |
US5404361A (en) * | 1992-07-27 | 1995-04-04 | Storage Technology Corporation | Method and apparatus for ensuring data integrity in a dynamically mapped data storage subsystem |
US5530855A (en) | 1992-10-13 | 1996-06-25 | International Business Machines Corporation | Replicating a database by the sequential application of hierarchically sorted log records |
US5483468A (en) * | 1992-10-23 | 1996-01-09 | International Business Machines Corporation | System and method for concurrent recording and displaying of system performance data |
US5404508A (en) * | 1992-12-03 | 1995-04-04 | Unisys Corporation | Data base backup and recovery system and method |
US5487160A (en) * | 1992-12-04 | 1996-01-23 | At&T Global Information Solutions Company | Concurrent image backup for disk storage system |
US5469573A (en) | 1993-02-26 | 1995-11-21 | Sytron Corporation | Disk operating system backup and recovery system |
US5557770A (en) | 1993-03-24 | 1996-09-17 | International Business Machines Corporation | Disk storage apparatus and method for converting random writes to sequential writes while retaining physical clustering on disk |
US5659747A (en) | 1993-04-22 | 1997-08-19 | Microsoft Corporation | Multiple level undo/redo mechanism |
US5809340A (en) | 1993-04-30 | 1998-09-15 | Packard Bell Nec | Adaptively generating timing signals for access to various memory devices based on stored profiles |
GB9323453D0 (en) * | 1993-11-13 | 1994-01-05 | Calluna Tech Ltd | Security system for portable hard disk drive |
US5454039A (en) | 1993-12-06 | 1995-09-26 | International Business Machines Corporation | Software-efficient pseudorandom function and the use thereof for encryption |
US5530846A (en) | 1993-12-29 | 1996-06-25 | International Business Machines Corporation | System for decoupling clock amortization from clock synchronization |
JP2846837B2 (ja) * | 1994-05-11 | 1999-01-13 | インターナショナル・ビジネス・マシーンズ・コーポレイション | 障害を早期検出するためのソフトウェア制御方式のデータ処理方法 |
US5638509A (en) | 1994-06-10 | 1997-06-10 | Exabyte Corporation | Data storage and protection system |
DE69506404T2 (de) | 1994-06-10 | 1999-05-27 | Texas Micro Inc., Houston, Tex. | Hauptspeichervorrichtung und wiederanlaufkennzeichnungsverfahren für ein fehlertolerantes rechnersystem |
US5729719A (en) * | 1994-09-07 | 1998-03-17 | Adaptec, Inc. | Synchronization circuit for clocked signals of similar frequencies |
US5535188A (en) | 1994-10-03 | 1996-07-09 | International Business Machines Corporation | Data security protection for information recorded on a rewritable storage medium using a write-once read-many storage medium |
US5649152A (en) | 1994-10-13 | 1997-07-15 | Vinca Corporation | Method and system for providing a static snapshot of data stored on a mass storage system |
US5574906A (en) | 1994-10-24 | 1996-11-12 | International Business Machines Corporation | System and method for reducing storage requirement in backup subsystems utilizing segmented compression and differencing |
US5634096A (en) * | 1994-10-31 | 1997-05-27 | International Business Machines Corporation | Using virtual disks for disk system checkpointing |
US5623598A (en) * | 1994-11-22 | 1997-04-22 | Hewlett-Packard Company | Method for identifying ways to improve performance in computer data storage systems |
US5590274A (en) * | 1995-01-23 | 1996-12-31 | Tandem Computers Incorporated | Multi-volume audit trails for fault tolerant computers |
US5740433A (en) * | 1995-01-24 | 1998-04-14 | Tandem Computers, Inc. | Remote duplicate database facility with improved throughput and fault tolerance |
US5794252A (en) * | 1995-01-24 | 1998-08-11 | Tandem Computers, Inc. | Remote duplicate database facility featuring safe master audit trail (safeMAT) checkpointing |
US5604862A (en) * | 1995-03-14 | 1997-02-18 | Network Integrity, Inc. | Continuously-snapshotted protection of computer files |
US5799141A (en) | 1995-06-09 | 1998-08-25 | Qualix Group, Inc. | Real-time data protection system and method |
US5758057A (en) | 1995-06-21 | 1998-05-26 | Mitsubishi Denki Kabushiki Kaisha | Multi-media storage system |
US5715438A (en) * | 1995-07-19 | 1998-02-03 | International Business Machines Corporation | System and method for providing time base adjustment |
WO1997008623A1 (en) | 1995-08-23 | 1997-03-06 | Symantec Corporation | Coherent file system access during defragmentation operations on a storage media |
US5740397A (en) * | 1995-10-11 | 1998-04-14 | Arco Computer Products, Inc. | IDE disk drive adapter for computer backup and fault tolerance |
US5774643A (en) * | 1995-10-13 | 1998-06-30 | Digital Equipment Corporation | Enhanced raid write hole protection and recovery |
US5745906A (en) * | 1995-11-14 | 1998-04-28 | Deltatech Research, Inc. | Method and apparatus for merging delta streams to reconstruct a computer file |
US5729743A (en) * | 1995-11-17 | 1998-03-17 | Deltatech Research, Inc. | Computer apparatus and method for merging system deltas |
US5864657A (en) * | 1995-11-29 | 1999-01-26 | Texas Micro, Inc. | Main memory system and checkpointing protocol for fault-tolerant computer system |
US5751939A (en) | 1995-11-29 | 1998-05-12 | Texas Micro, Inc. | Main memory system and checkpointing protocol for fault-tolerant computer system using an exclusive-or memory |
US5790773A (en) | 1995-12-29 | 1998-08-04 | Symbios, Inc. | Method and apparatus for generating snapshot copies for data backup in a raid subsystem |
US5777874A (en) | 1996-02-12 | 1998-07-07 | Allen-Bradley Company, Inc. | Programmable controller backup system |
US5724501A (en) * | 1996-03-29 | 1998-03-03 | Emc Corporation | Quick recovery of write cache in a fault tolerant I/O system |
US5778392A (en) | 1996-04-01 | 1998-07-07 | Symantec Corporation | Opportunistic tile-pulling, vacancy-filling method and apparatus for file-structure reorganization |
US5889935A (en) * | 1996-05-28 | 1999-03-30 | Emc Corporation | Disaster control features for remote data mirroring |
US5857208A (en) * | 1996-05-31 | 1999-01-05 | Emc Corporation | Method and apparatus for performing point in time backup operation in a computer system |
JP3672208B2 (ja) * | 1996-07-02 | 2005-07-20 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 階層化トランザクション処理方法 |
US5893140A (en) * | 1996-08-14 | 1999-04-06 | Emc Corporation | File server having a file system cache and protocol for truly safe asynchronous writes |
US6347365B1 (en) * | 1996-08-23 | 2002-02-12 | Emc Corporation | Data storage system having a[n] memory responsive to clock pulses produced on a bus and clock pulses produced by an internal clock |
US5845292A (en) * | 1996-12-16 | 1998-12-01 | Lucent Technologies Inc. | System and method for restoring a distributed checkpointed database |
JPH10240620A (ja) * | 1996-12-26 | 1998-09-11 | Toshiba Corp | コンピュータシステムおよび同システムにおけるチェックポイントイメージ保存方法 |
US6016553A (en) * | 1997-09-05 | 2000-01-18 | Wild File, Inc. | Method, software and apparatus for saving, using and recovering data |
US6014690A (en) * | 1997-10-24 | 2000-01-11 | Digital Equipment Corporation | Employing multiple channels for deadlock avoidance in a cache coherency protocol |
US6357015B1 (en) * | 1997-10-27 | 2002-03-12 | Mitsubishi Denki Kabushiki Kaisha | Data interface and high-speed communication system using the same |
US6035306A (en) * | 1997-11-24 | 2000-03-07 | Terascape Software Inc. | Method for improving performance of large databases |
US6018746A (en) * | 1997-12-23 | 2000-01-25 | Unisys Corporation | System and method for managing recovery information in a transaction processing system |
US6374363B1 (en) * | 1998-02-24 | 2002-04-16 | Adaptec, Inc. | Method for generating a footprint image file for an intelligent backup and restoring system |
US6205527B1 (en) * | 1998-02-24 | 2001-03-20 | Adaptec, Inc. | Intelligent backup and restoring system and method for implementing the same |
US6532535B1 (en) * | 1998-02-24 | 2003-03-11 | Adaptec, Inc. | Method for managing primary and secondary storage devices in an intelligent backup and restoring system |
US6363487B1 (en) * | 1998-03-16 | 2002-03-26 | Roxio, Inc. | Apparatus and method of creating a firewall data protection |
US6054987A (en) * | 1998-05-29 | 2000-04-25 | Hewlett-Packard Company | Method of dynamically creating nodal views of a managed network |
US6369820B1 (en) * | 1998-06-02 | 2002-04-09 | International Business Machines Corporation | Method and system for graphically displaying trend and range data for a variety of systems |
US6366987B1 (en) * | 1998-08-13 | 2002-04-02 | Emc Corporation | Computer data storage physical backup and logical restore |
US6381635B1 (en) * | 1998-11-19 | 2002-04-30 | Ncr Corporation | Method for displaying multiple performance measurements of a web site using a platform independent program |
US6542975B1 (en) * | 1998-12-24 | 2003-04-01 | Roxio, Inc. | Method and system for backing up data over a plurality of volumes |
US6920537B2 (en) * | 1998-12-31 | 2005-07-19 | Emc Corporation | Apparatus and methods for copying, backing up and restoring logical objects in a computer storage system by transferring blocks out of order or in parallel |
US6553392B1 (en) * | 1999-02-04 | 2003-04-22 | Hewlett-Packard Development Company, L.P. | System and method for purging database update image files after completion of associated transactions |
US6345346B1 (en) * | 1999-02-26 | 2002-02-05 | Voom Technologies | Substantially instantaneous storage restoration for non-computer forensics applications |
US6505248B1 (en) * | 1999-03-24 | 2003-01-07 | Gte Data Services Incorporated | Method and system for monitoring and dynamically reporting a status of a remote server |
US6587962B1 (en) * | 1999-10-20 | 2003-07-01 | Hewlett-Packard Development Company, L.P. | Write request protection upon failure in a multi-computer system |
US20020049883A1 (en) * | 1999-11-29 | 2002-04-25 | Eric Schneider | System and method for restoring a computer system after a failure |
US6549992B1 (en) * | 1999-12-02 | 2003-04-15 | Emc Corporation | Computer data storage backup with tape overflow control of disk caching of backup data stream |
JP2001159993A (ja) * | 1999-12-03 | 2001-06-12 | Hitachi Ltd | 任意時刻の状態を参照できるデータの記憶方法及び装置 |
US6535967B1 (en) * | 2000-01-19 | 2003-03-18 | Storage Technology Corporation | Method and apparatus for transferring data between a primary storage system and a secondary storage system using a bridge volume |
JP4115060B2 (ja) * | 2000-02-02 | 2008-07-09 | 株式会社日立製作所 | 情報処理システムのデータ復旧方法及びディスクサブシステム |
US6704730B2 (en) * | 2000-02-18 | 2004-03-09 | Avamar Technologies, Inc. | Hash file system and method for use in a commonality factoring system |
US6539402B1 (en) * | 2000-02-22 | 2003-03-25 | Unisys Corporation | Using periodic spaces of block ID to improve additional recovery |
JP3868708B2 (ja) * | 2000-04-19 | 2007-01-17 | 株式会社日立製作所 | スナップショット管理方法及び計算機システム |
US20020010872A1 (en) * | 2000-05-31 | 2002-01-24 | Van Doren Stephen R. | Multi-agent synchronized initialization of a clock forwarded interconnect based computer system |
US6711572B2 (en) * | 2000-06-14 | 2004-03-23 | Xosoft Inc. | File system for distributing content in a data network and related methods |
US6701456B1 (en) * | 2000-08-29 | 2004-03-02 | Voom Technologies, Inc. | Computer system and method for maintaining an audit record for data restoration |
US6711693B1 (en) * | 2000-08-31 | 2004-03-23 | Hewlett-Packard Development Company, L.P. | Method for synchronizing plurality of time of year clocks in partitioned plurality of processors where each partition having a microprocessor configured as a multiprocessor backplane manager |
US6687322B1 (en) * | 2000-10-06 | 2004-02-03 | Adaptec, Inc. | Dual mode clock alignment and distribution device |
US6691245B1 (en) * | 2000-10-10 | 2004-02-10 | Lsi Logic Corporation | Data storage with host-initiated synchronization and fail-over of remote mirror |
US6928607B2 (en) * | 2000-10-19 | 2005-08-09 | Oracle International Corporation | Data integrity verification mechanism |
US6557089B1 (en) * | 2000-11-28 | 2003-04-29 | International Business Machines Corporation | Backup by ID-suppressed instant virtual copy then physical backup copy with ID reintroduced |
US6871271B2 (en) * | 2000-12-21 | 2005-03-22 | Emc Corporation | Incrementally restoring a mass storage device to a prior state |
US6718447B2 (en) * | 2001-06-28 | 2004-04-06 | Hewlett-Packard Development Company, L.P. | Method and system for providing logically consistent logical unit backup snapshots within one or more data storage devices |
US7027051B2 (en) * | 2001-06-29 | 2006-04-11 | International Business Machines Corporation | Graphical user interface for visualization of sampled data compared to entitled or reference levels |
GB0116686D0 (en) * | 2001-07-07 | 2001-08-29 | Hewlett Packard Co | Data backup |
US20030018657A1 (en) * | 2001-07-18 | 2003-01-23 | Imation Corp. | Backup of data on a network |
US6996668B2 (en) * | 2001-08-06 | 2006-02-07 | Seagate Technology Llc | Synchronized mirrored data in a data storage device |
US7043651B2 (en) * | 2001-09-18 | 2006-05-09 | Nortel Networks Limited | Technique for synchronizing clocks in a network |
JP2003108420A (ja) * | 2001-09-27 | 2003-04-11 | Hitachi Ltd | データストレージシステム及びこの制御方法 |
US7072915B2 (en) * | 2002-01-22 | 2006-07-04 | International Business Machines Corporation | Copy method supplementing outboard data copy with previously instituted copy-on-write logical snapshot to create duplicate consistent with source data as of designated time |
US6748504B2 (en) * | 2002-02-15 | 2004-06-08 | International Business Machines Corporation | Deferred copy-on-write of a snapshot |
US7844577B2 (en) * | 2002-07-15 | 2010-11-30 | Symantec Corporation | System and method for maintaining a backup storage system for a computer system |
US6981004B2 (en) * | 2002-09-16 | 2005-12-27 | Oracle International Corporation | Method and mechanism for implementing in-memory transaction logging records |
KR100484485B1 (ko) * | 2002-10-01 | 2005-04-20 | 한국전자통신연구원 | 비휘발성 메모리에의 데이터 저장 방법 및 장치 |
US7664771B2 (en) * | 2002-10-16 | 2010-02-16 | Microsoft Corporation | Optimizing defragmentation operations in a differential snapshotter |
US7000145B2 (en) * | 2003-06-18 | 2006-02-14 | International Business Machines Corporation | Method, system, and program for reverse restore of an incremental virtual copy |
US7174479B2 (en) * | 2003-09-10 | 2007-02-06 | Microsoft Corporation | Method and system for rollback-free failure recovery of multi-step procedures |
-
2004
- 2004-08-24 US US10/924,560 patent/US7409587B2/en active Active
-
2005
- 2005-08-24 EP EP12192530.9A patent/EP2575046A3/en not_active Withdrawn
- 2005-08-24 JP JP2007530101A patent/JP4848523B2/ja not_active Expired - Fee Related
- 2005-08-24 WO PCT/US2005/030164 patent/WO2006023990A2/en active Application Filing
- 2005-08-24 CN CNB2005800362779A patent/CN100562856C/zh active Active
- 2005-08-24 EP EP05789911.4A patent/EP1789879B1/en active Active
-
2010
- 2010-12-27 JP JP2010291108A patent/JP5438668B2/ja not_active Expired - Fee Related
Cited By (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103582868B (zh) * | 2011-05-27 | 2017-02-15 | 微软技术许可有限责任公司 | 操作者状态检查点 |
CN103582868A (zh) * | 2011-05-27 | 2014-02-12 | 微软公司 | 操作者状态检查点 |
US10554575B2 (en) | 2014-08-21 | 2020-02-04 | Microsoft Technology Licensing, Llc | Equitable sharing of system resources in workflow execution |
CN106663031A (zh) * | 2014-08-21 | 2017-05-10 | 微软技术许可有限责任公司 | 工作流执行中系统资源的公平共享 |
US10997569B2 (en) | 2015-01-04 | 2021-05-04 | Tencent Technology (Shenzhen) Company Limited | Method and device for processing virtual cards |
US11978025B2 (en) | 2015-01-04 | 2024-05-07 | Tencent Technology (Shenzhen) Company Limited | Method and device for processing virtual cards |
CN104680307B (zh) * | 2015-01-04 | 2019-09-13 | 腾讯科技(深圳)有限公司 | 一种物品事务处理方法和装置 |
CN104680307A (zh) * | 2015-01-04 | 2015-06-03 | 腾讯科技(深圳)有限公司 | 一种物品事务处理方法和装置 |
CN104657229A (zh) * | 2015-03-19 | 2015-05-27 | 哈尔滨工业大学 | 基于高可用性硬件检查点的多核处理器卷回恢复系统及其卷回恢复方法 |
CN104978241B (zh) * | 2015-05-29 | 2018-10-12 | 上海爱数信息技术股份有限公司 | 一种cow类型文件系统的数据恢复方法及装置 |
CN104978241A (zh) * | 2015-05-29 | 2015-10-14 | 上海爱数软件有限公司 | 一种cow类型文件系统的数据恢复方法及装置 |
CN111344682A (zh) * | 2017-10-30 | 2020-06-26 | Arm有限公司 | 存储设备的初始化 |
CN112527208A (zh) * | 2020-12-21 | 2021-03-19 | 江苏国科微电子有限公司 | 一种数据对拷方法、装置、系统及介质 |
CN113094229A (zh) * | 2021-03-26 | 2021-07-09 | 山东英信计算机技术有限公司 | 一种存储器及存储器防止信息丢失的检测方法 |
CN113094229B (zh) * | 2021-03-26 | 2023-02-28 | 山东英信计算机技术有限公司 | 一种存储器及存储器防止信息丢失的检测方法 |
CN115220958A (zh) * | 2021-04-16 | 2022-10-21 | 泰拉克劳德有限责任公司 | 用于提取和编目指定文件活动数据的系统和方法 |
CN113157512A (zh) * | 2021-04-29 | 2021-07-23 | 山东华芯半导体有限公司 | 实现大容量ssd在小内存机器上进行数据校验测试的方法 |
CN115687317A (zh) * | 2022-10-21 | 2023-02-03 | 南京上游软件有限公司 | 一种实现基于Java端多叉树对象增删改查服务的方法 |
CN115687317B (zh) * | 2022-10-21 | 2023-10-03 | 南京上游软件有限公司 | 一种实现基于Java端多叉树对象增删改查服务的方法 |
Also Published As
Publication number | Publication date |
---|---|
JP2008511082A (ja) | 2008-04-10 |
US7409587B2 (en) | 2008-08-05 |
WO2006023990A3 (en) | 2006-12-21 |
EP2575046A2 (en) | 2013-04-03 |
CN100562856C (zh) | 2009-11-25 |
EP1789879A2 (en) | 2007-05-30 |
WO2006023990A2 (en) | 2006-03-02 |
JP5438668B2 (ja) | 2014-03-12 |
EP2575046A3 (en) | 2016-11-30 |
US20060047925A1 (en) | 2006-03-02 |
JP2011129135A (ja) | 2011-06-30 |
EP1789879A4 (en) | 2010-04-28 |
EP1789879B1 (en) | 2017-11-15 |
JP4848523B2 (ja) | 2011-12-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100562856C (zh) | 使用检查点从存储事务故障中恢复 | |
CN101073070B (zh) | 提供数据存储器内位置的修改历史的系统和方法 | |
CN100517321C (zh) | 映象数据存储装置写时间映射 | |
CN104040481B (zh) | 用于融合、存储和检索增量式备份数据的方法和系统 | |
US8060713B1 (en) | Consolidating snapshots in a continuous data protection system using journaling | |
CN101501623B (zh) | 感知文件系统的块存储系统、装置和方法 | |
US7725760B2 (en) | Data storage system | |
US7577807B2 (en) | Methods and devices for restoring a portion of a data store | |
CN101414277B (zh) | 一种基于虚拟机的按需增量恢复容灾系统及方法 | |
US7904428B2 (en) | Methods and apparatus for recording write requests directed to a data store | |
CN101477486B (zh) | 一种基于扇区重组的文件备份恢复方法 | |
US7774565B2 (en) | Methods and apparatus for point in time data access and recovery | |
US7827362B2 (en) | Systems, apparatus, and methods for processing I/O requests | |
CN101661414B (zh) | 计算机系统及其备份方法 | |
US7239581B2 (en) | Systems and methods for synchronizing the internal clocks of a plurality of processor modules | |
US7631120B2 (en) | Methods and apparatus for optimally selecting a storage buffer for the storage of data | |
CN101872319A (zh) | 存储系统条件指示器及其使用方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1113206 Country of ref document: HK |
|
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: WD Ref document number: 1113206 Country of ref document: HK |