IP Library Granted Patent US 10,705,939
Granted Patent B2
US 10,705,939 · App. 15/830,376 · Granted Jul 7, 2020

Apparatuses, methods and systems for determining a virtual machine state

Inventors: Austin McChord (Norwalk, CT); Matthew Coleman (Guilford, CT)
Assignee: DATTO, INC.
G06F11/327G06F9/45558G06F11/079G06F11/0712G06F11/0751G06F11/0772G06F11/1484G06F11/2284G06F11/301G06F11/302G06F11/3024G06F11/3055G06F11/324G06F11/3476G06F11/1458G06F11/1461G06F2201/815Y02B70/30Y02D10/34
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,705,939
App. No.
15/830,376
Granted
Jul 7, 2020
Kind
B2
Abstract

APPARATUSES, METHODS AND SYSTEMS FOR DETERMINING A VIRTUAL MACHINE STATE (“CRV”) (transforms register retrieval requests, via CRV components, into boot success messages and screenshot capture command invocation outputs. A method comprises determining when to capture a screenshot of a virtual machine's display output by observing the values of a virtual CPU's registers, or the entropy of the virtual CPU's register values, obtained from a hypervisor in communication with the virtual machine's virtual CPU. The method further comprises determining when the virtual machine is at a boot success state and capturing a screenshot of the virtual machine display output.

Claims (170)

1. A method for generating rules for determining a status of an operating system running on a virtual machine, the method comprising:

obtaining a plurality of register sample values comprising:

a plurality of boot success state register sample values, each of which represents a sample virtual central processing unit (CPU) register value associated with a virtual CPU register of a virtual CPU that has successfully booted, and

a plurality of boot error state register sample values, each of which represents a sample virtual CPU register value associated with a virtual CPU register of a virtual CPU that has encountered an error while booting;

generating a set of rules for evaluating virtual CPU register values associated with a target virtual CPU to determine whether the target virtual CPU has successfully booted, wherein the set of rules are generated based at least in part on at least some of the plurality of boot success state register sample values, and at least some of the plurality of boot error state register sample values; and

storing the generated set of rules;

wherein each register sample value in the plurality of register sample values is associated with a virtual CPU register in a defined plurality of virtual CPU registers and the method further comprises:

identifying one or more virtual CPU registers in the defined plurality of virtual CPU registers that stay at a single value regardless of whether a virtual CPU has successfully booted, or has encountered an error while booting; and

excluding register sample values associated with any of the identified one or more virtual CPU registers from the plurality of register sample values;

wherein the set of rules are not generated based on any of the excluded register sample values.

2. The method of claim 1 , wherein the generated set of rules comprise at least one of a logical conditional statement and a decision tree.

3. The method of claim 1 , further comprising:

receiving a plurality of virtual CPU register values associated with at least one virtual CPU register of a virtual CPU on a hypervisor;

evaluating at least some of the received plurality of virtual CPU register values using the generated set of rules;

determining, based on the evaluation, a boot status of the virtual CPU associated with the received virtual CPU register values; and

transmitting a message indicating the boot status.

4. The method of claim 1 , wherein:

the plurality of register sample values further comprises a plurality of boot in-progress state register sample values, each of which represent a sample virtual central processing unit (CPU) register value associated with a virtual CPU register of a virtual CPU that is in the process of booting up; and

the generated set of rules are also to determine whether the target virtual CPU is in a boot in-progress state, and are generated based at least in part on at least some of the plurality of boot in-progress state register sample values.

5. The method of claim 1 , further comprising transmitting the generated set of rules to a server.

6. An apparatus for generating rules for determining a status of an operating system running on a virtual machine, the apparatus comprising:

memory to store processor-executable instructions; and

at least one processor, operably coupled to the memory, to execute the processor-executable instructions, wherein upon execution of the processor-executable instructions by the at least one processor, the apparatus:

obtains a plurality of register sample values comprising:

a plurality of boot success state register sample values, each of which represents a sample virtual central processing unit (CPU) register value associated with a virtual CPU register of a virtual CPU that has successfully booted, and

a plurality of boot error state register sample values, each of which represents a sample virtual CPU register value associated with a virtual CPU register of a virtual CPU that has encountered an error while booting;

generate a set of rules for evaluating virtual CPU register values associated with a target virtual CPU to determine whether the target virtual CPU has successfully booted, wherein the set of rules are generated based at least in part on at least some of the plurality of boot success state register sample values, and at least some of the plurality of boot error state register sample values; and

store the generated set of rules;

wherein each register sample value in the plurality of register sample values is associated with a virtual CPU register in a defined plurality of virtual CPU registers, and

wherein upon execution of the processor-executable instructions by the at least one processor, the apparatus:

identifies one or more virtual CPU registers in the defined plurality of virtual CPU registers that stay at a single value regardless of whether a virtual CPU has successfully booted, or has encountered an error while booting; and

excludes register sample values associated with any of the identified one or more virtual CPU registers from the plurality of register sample values;

wherein the set of rules are not generated based on any of the excluded register sample values.

7. The apparatus of claim 6 , wherein the generated set of rules comprise at least one of a logical conditional statement and a decision tree.

8. The apparatus of claim 6 , wherein upon execution of the processor-executable instructions by the at least one processor, the apparatus:

receives a plurality of virtual CPU register values associated with at least one virtual CPU register of a virtual CPU on a hypervisor;

evaluates at least some of the received plurality of virtual CPU register values using the generated set of rules;

determines, based on the evaluation, a boot status of the virtual CPU associated with the received virtual CPU register values; and

transmits a message indicating the boot status.

9. The apparatus of claim 6 , wherein:

the plurality of register sample values further comprises a plurality of boot in-progress state register sample values, each of which represent a sample virtual central processing unit (CPU) register value associated with a virtual CPU register of a virtual CPU that is in the process of booting up; and

the generated set of rules are also to determine whether the target virtual CPU is in a boot in-progress state, and are generated based at least in part on at least some of the plurality of boot in-progress state register sample values.

10. The apparatus of claim 6 , wherein upon execution of the processor-executable instructions by the at least one processor, the apparatus transmits the generated set of rules to a server.

11. A method for generating rules for determining a status of an operating system running on a virtual machine, the method comprising:

obtaining a plurality of register sample values comprising:

a plurality of boot success state register sample values, each of which represents a sample virtual central processing unit (CPU) register value associated with a virtual CPU register of a virtual CPU that has successfully booted, and

a plurality of boot error state register sample values, each of which represents a sample virtual CPU register value associated with a virtual CPU register of a virtual CPU that has encountered an error while booting;

generating a set of rules for evaluating virtual CPU register values associated with a target virtual CPU to determine whether the target virtual CPU has successfully booted, wherein the set of rules are generated based at least in part on at least some of the plurality of boot success state register sample values, and at least some of the plurality of boot error state register sample values; and

storing the generated set of rules;

wherein each register sample value in the plurality of register sample values is associated with a virtual CPU register in a defined plurality of virtual CPU registers and the method further comprises:

for each virtual CPU register in the defined plurality of virtual CPU registers, measuring a degree of repetition across the plurality of register sample values;

identifying one or more virtual CPU registers in the defined plurality of virtual CPU registers for which the degree of repetition is below a threshold; and

excluding register sample values associated with any of the identified one or more virtual CPU registers from the plurality of register sample values;

wherein the set of rules are not generated based on any of the excluded register sample values.

12. The method of claim 11 , wherein the generated set of rules comprise at least one of a logical conditional statement and a decision tree.

13. The method of claim 11 , further comprising:

receiving a plurality of virtual CPU register values associated with at least one virtual CPU register of a virtual CPU on a hypervisor;

evaluating at least some of the received plurality of virtual CPU register values using the generated set of rules;

determining, based on the evaluation, a boot status of the virtual CPU associated with the received virtual CPU register values; and

transmitting a message indicating the boot status.

14. The method of claim 11 , wherein:

the plurality of register sample values further comprises a plurality of boot in-progress state register sample values, each of which represent a sample virtual central processing unit (CPU) register value associated with a virtual CPU register of a virtual CPU that is in the process of booting up; and

the generated set of rules are also to determine whether the target virtual CPU is in a boot in-progress state, and are generated based at least in part on at least some of the plurality of boot in-progress state register sample values.

15. The method of claim 11 , further comprising transmitting the generated set of rules to a server.

16. An apparatus for generating rules for determining a status of an operating system running on a virtual machine, the apparatus comprising:

memory to store processor-executable instructions; and

at least one processor, operably coupled to the memory, to execute the processor-executable instructions, wherein upon execution of the processor-executable instructions by the at least one processor, the apparatus:

obtains a plurality of register sample values comprising:

a plurality of boot success state register sample values, each of which represents a sample virtual central processing unit (CPU) register value associated with a virtual CPU register of a virtual CPU that has successfully booted, and

a plurality of boot error state register sample values, each of which represents a sample virtual CPU register value associated with a virtual CPU register of a virtual CPU that has encountered an error while booting;

generate a set of rules for evaluating virtual CPU register values associated with a target virtual CPU to determine whether the target virtual CPU has successfully booted, wherein the set of rules are generated based at least in part on at least some of the plurality of boot success state register sample values, and at least some of the plurality of boot error state register sample values; and

store the generated set of rules;

wherein each register sample value in the plurality of register sample values is associated with a virtual CPU register in a defined plurality of virtual CPU registers, and

wherein upon execution of the processor-executable instructions by the at least one processor, the apparatus:

for each virtual CPU register in the defined plurality of virtual CPU registers, measures a degree of repetition across the plurality of register sample values;

identifies one or more virtual CPU registers in the defined plurality of virtual CPU registers for which the degree of repetition is below a threshold; and

excludes register sample values associated with any of the identified one or more virtual CPU registers from the plurality of register sample values;

wherein the set of rules are not generated based on any of the excluded register sample values.

17. The apparatus of claim 16 , wherein the generated set of rules comprise at least one of a logical conditional statement and a decision tree.

18. The apparatus of claim 16 , wherein upon execution of the processor-executable instructions by the at least one processor, the apparatus:

receives a plurality of virtual CPU register values associated with at least one virtual CPU register of a virtual CPU on a hypervisor;

evaluates at least some of the received plurality of virtual CPU register values using the generated set of rules;

determines, based on the evaluation, a boot status of the virtual CPU associated with the received virtual CPU register values; and

transmits a message indicating the boot status.

19. The apparatus of claim 16 , wherein:

the plurality of register sample values further comprises a plurality of boot in-progress state register sample values, each of which represent a sample virtual central processing unit (CPU) register value associated with a virtual CPU register of a virtual CPU that is in the process of booting up; and

the generated set of rules are also to determine whether the target virtual CPU is in a boot in-progress state, and are generated based at least in part on at least some of the plurality of boot in-progress state register sample values.

20. The apparatus of claim 16 , wherein upon execution of the processor-executable instructions by the at least one processor, the apparatus transmits the generated set of rules to a server.

21. A method for generating rules for determining a status of an operating system running on a virtual machine, the method comprising:

obtaining a plurality of register sample values comprising:

a plurality of boot success state register sample values, each of which represents a sample virtual central processing unit (CPU) register value associated with a virtual CPU register of a virtual CPU that has successfully booted, and

a plurality of boot error state register sample values, each of which represents a sample virtual CPU register value associated with a virtual CPU register of a virtual CPU that has encountered an error while booting;

generating a set of rules for evaluating virtual CPU register values associated with a target virtual CPU to determine whether the target virtual CPU has successfully booted, wherein the set of rules are generated based at least in part on at least some of the plurality of boot success state register sample values, and at least some of the plurality of boot error state register sample values; and

storing the generated set of rules;

wherein each register sample value in the plurality of register sample values is associated with a virtual CPU register in a defined plurality of virtual CPU registers and the method further comprises:

identifying one or more virtual CPU registers in the defined plurality of virtual CPU registers whose values change based on incremental versions of a single major operating system release; and

modifying the plurality of register sample values such that register sample values associated with both the single major operating system release and with the identified one or more virtual CPU registers have the same value.

22. The method of claim 21 , wherein the generated set of rules comprise at least one of a logical conditional statement and a decision tree.

23. The method of claim 21 , further comprising:

receiving a plurality of virtual CPU register values associated with at least one virtual CPU register of a virtual CPU on a hypervisor;

evaluating at least some of the received plurality of virtual CPU register values using the generated set of rules;

determining, based on the evaluation, a boot status of the virtual CPU associated with the received virtual CPU register values; and

transmitting a message indicating the boot status.

24. The method of claim 21 , wherein:

the plurality of register sample values further comprises a plurality of boot in-progress state register sample values, each of which represent a sample virtual central processing unit (CPU) register value associated with a virtual CPU register of a virtual CPU that is in the process of booting up; and

the generated set of rules are also to determine whether the target virtual CPU is in a boot in-progress state, and are generated based at least in part on at least some of the plurality of boot in-progress state register sample values.

25. The method of claim 21 , further comprising transmitting the generated set of rules to a server.

26. An apparatus for generating rules for determining a status of an operating system running on a virtual machine, the apparatus comprising:

memory to store processor-executable instructions; and

at least one processor, operably coupled to the memory, to execute the processor-executable instructions, wherein upon execution of the processor-executable instructions by the at least one processor, the apparatus:

obtains a plurality of register sample values comprising:

a plurality of boot success state register sample values, each of which represents a sample virtual central processing unit (CPU) register value associated with a virtual CPU register of a virtual CPU that has successfully booted, and

a plurality of boot error state register sample values, each of which represents a sample virtual CPU register value associated with a virtual CPU register of a virtual CPU that has encountered an error while booting;

generate a set of rules for evaluating virtual CPU register values associated with a target virtual CPU to determine whether the target virtual CPU has successfully booted, wherein the set of rules are generated based at least in part on at least some of the plurality of boot success state register sample values, and at least some of the plurality of boot error state register sample values; and

store the generated set of rules;

wherein each register sample value in the plurality of register sample values is associated with a virtual CPU register in a defined plurality of virtual CPU registers, and

wherein upon execution of the processor-executable instructions by the at least one processor, the apparatus:

identifies one or more virtual CPU registers in the defined plurality of virtual CPU registers whose values change based on incremental versions of a single major operating system release; and

modifies the plurality of register sample values such that register sample values associated with both the single major operating system release and with the identified one or more virtual CPU registers have the same value.

27. The apparatus of claim 26 , wherein the generated set of rules comprise at least one of a logical conditional statement and a decision tree.

28. The apparatus of claim 26 , wherein upon execution of the processor-executable instructions by the at least one processor, the apparatus:

receives a plurality of virtual CPU register values associated with at least one virtual CPU register of a virtual CPU on a hypervisor;

evaluates at least some of the received plurality of virtual CPU register values using the generated set of rules;

determines, based on the evaluation, a boot status of the virtual CPU associated with the received virtual CPU register values; and

transmits a message indicating the boot status.

29. The apparatus of claim 26 , wherein:

the plurality of register sample values further comprises a plurality of boot in-progress state register sample values, each of which represent a sample virtual central processing unit (CPU) register value associated with a virtual CPU register of a virtual CPU that is in the process of booting up; and

the generated set of rules are also to determine whether the target virtual CPU is in a boot in-progress state, and are generated based at least in part on at least some of the plurality of boot in-progress state register sample values.

30. The apparatus of claim 26 , wherein upon execution of the processor-executable instructions by the at least one processor, the apparatus transmits the generated set of rules to a server.

31. A method for generating rules for determining a status of an operating system running on a virtual machine, the method comprising:

obtaining a plurality of register sample values comprising:

a plurality of boot success state register sample values, each of which represents a sample virtual central processing unit (CPU) register value associated with a virtual CPU register of a virtual CPU that has successfully booted, and

a plurality of boot error state register sample values, each of which represents a sample virtual CPU register value associated with a virtual CPU register of a virtual CPU that has encountered an error while booting;

generating a set of rules for evaluating virtual CPU register values associated with a target virtual CPU to determine whether the target virtual CPU has successfully booted, wherein the set of rules are generated based at least in part on at least some of the plurality of boot success state register sample values, and at least some of the plurality of boot error state register sample values; and

storing the generated set of rules;

wherein each register sample value in the plurality of register sample values is associated with a virtual CPU register in a defined plurality of virtual CPU registers and the method further comprises:

identifying one or more virtual CPU registers in the defined plurality of virtual CPU registers which is associated with register sample values that can only vary between a predetermined number of string values; and

modifying the plurality of register sample values such that each respective register sample value that is associated with one of the identified virtual CPU registers is replaced with an enumerated value that corresponds to the respective register sample value.

32. The method of claim 31 , wherein the generated set of rules comprise at least one of a logical conditional statement and a decision tree.

33. The method of claim 31 , further comprising:

receiving a plurality of virtual CPU register values associated with at least one virtual CPU register of a virtual CPU on a hypervisor;

evaluating at least some of the received plurality of virtual CPU register values using the generated set of rules;

determining, based on the evaluation, a boot status of the virtual CPU associated with the received virtual CPU register values; and

transmitting a message indicating the boot status.

34. The method of claim 31 , wherein:

the plurality of register sample values further comprises a plurality of boot in-progress state register sample values, each of which represent a sample virtual central processing unit (CPU) register value associated with a virtual CPU register of a virtual CPU that is in the process of booting up; and

the generated set of rules are also to determine whether the target virtual CPU is in a boot in-progress state, and are generated based at least in part on at least some of the plurality of boot in-progress state register sample values.

35. The method of claim 31 , further comprising transmitting the generated set of rules to a server.

36. An apparatus for generating rules for determining a status of an operating system running on a virtual machine, the apparatus comprising:

memory to store processor-executable instructions; and

at least one processor, operably coupled to the memory, to execute the processor-executable instructions, wherein upon execution of the processor-executable instructions by the at least one processor, the apparatus:

obtains a plurality of register sample values comprising:

a plurality of boot success state register sample values, each of which represents a sample virtual central processing unit (CPU) register value associated with a virtual CPU register of a virtual CPU that has successfully booted, and

a plurality of boot error state register sample values, each of which represents a sample virtual CPU register value associated with a virtual CPU register of a virtual CPU that has encountered an error while booting;

generate a set of rules for evaluating virtual CPU register values associated with a target virtual CPU to determine whether the target virtual CPU has successfully booted, wherein the set of rules are generated based at least in part on at least some of the plurality of boot success state register sample values, and at least some of the plurality of boot error state register sample values; and

store the generated set of rules;

wherein each register sample value in the plurality of register sample values is associated with a virtual CPU register in a defined plurality of virtual CPU registers, and

wherein upon execution of the processor-executable instructions by the at least one processor, the apparatus:

identifies one or more virtual CPU registers in the defined plurality of virtual CPU registers which is associated with register sample values that can only vary between a predetermined number of string values; and

modifies the plurality of register sample values such that each respective register sample value that is associated with one of the identified virtual CPU registers is replaced with an enumerated value that corresponds to the respective register sample value.

37. The apparatus of claim 36 , wherein the generated set of rules comprise at least one of a logical conditional statement and a decision tree.

38. The apparatus of claim 36 , wherein upon execution of the processor-executable instructions by the at least one processor, the apparatus:

receives a plurality of virtual CPU register values associated with at least one virtual CPU register of a virtual CPU on a hypervisor;

evaluates at least some of the received plurality of virtual CPU register values using the generated set of rules;

determines, based on the evaluation, a boot status of the virtual CPU associated with the received virtual CPU register values; and

transmits a message indicating the boot status.

39. The apparatus of claim 36 , wherein:

the plurality of register sample values further comprises a plurality of boot in-progress state register sample values, each of which represent a sample virtual central processing unit (CPU) register value associated with a virtual CPU register of a virtual CPU that is in the process of booting up; and

the generated set of rules are also to determine whether the target virtual CPU is in a boot in-progress state, and are generated based at least in part on at least some of the plurality of boot in-progress state register sample values.

40. The apparatus of claim 36 , wherein upon execution of the processor-executable instructions by the at least one processor, the apparatus transmits the generated set of rules to a server.

Assignments (10)
SECOND LIEN PATENT SECURITY AGREEMENT Recorded Mar 24, 2025
From: DATTO, LLC
To: MORGAN STANLEY SENIOR FUNDING, INC., AS SECOND LIEN COLLATERAL AGENT
Reel/Frame 070609/0599 →
FIRST LIEN PATENT SECURITY AGREEMENT Recorded Mar 21, 2025
From: DATTO, LLC
To: MORGAN STANLEY SENIOR FUNDING, INC., AS FIRST LIEN COLLATERAL AGENT
Reel/Frame 070586/0681 →
RELEASE OF SECURITY INTEREST (PATENTS) Recorded Mar 20, 2025
From: GOLUB CAPITAL MARKETS LLC, AS COLLATERAL AGENT
To: DATTO, INC.
Reel/Frame 070583/0566 →
CHANGE OF NAME Recorded Oct 27, 2023
From: DATTO, INC.
To: DATTO, LLC
Reel/Frame 065385/0256 →
NOTICE OF GRANT OF SECURITY INTEREST IN PATENTS Recorded Aug 9, 2022
From: DATTO, INC.
To: GOLUB CAPITAL MARKETS LLC, AS COLLATERAL AGENT
Reel/Frame 061129/0839 →
RELEASE OF SECURITY INTEREST Recorded Jun 23, 2022
From: MORGAN STANLEY SENIOR FUNDING, INC.
To: DATTO, INC.; AUTOTASK CORPORATION; OPEN MESH, INC.; SOONR, INC.
Reel/Frame 060293/0565 →
RELEASE OF SECURITY INTEREST IN PATENT COLLATERAL AT REEL/FRAME NO. 48776/0282 Recorded Oct 23, 2020
From: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH, AS COLLATERAL AGENT
To: DATTO, INC.
Reel/Frame 054191/0913 →
PATENT SECURITY AGREEMENT Recorded Oct 23, 2020
From: DATTO, INC.
To: MORGAN STANLEY SENIOR FUNDING, INC., AS ADMINISTRATIVE AGENT
Reel/Frame 054191/0984 →
PATENT SECURITY AGREEMENT Recorded Apr 2, 2019
From: DATTO, INC.
To: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH, AS COLLATERAL AGENT
Reel/Frame 048776/0282 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 10, 2018
From: MCCHORD, AUSTIN; COLEMAN, MATTHEW
To: DATTO, INC.
Reel/Frame 044583/0814 →
Cited By (4)
US 12,299,036 US 12,314,137 US 12,339,904 US 12,379,902