# US 10,120,711 B2 · Rapid suspend/resume for virtual machines via resource sharing

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

- Number: US 10,120,711 B2
- Document ID: US10120711B2
- Status: Granted
- Kind: B2
- Application number: 15/465,491
- Filed: 2017-03-21
- Published: 2017-07-06
- Granted: 2018-11-06
- Earliest claimed: 2014-08-23
- Assignees: VMware, Inc.
- Applicants: VMware, Inc.
- Inventors: Daniel James Beveridge; David Snowdon
- Web page: https://patentgrep.com/patent/US10120711B2

## CPC

- G06F 9/45558: {Hypervisor-specific management and integration aspects}
- G06F 9/4451: {User profiles; Roaming}
- G06F 2009/45562: {Creating, deleting, cloning virtual machine instances}
- G06F 2009/45575: {Starting, stopping, suspending or resuming virtual machine instances}
- G06F 2009/45583: {Memory management, e.g. access or allocation}
- G06F 2209/5011: Pool
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

Examples quickly suspend and resume virtual desktops on demand or on schedule. Virtual desktops, or desktops as a service, are provided to users, where the virtual desktop is a forked VM, cloned VM, or otherwise at least a partial duplicate of an existing VM. The virtual desktop points to existing memory maintained by the existing VM, and the virtual desktop only writes to memory the pages that the virtual desktop creates or modifies.

## Claims

### Claim 1

A method comprising:
receiving a request to resume execution of a suspended child virtual machine (VM) on a host machine, the child VM being one of a plurality of child VMs of a powered-on parent VM template, wherein respective child VMs of the plurality of child VMs are individually suspended and resumed while the parent VM template remains powered-on;
retrieving memory blocks that are associated with the suspended child VM, but are not associated with the powered-on parent VM template; and
executing the suspended child VM to produce a powered-on child VM including logically merging the loaded memory blocks of the suspended child VM with memory blocks shared with the powered-on parent VM template that are maintained resident in memory on the host through the powered-on state, wherein executing the suspended child VM includes using configuration data that specifies a memory state and a device state of the powered-on parent VM template to inherit such that the powered-on child VM resumes without undergoing a boot process.

### Claim 2 (depends on 1)

The method of claim 1, further comprising: determining whether one or more of the retrieved memory blocks are compressed, and if so, decompressing the one or more memory blocks.

### Claim 3 (depends on 1)

The method of claim 1, wherein the suspended child VM includes a log having pointers to a disk of the powered-on parent VM template as a base disk of the child VM.

### Claim 4 (depends on 3)

The method of claim 3, wherein the log is non-persistent so that upon each execution of the suspended child VM, the powered-on child VM inherits a fresh copy of memory and device state from the powered-on parent VM template.

### Claim 5 (depends on 1)

The method of claim 1, wherein the powered-on child VM is configured to use separate storage that is not related to the powered-on parent VM template.

### Claim 6 (depends on 1)

The method of claim 1, wherein the suspended child VM includes configuration information indicating that the suspended child VM inherits memory and device state of the powered-on parent VM template upon execution.

### Claim 7 (depends on 1)

The method of claim 1, further comprising:
receiving a request to suspend the powered-on child VM;
identifying memory blocks that are not shared with the powered-on parent VM template; and
transferring the identified memory blocks to storage.

### Claim 8 (depends on 1)

The method of claim 1, wherein receiving the request comprises receiving the request from a user.

### Claim 9 (depends on 1)

The method of claim 1, wherein the request is initiated at pre-programed times in anticipation of requests from one or more users.

### Claim 10

A system comprising:
a memory area associated with a computing device, said memory area storing a plurality of memory blocks associated with a plurality of virtual machines (VMs) and a processor programed to perform operations comprising:
receiving a request to resume execution of a suspended child virtual machine (VM) on a host machine, the child VM being one of a plurality of child VMs of a powered-on parent VM template, wherein respective child VMs of the plurality of child VMs are individually suspended and resumed while the parent VM template remains powered-on;
retrieving memory blocks that are associated with the suspended child VM, but are not associated with the powered-on parent VM template; and
executing the suspended child VM to produce a powered-on child VM including logically merging the loaded memory blocs of the suspended child VM with memory blocks shared with the powered-on parent VM template that are maintained resident in memory on the host through the powered-on state, wherein executing the suspended child VM includes using configuration data that specifies a memory state and a device state of the powered-on parent VM template to inherit such that the powered-on child VM resumes without undergoing a boot process.

### Claim 11 (depends on 10)

The system of claim 10 further configured to perform operations comprising:
determining whether one or more of the retrieved memory blocks are compressed, and if so, decompressing the one or more memory blocks.

### Claim 12 (depends on 10)

The system of claim 10, wherein the suspended child VM includes a log having pointers to a disk of the powered-on parent VM template as a base disk of the child VM.

### Claim 13 (depends on 12)

The system of claim 12, wherein the log is non-persistent so that upon each execution of the suspended child VM, the powered-on child VM inherits a fresh copy of memory and device state from the powered-on parent VM template.

### Claim 14 (depends on 10)

The system of claim 10, wherein the powered-on child VM is configured to use separate storage that is not related to the powered-on parent VM template.

### Claim 15 (depends on 10)

The system of claim 10, wherein the suspended child VM includes configuration information indicating that the suspended child VM inherits memory and device state of the powered-on parent VM template upon execution.

### Claim 16 (depends on 10)

The system of claim 10, further configured to perform operations comprising:
receiving a request to suspend the powered-on child VM;
identifying memory blocks that are not shared with the powered-on parent VM template; and
transferring the identified memory blocks to storage.

### Claim 17 (depends on 10)

The system of claim 10, wherein receiving the request comprises receiving the request from a user.

### Claim 18

A method comprising:
receiving a request to suspend a child virtual machine (VM) executing on a host machine of a plurality of child VMs generated from a powered-on parent VM template resident on the same host, wherein respective child VMs of the plurality of child VMs are individually suspended and resumed while the parent VM template remains powered-on, wherein each child VM shares a first plurality of memory blocks with the parent VM template, the shared memory blocks including boot pages and shared application pages, and wherein each child VM stores new writes to a separate plurality of non-shared memory blocks as copy on write versions of the corresponding shared pages and;
in response to the request to suspend the child VM, suspending the child VM including:
identifying memory blocks of the child VM that are not shared with the parent VM template; and
transferring only the identified memory blocks of the child VM that are not shared with the parent VM template to a storage memory.

### Claim 19 (depends on 18)

The method of claim 18, wherein the identified memory blocks of the child VM are transferred after a period of idle time.

### Claim 20 (depends on 18)

The method of claim 18, wherein identifying memory blocks comprises comparing the memory blocks of the child VM to the memory blocks of the parent VM template.
