# US 10,372,550 B1 · Method and system for providing checkpointing to windows application groups

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 10,372,550 B1
- Document ID: US10372550B1
- Status: Granted
- Kind: B1
- Application number: 15/070,497
- Filed: 2016-03-15
- Granted: 2019-08-06
- Earliest claimed: 2008-12-15
- Assignees: Open Invention Networks, LLC
- Applicants: Open Invention Network LLC
- Inventors: Keith Richard Backensto; Allan Havemose
- Web page: https://patentgrep.com/patent/US10372550B1

## CPC

- G06F 11/1451: {by selection of backup contents}
- G06F 9/30145: {Instruction analysis, e.g. decoding, instruction word fields}
- G06F 9/461: {Saving or restoring of program or task context}
- G06F 9/4843: {by program, e.g. task dispatcher, supervisor, operating system}
- G06F 11/1407: {Checkpointing the instruction stream}
- G06F 11/1438: {Restarting or rejuvenating}
- G06F 11/1471: involving logging of persistent data for recovery
- G06F 11/1482: using middleware or operating system [OS] functionalities
- G06F 11/203: {using migration}
- G06F 9/4856: {resumption being on a different machine, e.g. task migration, virtual machine migration (G06F9/5088 takes precedence)}
- G06F 2201/805: Real-time
- G06F 2201/84: Using snapshots, i.e. a logical point-in-time copy of the data
- G06F 2201/85: Active fault masking without idle spares
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

A method and system of checkpointing multi-threaded applications, and multi-process application groups on WINDOWS® operating systems. In an exemplary embodiment, the method may include creating at least one full checkpoint for each application in an application group, and creating at least one incremental application checkpoint for each application in the application group. Further, each of the at least one incremental application checkpoint may be automatically merged against a corresponding full application checkpoint. Further, checkpointing may be synchronized across all applications in the application group. Further, checkpointing may be configured to perform live migration. In the exemplary embodiment, checkpoints are triggered asynchronously using Asynchronous Procedure Calls (APC).

## Claims

### Claim 1

A method, comprising:
checkpointing an application group comprised of one or more applications;
creating one or more buffers filled with machine-executable instructions and inserting said one or more buffers into an address space of an application of said application group, wherein said machine-executable instructions comprise at least instructions for loading a library, initializing the library, and jumping to an entry for the library;
launching said application of said application group in a suspended state, changing the application's entry point to a first instruction of said machine-executable instructions and calling said first instruction, and calling the application's original entry point upon completion of said machine-executable instructions;
creating one or more checkpoints for the one or more application in the application group, comprising one or more of: waking up a checkpoint thread for each of the one or more applications in the application group and sending said checkpoint threads at least one asynchronous procedure calls (APC), creating one or more full checkpoints for said application group comprised of full checkpoints for said one or more applications, creating one or more incremental checkpoints for said application group comprised of incremental checkpoints for said one or more applications, and merging at least one of said one or more incremental checkpoints with a full checkpoint;
synchronizing execution of checkpointing of said one or more applications using one or more synchronization points, wherein a synchronization point is configured to provide synchronization services for threads and processes of said one or more applications.

### Claim 2 (depends on 1)

The method according to claim 1, wherein the applications in the application group are started from an initial application, and said initial application is one of the applications in the application group.

### Claim 3 (depends on 1)

The method according to claim 1, wherein the applications in the application group are independently started.

### Claim 4 (depends on 1)

The method according to claim 1, wherein the application group is a shell script and the applications launched by the shell script.

### Claim 5 (depends on 1)

The method according to claim 1, wherein the application group is virtual machine software.

### Claim 6 (depends on 1)

The method according to claim 1, wherein handles to kernel objects are included in the full and incremental checkpoints.

### Claim 7 (depends on 1)

The method according to claim 1, wherein checkpointing is provided in part by a shared dynamic link library.

### Claim 8 (depends on 1)

The method according to claim 1, wherein checkpointing is provided in part by a loadable kernel module.

### Claim 9 (depends on 8)

The method according to claim 8, wherein commands are sent to the kernel module using Input/Output Control (IOCTL) commands.

### Claim 10 (depends on 1)

The method according to claim 1, wherein checkpointing does not modify the individual applications in the application group.

### Claim 11 (depends on 1)

The method according to claim 1, further comprising using a customized system library.

### Claim 12 (depends on 1)

The method according to claim 1, wherein standard system libraries are used, and customization are performed using interception.

### Claim 13 (depends on 1)

The method according to claim 1, further comprising at least one of:
creating an exception handler configured to detect if a thread was interrupted while active in kernel space;
setting the thread's user-mode instruction pointer to an invalid address to trigger an exception if the thread returns to the user space after returning from a checkpoint signal handler; and
moving the thread to a next synchronization point from the exception handler to prepare for checkpointing the thread's state.

### Claim 14 (depends on 1)

The method according to claim 1, further comprising at least one of:
creating an Asynchronous Procedure Calls (APC) handler configured to detect if a thread was interrupted while active in kernel space before entering a wait state;
ensuring the thread's wait state is alertable by setting its Alertable flag;
inserting a user-mode APC at the front of the thread's APC queue during a full or incremental checkpoint to determine if the thread enters the wait state after returning from a checkpoint signal handler; and
moving the thread to a next synchronization point from the APC handler to prepare for checkpointing the thread's state.

### Claim 15 (depends on 1)

The method according to claim 1, wherein an application from the one or more applications is configured to perform at least one of:
joining the checkpointing service for the application group at any time; and
leaving the checkpointing service for the application group at any time.

### Claim 16 (depends on 1)

The method according to claim 1, further comprising restoring the application group comprised of one or more applications in its entirety from a full checkpoint of the application group;
wherein the full checkpoint of the application group is comprised of checkpoints of the one or more applications in the application group.

### Claim 17 (depends on 16)

The method according to claim 16, further comprising at least one of:
recreating all kernel objects used by processes of the one or more applications in the application group; and
changing kernel object handles to reference their newly re-created kernel objects.

### Claim 18 (depends on 16)

The method according to claim 16, wherein the application group is restored on at least one of:
a primary node; and
a backup node.

### Claim 19

A method, comprising:
registering one or more applications of an application group with a high-availability protection program when said one or more applications are launched or after said one or more applications are launched;
creating one or more in-memory buffers comprising machine-executable instructions for one or more of loading a checkpoint library, initializing a checkpoint library, jumping to an entry point for a checkpoint library, launching an application, and jumping to an application's entry point;
creating one or more checkpoints for the one or more applications of the application group;
detecting a failure in execution of one or more of the applications or the application group; and
restoring the one or more applications of the application group from one or more checkpoints in response to said detecting a failure, comprising one or more of restoring kernel attributes of said one or more applications, changing addresses of objects references by an EPROCESS to reflect their new memory addresses, and restoring memory segments include one or more of thread stacks, code segments, data segments, dynamic segments, heaps, APC queues, user memory, and file mapped segments.

### Claim 20 (depends on 19)

The method according to claim 19, wherein the registration step is performed without a need to modify or recompile the applications, and without a use of a custom loader.
