IP Library › Granted Patent US 10,585,796
Granted Patent B2
US 10,585,796 · App. 15/433,838 · Granted Mar 10, 2020

Ensuring determinism during programmatic replay in a virtual machine

Inventors: Jeffrey Daudel (South San Francisco, CA); Suman Cherukuri (Cupertino, CA); Humberto Yeverino (Menlo Park, CA); Dickey Singh (San Carlos, CA); Arpad Jakab (Oakland, CA); Marvin Justice (San Mateo, CA); Jonathan Lindo (Emerald Hills, CA)
Assignee: CA, Inc.
G06F12/0253G06F9/44521G06F9/45504G06F9/45533G06F11/301G06F11/3466G06F11/3636G06F9/4484G06F9/44589G06F11/3409G06F2201/88
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 10,585,796
App. No.
15/433,838
Granted
Mar 10, 2020
Kind
B2
Abstract

Aspects of an application program's execution which might be subject to non-determinism are performed in a deterministic manner while the application program's execution is being recorded in a virtual machine environment so that the application program's behavior, when played back in that virtual machine environment, will duplicate the behavior that the application program exhibited when originally executed and recorded. Techniques disclosed herein take advantage of the recognition that only minimal data needs to be recorded in relation to the execution of deterministic operations, which actually can be repeated “verbatim” during replay, and that more highly detailed data should be recorded only in relation to non-deterministic operations, so that those non-deterministic operations can be deterministically simulated (rather than attempting to re-execute those operations under circumstances where the outcome of the re-execution might differ) based on the detailed data during replay.

Claims (56)

1. A non-transitory computer-readable storage medium storing instructions which, when executed by a processor, cause the processor to:

record information with respect to garbage collection of a referent of a reference object of an application during a record time of execution of the application, including record a value that indicates when the referent was garbage collected in the execution of the application during the record time; and

based on the value, produce deterministic results with respect to garbage collection of the referent during a replay time of execution of the application.

2. The non-transitory computer-readable storage medium of claim 1 , wherein the instructions that cause the processor to produce deterministic results with respect to garbage collection of the referent during the replay time further cause the processor to:

access the value that indicates when the referent was garbage collected in the execution of the application during the record time; and

ensure that the referent appears to have been garbage collected during the replay time no later than when the referent was garbage collected in the execution of the application during the record time.

3. The non-transitory computer-readable storage medium of claim 1 , wherein the instructions further cause the processor to:

create a strong reference to the referent during the replay time to prevent the referent from being garbage collected earlier than when the referent was garbage collected in the execution of the application during the record time; and

remove the strong reference to the referent during the replay time at a point in the execution of the application during the replay time that corresponds to when the referent was garbage collected in the execution of the application during the record time.

4. The non-transitory computer-readable storage medium of claim 1 , wherein the instructions that cause the processor to produce deterministic results with respect to garbage collection of the referent during the replay time further cause the processor to:

add the reference object to a reference queue and remove the reference object from the reference queue at deterministic points in execution of the application during the replay time.

5. The non-transitory computer-readable storage medium of claim 1 , wherein the reference object is an actual reference object, and further comprising code that causes a processor to:

inject code into a class of the application that causes a proxy reference object to be created in response to the actual reference object being created during class loading, wherein when the actual reference object is created the referent is referenced by the actual reference object such that the referent is eligible for garbage collection, wherein the proxy reference object comprises a first get method;

wherein the instructions that cause the processor to record information with respect to garbage collection of the referent during the record time further cause the processor to:

invoke, by the first get method, a second get method of the actual reference object;

in response to determining that a result of the second get method indicates that the referent has been garbage collected during the record time, record by the first get method a value in a replay stream that indicates how many times that the second get method was invoked by the first get method prior to the referent being garbage collected during the record time.

6. The non-transitory computer-readable storage medium of claim 5 , wherein the instructions that cause the processor to produce deterministic results with respect to garbage collection of the referent during the replay time further cause the processor to:

access the value that was recorded in the replay stream during the record time; and

ensure that a result of each invocation of the second get method during the replay time is consistent with a result of a corresponding invocation of the second get method during the record time.

7. A computer-implemented method comprising:

injecting code into a class of an application, wherein the code causes a proxy reference object to be created in response to an actual reference object being created, wherein when the actual reference object is created a referent is referenced by the actual reference object such that the referent is eligible for garbage collection;

recording, by the proxy reference object during a record time of execution of the application on a processor, information in a replay stream that pertains to garbage collection of the referent;

accessing the information by a version of the proxy reference object during a replay time of execution of the application on a processor;

during a class loading phase during the replay time, injecting code into a class which, when executed by a processor, prevents the actual reference object from being placed on an actual reference queue, wherein the code further causes the actual reference object to be placed on a temporary reference queue whenever the actual reference object would have otherwise been placed on the actual reference queue during the replay time;

based on the information, producing deterministic results with respect to garbage collection of the referent during the replay time of execution of the application, wherein producing the deterministic results comprises moving the actual reference object from the temporary reference queue to the actual reference queue at deterministic points in execution of the application during the replay time.

8. The computer-implemented method of claim 7 , wherein:

recording the information that pertains to garbage collection of the referent comprises:

recording a value in the replay stream that indicates a point in the execution of the application during the record time at which the referent was garbage collected;

accessing the information comprises accessing the value; and

producing the deterministic results comprises ensuring that the referent appears to have been garbage collected during the replay time no later than the point during the record time at which the referent was garbage collected.

9. The computer-implemented method of claim 7 , further comprising:

creating a strong reference to the referent during the replay time to prevent the referent from being garbage collected at an earlier point in execution of the application than the referent was garbage collected during the record time; and

removing the strong reference to the referent during the replay time at a point in the execution of the application during the replay time that corresponds to the point in the execution of the application during the record time at which the referent was garbage collected.

10. The computer-implemented method of claim 7 , wherein when the actual reference object is created it references the referent by either a weak reference, a soft reference, or a phantom reference.

11. The computer-implemented method of claim 7 , further comprising:

invoking during the record time, by a first get method of the proxy reference object, a second get method of the actual reference object;

wherein the recording, by the proxy reference object during the record time, information in a replay stream that pertains to garbage collection of the referent comprises:

in response to determining that a result of the second get method indicates that the referent has been garbage collected during the record time, recording by the first get method a value in the replay stream that indicates how many times that the second get method was invoked by the first get method prior to the referent being garbage collected during the record time.

12. The computer-implemented method of claim 11 , wherein:

accessing the information comprises accessing the value that was recorded in the replay stream during the record time; and

producing deterministic results comprises ensuring that the referent appears to have been garbage collected no later than a point during the record time at which the referent was garbage collected.

13. A computing system comprising:

a processor configured to:

inject code into a class during a record time of execution of an application which, when executed by the processor, causes a proxy reference object to be created in response to an actual reference object being created, wherein when created the actual reference object has a reference to a referent that allows the referent to be garbage collected, wherein the proxy reference object comprises a first executable method;

invoke, by the first executable method, a second executable method of the actual reference object; and

in response to determining that a result of the second executable method indicates that the referent has been garbage collected during the record time, store by the first executable method a value that indicates how many times that the second executable method was invoked by the first executable method prior to the referent being garbage collected.

14. The computing system of claim 13 , wherein the second executable method is a get method that returns a pre-defined value in response to the referent having been garbage collected.

15. The computing system of claim 13 , wherein the processor is further configured to:

during a replay time of execution of the application, access the value that was stored during the record time; and

based on the value, ensure that a result of each invocation of the second executable method during the replay time is consistent with a result of a corresponding invocation of the second executable method during the record time.

16. The computing system of claim 13 , wherein the processor is further configured to:

create a strong reference to the referent during a replay time that prevents the referent from being garbage collected at an earlier point in execution than the referent was garbage collected during the record time.

17. The computing system of claim 13 , wherein the processor is further configured to:

add the actual reference object to a reference queue at a deterministic point in both the record time and a replay time of execution of the application.

18. The computing system of claim 17 , wherein the processor is further configured to:

remove the actual reference object from the reference queue at a deterministic point in both the record time and the replay time.

Assignments (2)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Feb 17, 2017
From: DAUDEL, JEFFREY; CHERUKURI, SUMAN; YEVERINO, HUMBERTO; SINGH, DICKEY; JAKAB, ARPAD; JUSTICE, MARVIN; LINDO, JONATHAN
To: REPLAY SOLUTIONS, INC.
Reel/Frame 041286/0202 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Feb 17, 2017
From: REPLAY SOLUTIONS, INC.
To: CA, INC.
Reel/Frame 041286/0517 →
Continuity (3)
Division 14258928 · Apr 22, 2014
Division 12826447 · Jun 29, 2010
Related Publication 20170161174A1 · Jun 8, 2017