Patent Description:
Computing systems have become ubiquitous, ranging from small embedded devices to phones and tablets to PCs and backend servers. Each of these computing systems is designed to process software code. The software allows users to perform functions, interacting with the hardware provided by the computing system. In some cases, these computing systems allow users to establish and run virtual machines. These virtual machines may provide functionality not provided by the host operating system, or may comprise a different operating system altogether. In this manner, virtual machines may be used to extend the functionality of the computing system. Virtual machines may be backed up on virtual storage devices which themselves may be backed up to physical or virtual storage devices. Virtual machine hosts may also be configured to take snapshots which represent point-in-time images of the virtual machine. The VM snapshots or "checkpoints" include CPU state, memory state, storage state and other information necessary to completely recreate or restore the virtual machine to that point in time. <CIT> describes methods and systems for generating differential backup or roll forward data within a storage system. Snapshot copies are generated within the storage system using copy-on-write techniques to maintain the integrity of the snapshots so generated. As an atomic operation with the generation of any snapshot, a copy of the list of data saved by the copy-on-write operations in any earlier snapshots is retained with the newly generated snapshot. The saved overwritten data list and any pair of corresponding snapshots may then be used to generate an accurate differential block list for data to be included in a differential backup or in a roll forward operation. Thus a storage system may generate differential backups or roll forward updates by its own processing to relieve attached host systems from the processing burden. <CIT> describes systems for deployment of a plurality of guest computing systems in two or more locations simultaneously. The individual components of the system, method, and computer programs that compose the backup, recovery, networking, license management, and security enhancements; the collection of some or all of these components into a single system are also described. The invention is set forth in the independent claims. Embodiments of the invention are described in the dependent claims.

Embodiments described herein are directed to establishing efficient virtual machine reference points and to specifying a virtual machine reference point to query incremental changes. As used herein, virtual machine reference points allow computer systems to identify incremental changes from specific points in time on. For example, in one embodiment, a computer system accesses a stable virtual machine checkpoint that includes portions of underlying data stored in data storage, where the checkpoint is associated with a specific point in time. The computer system then queries the data storage to determine data storage identifiers that reference the point in time associated with the checkpoint and stores the determined data storage identifiers as a virtual machine reference point or virtual machine reference point artifacts, where each subsequent change to the data storage results in an update to the data storage identifier, so that virtual machine reference point is usable to identify incremental changes from specific points in time on. Virtual machine reference point artifacts allow for cases where a virtual machine has two (or more) virtual disks. Each virtual disk may have a different identifier for the same point in time, and the reference point artifact allows the computer system to associate both of those points in time as a common point. This will be explained further below.

In another embodiment, a computer system performs a method for specifying a virtual machine reference point to query incremental changes. The computer system establishes a stable, unchanging state within a virtual machine, where the stable state is associated with a checkpoint that includes corresponding state data and storage data. The computer system accesses previously generated reference points to identify differences in virtual machine state between the current stable state and a selected past stable point in time. The computer system also replicates the differences in virtual machine state between the current stable state and a selected past stable point in time. The differences may be replicated to a data storage device as an incremental backup, or may be used for remote replication or disaster recovery purposes.

Additional features and advantages will be set forth in the description which follows, and in part will be apparent to one of ordinary skill in the art from the description, or may be learned by the practice of the teachings herein. Features and advantages of embodiments described herein may be realized and obtained by means of the instruments and combinations particularly pointed out in the appended claims. Features of the embodiments described herein will become more fully apparent from the following description and appended claims.

To further clarify the above and other features of the embodiments described herein, a more particular description will be rendered by reference to the appended drawings. It is appreciated that these drawings depict only examples of the embodiments described herein and are therefore not to be considered limiting of its scope. The embodiments will be described and explained with additional specificity and detail through the use of the accompanying drawings in which:.

Embodiments described herein are directed to establishing efficient virtual machine reference points and to specifying a virtual machine reference point to query incremental changes. In one embodiment, a computer system accesses a stable virtual machine checkpoint that includes portions of underlying data stored in data storage, where the checkpoint is associated with a specific point in time. The computer system then queries the data storage to determine data storage identifiers that reference the point in time associated with the checkpoint and stores the determined data storage identifiers as a virtual machine reference point, where each subsequent change to the data storage results in an update to the data storage identifier, so that virtual machine reference point is usable to identify incremental changes from specific points in time on.

It should be noted, that although the method acts may be discussed in a certain order or illustrated in a flow chart as occurring in a particular order, no particular ordering is necessarily required unless specifically stated, or required because an act is dependent on another act being completed prior to the act being performed.

Embodiments described herein may implement various types of computing systems. These computing systems are now increasingly taking a wide variety of forms. Computing systems may, for example, be handheld devices such as smartphones or feature phones, appliances, laptop computers, wearable devices, desktop computers, mainframes, distributed computing systems, or even devices that have not conventionally been considered a computing system. In this description and in the claims, the term "computing system" is defined broadly as including any device or system (or combination thereof) that includes at least one physical and tangible processor, and a physical and tangible memory capable of having thereon computer-executable instructions that may be executed by the processor.

As illustrated in <FIG>, a computing system <NUM> typically includes at least one processing unit <NUM> and memory <NUM>. The memory <NUM> may be physical system memory, which may be volatile, non-volatile, or some combination of the two. The term "memory" may also be used herein to refer to non-volatile mass storage such as physical storage media. If the computing system is distributed, the processing, memory and/or storage capability may be distributed as well.

As used herein, the term "executable module" or "executable component" can refer to software objects, routines, or methods that may be executed on the computing system. The different components, modules, engines, and services described herein may be implemented as objects or processes that execute on the computing system (e.g., as separate threads).

If such acts are implemented in software, one or more processors of the associated computing system that performs the act direct the operation of the computing system in response to having executed computer-executable instructions. Computing system <NUM> may also contain communication channels that allow the computing system <NUM> to communicate with other message processors over a wired or wireless network.

Embodiments described herein may comprise or utilize a special-purpose or general-purpose computer system that includes computer hardware, such as, for example, one or more processors and system memory, as discussed in greater detail below. The system memory may be included within the overall memory <NUM>. The system memory may also be referred to as "main memory", and includes memory locations that are addressable by the at least one processing unit <NUM> over a memory bus in which case the address location is asserted on the memory bus itself. System memory has been traditionally volatile, but the principles described herein also apply in circumstances in which the system memory is partially, or even fully, non-volatile.

Such computer-readable media can be any available media that can be accessed by a general-purpose or special-purpose computer system. Computer-readable media that store computer-executable instructions and/or data structures are computer storage media. Computer-readable media that carry computer-executable instructions and/or data structures are transmission media. Thus, by way of example, and not limitation, embodiments of the invention can comprise at least two distinctly different kinds of computer-readable media: computer storage media and transmission media.

Computer storage media are physical hardware storage media that store computer-executable instructions and/or data structures. Physical hardware storage media include computer hardware, such as RAM, ROM, EEPROM, solid state drives ("SSDs"), flash memory, phase-change memory ("PCM"), optical disk storage, magnetic disk storage or other magnetic storage devices, or any other hardware storage device(s) which can be used to store program code in the form of computer-executable instructions or data structures, which can be accessed and executed by a general-purpose or special-purpose computer system to implement the disclosed functionality of the invention.

Further, upon reaching various computer system components, program code in the form of computer-executable instructions or data structures can be transferred automatically from transmission media to computer storage media (or vice versa). For example, computer-executable instructions or data structures received over a network or data link can be buffered in RAM within a network interface module (e.g., a "NIC"), and then eventually transferred to computer system RAM and/or to less volatile computer storage media at a computer system.

Those skilled in the art will appreciate that the principles described herein may be practiced in network computing environments with many types of computer system configurations, including, personal computers, desktop computers, laptop computers, message processors, hand-held devices, multi-processor systems, microprocessor-based or programmable consumer electronics, network PCs, minicomputers, mainframe computers, mobile telephones, PDAs, tablets, pagers, routers, switches, and the like. As such, in a distributed system environment, a computer system may include a plurality of constituent computer systems.

Still further, system architectures described herein can include a plurality of independent components that each contribute to the functionality of the system as a whole. This modularity allows for increased flexibility when approaching issues of platform scalability and, to this end, provides a variety of advantages. System complexity and growth can be managed more easily through the use of smaller-scale parts with limited functional scope. Platform fault tolerance is enhanced through the use of these loosely coupled modules. Individual components can be grown incrementally as business needs dictate. Modular development also translates to decreased time to market for new functionality. New functionality can be added or subtracted without impacting the core system.

<FIG> illustrates a computer architecture <NUM> in which at least one embodiment may be employed. Computer architecture <NUM> includes computer system <NUM>. Computer system <NUM> may be any type of local or distributed computer system, including a cloud computing system. The computer system <NUM> includes modules for performing a variety of different functions. For instance, the communications module <NUM> may be configured to communicate with other computing systems. The communications module <NUM> may include any wired or wireless communication means that can receive and/or transmit data to or from other computing systems. The communications module <NUM> may be configured to interact with databases, mobile computing devices (such as mobile phones or tablets), embedded or other types of computing systems.

The computer system <NUM> of <FIG> includes a checkpoint generating module <NUM>. The checkpoints <NUM> (or "snapshots" herein) generated by module <NUM> may include various portions of corresponding checkpoint data <NUM> which are stored in a data store <NUM>. The checkpoint data includes state data <NUM> and storage data <NUM>. The state data <NUM> includes CPU state, memory state and device state for various computer system devices. The storage data <NUM> may include data files, application files, operating system files, backup files or other data associated with a checkpoint. As such, the checkpoint data <NUM> associated with a checkpoint <NUM> includes sufficient data to perform a full restoration or backup from the data. The storage and state data for a given computer system or virtual machine, however, may include a significant amount of data.

In some cases, multiple checkpoints may be stored for a single computer system or virtual machine (VM). Each checkpoint may be generated at a different point in time. Then, once two or more checkpoints have been generated, they can be compared to one another to determine the differences between them. These differences can be applied to a differential backup which only backs up the differences between the two checkpoints. Embodiments described herein introduce the concept of a "reference point", "virtual machine reference point" or "VM reference point" herein. A VM reference point allows previous storage, memory and device state associated with a checkpoint to be deleted while still retaining the ability to create the differential backup. This is done by recording sequence numbers for state transitions.

Incremental backups of virtual machines involve tracking those changes to virtual machine storage that have occurred since a previous specified point in time (or points in time) of the VM. Traditionally, a point in time snapshot of a VM is represented by VM checkpoints. As mentioned above, storing full checkpoints may introduce a lot of overhead on the I/O throughput of the VM, as copy-on-write (or similar) techniques are often used to maintain a point-in-time image of the virtual storage. Maintaining VM checkpoints just for the purpose of referring to previous points in time for querying incremental changes is wasteful in terms of resource usage and negatively impacts performance of applications running in a VM.

The VM reference points described herein do not need to maintain exact point-in-time images of the VM state (e.g. storage, memory, device state). The VM reference points provide a representation of a previous instance in time of the VM. The reference points can be represented by unique identifiers (which can be globally unique identifiers (GUIDs), sequence numbers, or other identifiers.

In one embodiment, a VM reference point (e.g. <NUM> of <FIG>) is generated in the following manner: First, a point-in-time image (checkpoint <NUM>) is generated for a VM. This provides a stable copy to back up from. Along with creation of this image, a mechanism to track changes to the virtual storage is triggered. The triggering mechanism may be based on user interaction, input from an application or other source, or can be a manual trigger. Second, once the computer system or VM is backed up, the checkpoint is converted/demoted to a reference point (i.e. just a point-in-time representation that is not backed up by corresponding machine state). This frees up the overhead associated with a checkpoint while allowing tracking of the point in time that was last backed up. Third, during the next backup, a user may specify the reference point to query the incremental changes to the VM that occurred since the specified point in time.

The VM reference point <NUM> includes minimal metadata which enables querying incremental changes to the virtual storage devices since the point in time represented by the reference point. An example change tracking technique involves the virtual storage subsystem to maintain list of changed blocks across discrete points in time represented by sequence numbers. In such a system, the VM reference point for that VM would just include the sequence numbers of the virtual storage devices corresponding to that discrete point in time. The sequence numbers would be incremented each time a memory register changes. As the sequence numbers correspond to a point in time for a checkpoint, when data is written to disk, the sequence number is increased for each memory block that is written to. At least in some embodiments, the sequence numbers are the only thing stored in the VM reference point.

When a VM checkpoint (e.g. <NUM>) is converted to a VM reference point (e.g. <NUM>), the system releases all (or substantially all) of the resources that have been used to maintain a point-in-time image of the VM checkpoint. For instance, in one scenario, the system can free up the differencing virtual hard disks used to maintain the point-in-time image of a checkpoint, eliminating the overhead of performing I/O on a differencing virtual hard disk (VHD). This overhead VM state data is replaced by a metadata about the reference point. The reference point metadata only contains identifiers (e.g. sequence numbers) corresponding to the points in time for the virtual hard disks. This enables the reference point to be used later to query the incremental changes from this point in time.

As such, in <FIG>, once the checkpoint generating module <NUM> has generated a checkpoint <NUM> for a physical or virtual computer system, the query generating module <NUM> generates a query <NUM> to identify which data storage identifiers <NUM> reference the point in time associated with checkpoint <NUM>. These data storage identifiers <NUM> are sent to the computer system <NUM> and implemented by the VM reference point generating module <NUM> to generate a VM reference point <NUM>. It should be understood here that the data store <NUM> may be internal to or external to computer system <NUM>, and may include a single storage device (e.g. a hard disk or an optical disk) or may include many storage devices and, indeed, may include storage networks such as cloud storage networks. Thus, the data transfers for the query <NUM> and the data storage identifiers <NUM> may be internal (e.g. over hardware buses) or may be external over a computer network.

The VM reference point <NUM> thus includes those data storage identifiers that point to a specific point in time. Each subsequent change to the data storage results in an update to the data storage identifier. As such, the virtual machine reference point <NUM> is usable to identify incremental changes from specific points in time on. These concepts will be explained further below with regard to methods <NUM> and <NUM> of <FIG>, respectively, as well as the embodiments illustrated in <FIG>.

In view of the systems and architectures described above, methodologies that may be implemented in accordance with the disclosed subject matter will be better appreciated with reference to the flow charts of <FIG>. For purposes of simplicity of explanation, the methodologies are shown and described as a series of blocks. However, it should be understood and appreciated that the claimed subject matter is not limited by the order of the blocks, as some blocks may occur in different orders and/or concurrently with other blocks from what is depicted and described herein. Moreover, not all illustrated blocks may be required to implement the methodologies described hereinafter.

<FIG> illustrates a flowchart of a method <NUM> for establishing efficient virtual machine reference points. The method <NUM> will now be described with frequent reference to the components and data of environment <NUM>.

Method <NUM> includes accessing a stable virtual machine checkpoint that includes one or more portions of underlying data stored in data storage, the checkpoint being associated with a specific point in time (<NUM>). For example, checkpoint accessing module <NUM> may access checkpoint <NUM>. The checkpoint <NUM> may be generated based on a running computer system or virtual machine. The checkpoint may include operating system files, application files, registry files, data files or any other type of data including data currently stored in RAM or other memory areas. The checkpoint <NUM> thus has different state data <NUM> and storage data <NUM> in its underlying checkpoint data <NUM>. The checkpoint data <NUM> may be stored in data store <NUM> or in some other data store. The data store may include optical storage, solid state storage, magnetic storage or any other type of data storing hardware.

Method <NUM> next includes querying the data storage to determine one or more data storage identifiers that reference the point in time associated with the checkpoint (<NUM>) and storing the determined data storage identifiers as a virtual machine reference point, wherein each subsequent change to the data storage results in an update to the data storage identifier, such that virtual machine reference point is usable to identify incremental changes from specific points in time on (<NUM>). For example, the query generating module <NUM> may generate query <NUM> which queries the data store <NUM> to determine which data storage identifiers reference the point in time associated with the checkpoint <NUM>. These data storage identifiers <NUM> are then stored as a virtual machine reference point <NUM>. The VM reference point generating module <NUM> may thus access an existing checkpoint and demote it or convert it down from a checkpoint that is fully backed by state data <NUM> and storage data <NUM> to a VM reference point that includes only identifiers. In some cases, these identifiers may simply be sequence numbers of a storage device. There may be multiple data storage identifiers for a single disk, or only a data storage identifier for a disk. These concepts may be better understood with a reference to computing architecture <NUM> of <FIG>. It will be understood, however, that the example shown in <FIG> is only one embodiment, and that many different embodiments may be implemented.

<FIG> illustrates a computing system <NUM> that allows each subsequent change to the data storage to result in an update to the data storage identifier <NUM> and thereby allows a virtual machine reference point to be usable to identify incremental changes from specific points in time on. For example, assume the raw data <NUM> of <FIG> is stored in different data blocks in a data store (e.g. data store <NUM> of <FIG>). The raw data <NUM> may be stored locally on local disk <NUM>, or may be stored on an external data store. This data is backed up (e.g. by backup generating module <NUM>) in an initial backup <NUM> and stored as a full backup <NUM>. The full backup <NUM> thus includes each block of the raw data <NUM>. This is similar to creating a checkpoint <NUM>, where all of the checkpoint's data <NUM> is stored in data store <NUM>.

Portions of the raw data <NUM> may be currently in memory <NUM> and other portions may be on disk <NUM>. Since no changes have been made since the full backup <NUM>, the memory and disk are empty. When changes are made, those changes appear in the raw data <NUM>. This could be analogous of any change to a data file, operating system file or other data on the physical or virtual machine. Memory blocks in memory <NUM> that include updated data may be marked with a "<NUM>" or other changed block data identifiers <NUM>. Again, it will be understood that while sequential numbers are used as identifiers in this example, substantially any type of identifiers may be used including user-selected names, GUIDs, bitmaps or other identifiers. These identifiers are associated with a point in time. Then, using this point in time, virtual machine reference points may be used to identify incremental changes that point in time on.

If additional changes that are made to the raw data <NUM> at a later point in time, the memory <NUM> and on disk identifiers would indicate that new changes have occurred. The identifier (e.g. "<NUM>") indicates that the block of memory changed at the first point in time, and a "<NUM>" may indicate that the block of memory has changed at the second point in time. If a block of memory includes a "<NUM>, <NUM>" identifier, that may indicate that that block of memory changes at both the first point in time and the second point in time. If a power failure were to occur at this point, the data on disk would likely be saved, while anything in memory (e.g. in RAM) would be lost.

If a backup were to be performed at this stage, in light of the power failure, the raw data <NUM> would be backed up as a differential <NUM>, and would include all of the data in the changed data block at the second point in time (as indicated by identifier "<NUM>"). As such, the differential <NUM> would include the data changes that have occurred since the full backup, and a full, merged backup <NUM> would include the differential <NUM> combined with the full backup <NUM>. The reference point does not need to maintain an exact point in time image of the physical or virtual machine state (e.g. storage, memory, device state). It is just a representation of a previous instance in time of the physical or virtual machine. Using this VM reference point <NUM>, data backups can be performed, data migrations can be performed, data recovery and other data-related tasks can be performed.

In some embodiments, the state management module <NUM> of <FIG> may be used to establishing, at a current time, a stable, unchanging state within the virtual machine. The stable, unchanging state means that all appropriate buffers have been cleared, that no transactions are pending and that the state is not subject to change. The stable state may be established by performing any of the following: buffering subsequent data changes within the virtual machine, implementing temporary copy-on-write for subsequent data changes within the virtual machine, and generating a checkpoint for the virtual machine that includes one or more portions of underlying data.

This stable state is then associated with a virtual machine reference point <NUM> that includes data storage identifiers <NUM> corresponding to specific stable points in time (such as the current point in time). The computer system <NUM> may then access previously generated virtual machine reference points to identify differences in virtual machine state between the current stable state and a selected past, stable point in time, and perform at least one operation using data identified by the stored data storage identifiers and the current data storage identifiers <NUM>. As mentioned above, these data-related tasks may include backing data up, restoring data, replicating data, and providing data to a user or other specified entity such as a third party service or client.

The data identified by the stored data storage identifiers (e.g. the "Y? Barcelona!" of Figure 4E identified by the "<NUM>" data storage identifier) as well as the current data storage identifiers may be combined with a previously generated checkpoint (initial backup <NUM>) as shown in Figure <NUM> where data storage identifiers "<NUM>, <NUM>" are used to combine data identified by the stored data storage identifiers and the initial backup <NUM>. In this manner, a differential backup may be provided simply using data storage identifiers to update state changes.

In some embodiments, application programming interfaces (APIs) may be provided which allow third parties to store data storage identifiers as virtual machine reference points. In this manner, VM reference point functionality may be extended to third parties in a uniform fashion. These VM reference points may refer to full backups as well as incremental backups. Using these APIs, multiple vendors may perform data backups simultaneously. Each VM reference point (e.g. <NUM>) comprises metadata that includes the data storage identifiers <NUM>. As such, the virtual machine reference point is lightweight and is not backed by checkpoint data <NUM> including data storage, memory, or virtual machine state. In some cases, the VM reference point may be converted from a checkpoint and as such, may go from having data storage, memory, or virtual machine state as a checkpoint to having only metadata that includes data storage identifiers.

In some cases, a data-backed checkpoint may be reconstructed using changes identified between the virtual machine reference point <NUM> and a future point in time. For instance, the computer system <NUM> may use a VM reference point plus a change log (with pure metadata that describes what changed, not the data itself) to create full checkpoint by fetching data from service that is monitoring changes. Still further, at least in some cases, if a virtual machine is migrated, the virtual machine reference point information may be transferred along with the VM. As such, if the virtual machine is moved to a different computing system, the data identified by the virtual machine reference point is recoverable at the new computing system. Accordingly, various embodiments are described in which a VM reference point may be created and used to back up data.

<FIG> illustrates a flowchart of a method <NUM> for specifying a virtual machine reference point to query incremental changes. The method <NUM> will now be described with frequent reference to the components and data of environment <NUM> of <FIG>.

Method <NUM> includes establishing a stable, unchanging state within a virtual machine, the stable state being associated with a checkpoint that includes corresponding state data and storage data (<NUM>). For example, the state management module <NUM> of <FIG> may establish a stable, unchanging state within a virtual machine. The stable state is associated with checkpoint <NUM> which includes corresponding state data <NUM> and storage data <NUM>. The stable state may be established by buffering any subsequent data changes within the virtual machine, by implementing temporary copy-on-write for subsequent data changes within the virtual machine so that all subsequent data changes are stored and/or by generating a checkpoint for the virtual machine that includes underlying checkpoint data <NUM>.

Method <NUM> further includes accessing one or more previously generated reference points to identify one or more differences in virtual machine state between the current stable state and a selected past stable point in time (<NUM>) and replicating the differences in virtual machine state between the current stable state and a selected past stable point in time (<NUM>). The computer system <NUM> is configured to access VM reference points <NUM> to identify differences in VM state between the established stable state and another stable point in time, as identified by the data storage identifiers of the VM reference point. The replication module <NUM> of computer system <NUM> replicates the identified differences between the current stable state and the selected past stable point in time. These replicated differences may form an incremental backup. This incremental backup may be used for remote replication, disaster recovery or other purposes.

In some embodiments, the computer system <NUM> may be configured to buffer any data changes that occur while the differences in virtual machine state are determined. Then, once the differences in VM state have been determined, the differences can be merged with the buffered data into a live virtual machine state that includes data backed up from the selected point in time. This allows a user to select substantially any past stable point in time (since the creation of a checkpoint) and determine the state at that point, and merge it with current state to form a live virtual machine that includes data backed up from the selected point in time. The selected past stable point in time may thus include any available previous stable point in time represented by a virtual machine reference point-it does not have to be the immediately previous reference point.

A differencing virtual hard drive is configured to keep track of the data changes that occur while the differences in virtual machine state are determined. It should also be noted that the establishing, accessing and replicating steps <NUM>, <NUM> and <NUM> of Method <NUM> may each continue operating during storage operations including during the creation of a checkpoint. Thus, while live storage operations are being performed, embodiments herein may still establish a stable state, access a previously generated checkpoint and replicate differences in VM state between a current state and a selected past stable state.

In the embodiment described above, with reference to <FIG>, sequence numbers are used as data storage identifiers. In some cases where sequence numbers are used in this manner, separate sequence numbers may be assigned to each physical or virtual disk that is associated with the virtual machine. As such, reference points may be created for multiple disks, including disks that are out of synch. The resilient change tracking understands the sequence numbers and can create usable VM reference points for many disks simultaneously. Each VM reference point has the sequence numbers that refer to the changes made for that disk. For multiple disks that are out of synch (e.g. added at different times), each disk may have its own sequence (reference) numbers but the VM reference point tracks sequence numbers for all disks of a VM. Any data associated with a checkpoint may be moved to recovery storage so that the data does not have to sit on the production server. This reduces load on the production server, and increases its ability to more efficiently process data.

Claim support: In one embodiment, a computer system is provided which includes at least one processor. The computer system performs a computer-implemented method for establishing efficient virtual machine reference points, where the method includes the following: accessing a stable virtual machine checkpoint <NUM> that includes one or more portions of underlying data <NUM> stored in data storage <NUM>, the checkpoint being associated with a specific point in time, querying the data storage to determine one or more data storage identifiers <NUM> that reference the point in time associated with the checkpoint <NUM>, and storing the determined data storage identifiers as a virtual machine reference point <NUM>, wherein each subsequent change to the data storage results in an update to the data storage identifier, such that virtual machine reference point is usable to identify incremental changes from specific points in time on.

The method further includes establishing, at a current time, a stable, unchanging state within the virtual machine, the stable state being associated with a virtual machine reference point that includes one or more data storage identifiers corresponding to specific stable points in time, accessing one or more previously generated virtual machine reference points to identify one or more differences in virtual machine state between the current stable state and a selected past, stable point in time, and performing at least one operation using data identified by the stored data storage identifiers and the current data storage identifiers.

In some cases, the at least one operation includes one or more of the following: backing data up, restoring data, replicating data, and providing data to a user or other specified entity. The data identified by the stored data storage identifiers and the current data storage identifiers is combined with a previously generated checkpoint. The stable state is established by performing at least one of the following: buffering subsequent data changes within the virtual machine, implementing temporary copy-on-write for subsequent data changes within the virtual machine, and generating a checkpoint for the virtual machine that includes one or more portions of underlying data.

In some cases, one or more provided application programming interfaces (APIs) allow multiple different third parties to store data storage identifiers as virtual machine reference points. The virtual machine reference point includes metadata that includes the data storage identifiers, such that the virtual machine reference point is lightweight and is not backed by checkpoint data including data storage, memory, or virtual machine state. A virtual machine checkpoint that includes data storage, memory and virtual machine state is converted to a virtual machine reference point that solely includes metadata. Furthermore, a data-backed checkpoint is reconstructed using one or more identified changes between the virtual machine reference point and a future point in time.

In another embodiment, a computer system is provided which includes at least one processor. The computer system performs a computer-implemented method for specifying a virtual machine reference point to query incremental changes, where the method includes the following: establishing a stable, unchanging state within a virtual machine, the stable state being associated with a checkpoint <NUM> that includes corresponding state data <NUM> and storage data <NUM>, accessing one or more previously generated reference points <NUM> to identify one or more differences in virtual machine state between the current stable state and a selected past stable point in time, and replicating the differences in virtual machine state between the current stable state and a selected past stable point in time.

In some cases, the selected past stable point in time comprises any available previous stable point in time represented by a virtual machine reference point. Still further, a differencing virtual hard drive keeps track of the data changes that occur while the differences in virtual machine state are determined. The data storage identifiers comprise sequence numbers, which are incremented each time a memory register changes.

In still another embodiment, a computer system is provided which includes the following: one or more processors, a checkpoint accessing module <NUM> for accessing a stable virtual machine checkpoint <NUM> that includes one or more portions of underlying data <NUM> stored in data storage <NUM>, the checkpoint being associated with a specific point in time, a query generating module <NUM> for generating a query <NUM> that queries the data storage to determine one or more data storage identifiers <NUM> that reference the point in time associated with the checkpoint, and a virtual machine reference point generating module <NUM> for storing the determined data storage identifiers as a virtual machine reference point <NUM>, wherein each subsequent change to the data storage results in an update to the data storage identifier, such that virtual machine reference point is usable to identify incremental changes from specific points in time on. Virtual machine reference point information is transferred along with the virtual machine, such that if the virtual machine is moved to a different computing system, the data identified by the virtual machine reference point is recoverable.

Claim 1:
A computer-implemented method for data back-up, the computer-implemented method being performed by one or more processors executing computer executable instructions for the computer-implemented method, and the computer-implemented method comprising:
establishing (<NUM>) a stable, unchanging state within a virtual machine running on a computing system which comprises a data storage, the stable state being associated with a checkpoint (<NUM>) that includes corresponding state data (<NUM>) including a CPU state, memory state and device state for a device of the computing system and storage data (<NUM>), wherein first storage identifiers referencing a point in time associated with the checkpoint (<NUM>) are determined by the computing system querying the data storage and are stored as a first virtual machine reference point (<NUM>);
accessing (<NUM>) a previously generated virtual machine reference point (<NUM>) to identify a state data change of virtual machine state between the current stable state and a past stable state by comparing the first virtual machine reference point (<NUM>) and the previously generated virtual machine reference point ; and
replicating (<NUM>) the state data change of virtual machine state between the current stable state and the past stable state, the replicated state data change forming backup data.