# US 10,503,601 B2 · Method and apparatus for tracking objects in a first memory

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

- Number: US 10,503,601 B2
- Document ID: US10503601B2
- Status: Granted
- Kind: B2
- Application number: 15/722,384
- Filed: 2017-10-02
- Published: 2018-02-15
- Granted: 2019-12-10
- Earliest claimed: 2015-04-07
- Assignees: Huawei Technologies Co., Ltd.
- Applicants: Huawei Technologies Co., Ltd.
- Inventors: Shay Goikhman; Antoni Wolski; Eliezer Levy; Antonios Iliopoulos
- Web page: https://patentgrep.com/patent/US10503601B2

## CPC

- G06F 11/1407: {Checkpointing the instruction stream}
- G06F 9/466: {Transaction processing}
- G06F 9/4812: {by interrupt, e.g. masked}
- G06F 11/1446: Point-in-time backing up or restoration of persistent data
- G06F 11/1466: {to make the backup process non-disruptive}
- G06F 11/1471: involving logging of persistent data for recovery
- G06F 2201/82: Solving problems relating to consistency
- G06F 2201/84: Using snapshots, i.e. a logical point-in-time copy of the data
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

A method for tracking objects in a first memory during a plurality of time intervals is provided, wherein the method comprises: updating, by one or more update threads, copying, by the one or more test threads, the one or more non-copied shadow objects to a second memory, determining, by the one or more test threads whether the step of copying the one or more non-copied shadow objects was successful, and updating, by the one or more test threads, the status variables of corresponding objects that correspond to the one or more non-copied shadow objects that were copied successfully, wherein subsequent bits of the status variables correspond to subsequent time intervals and wherein the one or more update threads and the one or more test threads operate on disjoint sets of bits of the status variables.

## Claims

### Claim 1

A method for tracking a plurality of objects in a first memory, each of the objects comprising one or more status variables, the method comprising:
updating, by one or more update threads, the one or more status variables of changed objects of the plurality of objects, wherein the changed objects changed during a current time interval;
creating, by one or more test threads when a new time interval starts, for each of the plurality of objects, a shadow object comprising the one or more status variables;
evaluating, by the one or more test threads, the one or more status variables of each of the shadow objects to determine one or more non-copied shadow objects comprising non-copied changes;
copying, by the one or more test threads, the one or more non-copied shadow objects to a second memory;
determining, by the one or more test threads whether copying the one or more non-copied shadow objects was successful; and
updating, by the one or more test threads, the one or more status variables of corresponding ones of the plurality of objects that correspond to ones of the one or more non-copied shadow objects that were copied successfully,
wherein subsequent bits of the one or more status variables correspond to subsequent time intervals, and
wherein the one or more update threads and the one or more test threads operate on disjoint sets of bits of the one or more status variables.

### Claim 2 (depends on 1)

The method of claim 1, wherein creating the shadow objects comprises forking a child process.

### Claim 3 (depends on 1)

The method of claim 1, wherein the second memory comprises a persistent storage.

### Claim 4 (depends on 3)

The method of claim 3, further comprising starting the new time interval when a checkpoint is requested.

### Claim 5 (depends on 1)

The method of claim 1, wherein updating the one or more status variables of the one or more changed objects comprises using a mark mask that indicates the current time interval.

### Claim 6 (depends on 1)

The method of claim 1, wherein updating the one or more status variables of the corresponding ones of the plurality of objects comprises using a test mask that indicates previous time intervals for which copying the one or more non-copied shadow objects was successful.

### Claim 7 (depends on 5)

The method of claim 5, wherein updating the mark mask comprises atomically rotating its bit values and wherein updating the one or more status variables of the plurality of objects comprises assigning the one or more status variables of the plurality of objects OR-combined with the mark mask.

### Claim 8 (depends on 5)

The method of claim 5, wherein evaluating the status variables comprises atomically evaluating a bitwise AND-combination of the test mask and the one or more status variables.

### Claim 9 (depends on 5)

The method of claim 5, wherein a test mask is set to the value of the mark mask when it is determined that all of the one or more non-copied shadow objects have been successfully copied or the test mask is set to the mark mask OR-combined with the test mask when it is determined that copying of at least one of the one or more non-copied shadow objects failed.

### Claim 10 (depends on 5)

The method of claim 5, wherein a test mask or the mark mask are initialized to 1.

### Claim 11 (depends on 1)

The method of claim 1, wherein one of the one or more status variables of one of the plurality of objects and one of the one or more status variables of a corresponding shadow object are shared.

### Claim 12 (depends on 1)

The method of claim 1, wherein updating the one or more status variables of the corresponding objects comprises setting one or more of the one or more status variables to a bitwise XOR-combination of the one or more status variables and setting a different one or more of the one or more status variables to a bitwise AND-combination of the different one or more status variables and the test mask.

### Claim 13 (depends on 1)

The method of claim 1, wherein the one or more status variables of the plurality of objects are managed by the plurality of objects.

### Claim 14

An apparatus for tracking a plurality of objects in a first memory, wherein the plurality of objects each comprise one or more status variables, and wherein the apparatus comprises: the first memory, a second memory, a first processing core, and a second processing core,
wherein the first processing core is configured to execute one or more update threads which update the one or more status variables of changed objects of the plurality of objects, wherein the changed objects changed during a current time interval,
wherein the second processing core is configured to execute one or more test threads which perform the steps:
when a new time interval starts creating for each of the plurality of objects a shadow object comprising the one or more status variables;
evaluating the one or more status variables of each of the shadow objects to determine one or more non-copied shadow objects comprising non-copied changes;
copying the one or more non-copied shadow objects to a second memory;
determining whether copying the one or more non-copied shadow objects was successful; and
updating the one or more status variables of corresponding objects that correspond ones of the plurality of objects that correspond to ones of the one or more non-copied shadow objects that were copied successfully,
wherein subsequent bits of the one or more status variables correspond to subsequent time intervals, and
wherein the one or more update threads and the one or more test threads operate on disjoint sets of bits of the one or more status variables.

### Claim 15 (depends on 14)

The apparatus of claim 14, wherein creating the shadow objects comprises forking a child process.

### Claim 16 (depends on 14)

The apparatus of claim 14, wherein the second memory comprises a persistent storage.

### Claim 17

A non-transitory computer-readable storage medium storing program code, the program code comprising instructions that when executed by a processor cause the processor to:
update, by one or more update threads, one or more status variables of changed objects of a plurality of objects, wherein the plurality of objects each comprise one or more status variable, and wherein the changed objects changed during a current time interval;
create, by one or more test threads, when a new time interval starts, for each of the plurality of objects, a shadow object comprising the one or more status variables;
evaluate, by the one or more test threads, the one or more status variables of each of the shadow objects to determine one or more non-copied shadow objects comprising non-copied changes;
copy, by the one or more test threads, the one or more non-copied shadow objects to a second memory;
determine, by the one or more test threads whether the step of copying the one or more non-copied shadow objects was successful; and
update, by the one or more test threads, the one or more status variables of corresponding ones of the plurality of objects that correspond to ones of the one or more non-copied shadow objects that were copied successfully,
wherein subsequent bits of the one or more status variables correspond to subsequent time intervals, and
wherein the one or more update threads and the one or more test threads operate on disjoint sets of bits of the one or more status variables.

### Claim 18 (depends on 17)

The non-transitory computer-readable storage medium of claim 17, wherein the instructions to create the shadow objects comprises instructions to fork a child process.

### Claim 19 (depends on 17)

The non-transitory computer-readable storage medium of claim 17, wherein the second memory comprises a persistent storage.

### Claim 20 (depends on 19)

The non-transitory computer-readable storage medium of claim 19, wherein the instructions further cause the processor to start the new time interval when a checkpoint is requested.
