IP Library Granted Patent US 8,176,486
Granted Patent B2
US 8,176,486 · App. 12/032,429 · Granted May 8, 2012

Maintaining a pool of free virtual machines on a server computer

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 8,176,486
App. No.
12/032,429
Granted
May 8, 2012
Kind
B2
Abstract

Various embodiments of a system and method for managing virtual machines on a server computer are described. According to one embodiment of the method, a pool of free virtual machines may be maintained on the server computer, e.g., where the number of virtual machines in the pool is specified by an administrator. In response to receiving a request to assign a virtual machine to a first user, the server computer may assign a first virtual machine from the pool to the first user and add a new virtual machine to the pool to replace the first virtual machine. In some embodiments the server computer may be one of a plurality of server computers in a server computer system. An administrator may be able to configure different pool sizes for different server computers in the system through a central user interface.

Claims (138)

1. A non-transitory computer-accessible storage medium storing program instructions executable to implement:

receiving user input specifying a pool size N indicating a number of virtual machines for a pool, wherein N is a number greater than or equal to 1;

adding a group of N free virtual machines executing on a first server computer to the pool, wherein each free virtual machine in the pool is currently unconnected to a user's terminal and is available to be assigned to a user;

in response to receiving a first request to assign a virtual machine to a first user:

assigning a first virtual machine from the pool to the first user; and

adding a new free virtual machine to the pool to replace the first virtual machine;

wherein, before the new free virtual machine is added to the pool, the new free virtual machine is in a state of hibernation; and

wherein adding the new free virtual machine to the pool comprises returning the new free virtual machine to an active state of execution and adding the new free virtual machine to the pool;

receiving information indicating a maximum number of concurrent users that can be assigned to virtual machines on the first server computer;

receiving a second request to assign a virtual machine to a second user;

assigning a second virtual machine from the pool to the second user;

determining a first difference between the maximum number of concurrent users and a number of users currently assigned to virtual machines on the first server computer; and

determining whether to add another new free virtual machine to the pool to replace the second virtual machine based on the first difference and the pool size N.

2. The non-transitory computer-accessible storage medium of claim 1 , wherein the program instructions are further executable to implement:

adding the second virtual machine to the pool in response to de-assigning the second virtual machine from the second user; and

in response to determining that adding the second virtual machine to the pool caused the pool size to become greater than N, hibernating one or more of the virtual machines in the pool to reduce the pool size to N.

3. The non-transitory computer-accessible storage medium of claim 1 ,

wherein each free virtual machine in the pool is in an active state of execution.

4. The non-transitory computer-accessible storage medium of claim 1 ,

wherein adding the new free virtual machine to the pool comprises creating the new free virtual machine and adding the new free virtual machine to the pool.

5. The non-transitory computer-accessible storage medium of claim 1 ,

wherein the pool on the first server computer is a first pool, wherein the program instructions are further executable to implement:

receiving second user input specifying a second pool size M indicating a number of virtual machines for a second pool on a second server computer; and

adding a group of M free virtual machines executing on the second server computer to the second pool.

6. The non-transitory computer-accessible storage medium of claim 5 , wherein the program instructions are further executable to implement:

displaying a graphical user interface on a display for managing the first server computer and the second server computer;

wherein the first user input specifying the pool size N for the first pool on the first server computer and the second user input specifying the pool size M for the second pool on the second server computer are received to the graphical user interface displayed on the display.

7. A system comprising:

one or more processors; and

memory storing program instructions;

wherein the program instructions are executable by the one or more processors to implement:

receiving user input specifying a pool size N indicating a number of virtual machines for a pool, wherein N is a number greater than or equal to 1;

adding a group of N free virtual machines to the pool, wherein each free virtual machine in the pool is available to be assigned to a user;

in response to receiving a first request to assign a virtual machine to a first user:

assigning a first virtual machine from the pool to the first user; and

adding a new free virtual machine to the pool to replace the first virtual machine;

wherein, before the new free virtual machine is added to the pool, the new free virtual machine is in a state of hibernation; and

wherein adding the new free virtual machine to the pool comprises returning the new free virtual machine to an active state of execution and adding the new free virtual machine to the pool;

receiving information indicating a maximum number of concurrent users that can be assigned to virtual machines;

receiving a second request to assign a virtual machine to a second user;

assigning a second virtual machine from the pool to the second user;

determining a first difference between the maximum number of concurrent users and a number of users currently assigned to virtual machines; and

determining whether to add another new free virtual machine to the pool to replace the second virtual machine based on the first difference and the pool size N.

8. The system of claim 7 , wherein the program instructions are further executable to implement:

adding the second virtual machine to the pool in response to de-assigning the second virtual machine from the second user; and

in response to determining that adding the second virtual machine to the pool caused the pool size to become greater than N, hibernating one or more of the virtual machines in the pool to reduce the pool size to N.

9. The system of claim 7 ,

wherein adding the new free virtual machine to the pool comprises creating the new free virtual machine and adding the new free virtual machine to the pool.

10. A computer-implemented method comprising:

utilizing a computer to perform:

receiving user input specifying a pool size N indicating a number of virtual machines for a pool, wherein N is a number greater than or equal to 1;

adding a group of N free virtual machines executing on a first server computer to the pool, wherein each free virtual machine in the pool is available to be assigned to a user;

in response to receiving a first request to assign a virtual machine to a first user:

assigning a first virtual machine from the pool to the first user; and

adding a new free virtual machine to the pool to replace the first virtual machine;

wherein, before the new free virtual machine is added to the pool, the new free virtual machine is in a state of hibernation; and

wherein adding the new free virtual machine to the pool comprises returning the new free virtual machine to an active state of execution and adding the new free virtual machine to the pool;

receiving information indicating a maximum number of concurrent users that can be assigned to virtual machines on the first server computer;

receiving a second request to assign a virtual machine to a second user;

assigning a second virtual machine from the pool to the second user;

determining a first difference between the maximum number of concurrent users and a number of users currently assigned to virtual machines on the first server computer; and

determining whether to add another new free virtual machine to the pool to replace the second virtual machine based on the first difference and the pool size N.

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

adding the second virtual machine to the pool in response to de-assigning the second virtual machine from the second user; and

in response to determining that adding the second virtual machine to the pool caused the pool size to become greater than N, hibernating one or more of the virtual machines in the pool to reduce the pool size to N.

12. A non-transitory computer-accessible storage medium storing program instructions executable to implement:

receiving user input specifying a pool size N indicating a number of virtual machines for a pool, wherein N is a number greater than or equal to 1;

adding a group of N free virtual machines executing on a first server computer to the pool, wherein each free virtual machine in the pool is currently unconnected to a user's terminal and is available to be assigned to a user;

in response to receiving a first request to assign a virtual machine to a first user:

assigning a first virtual machine from the pool to the first user; and

adding a new free virtual machine to the pool to replace the first virtual machine;

wherein, before the new free virtual machine is added to the pool, the new free virtual machine is in a state of hibernation;

wherein adding the new free virtual machine to the pool comprises returning the new free virtual machine to an active state of execution and adding the new free virtual machine to the pool; and

wherein the pool on the first server computer is a first pool, wherein the program instructions are further executable to implement:

receiving second user input specifying a second pool size M indicating a number of virtual machines for a second pool on a second server computer; and

adding a group of M free virtual machines executing on the second server computer to the second pool.

13. The non-transitory computer-accessible storage medium of claim 12 , wherein the program instructions are further executable to implement:

adding a second virtual machine to the pool in response to de-assigning the second virtual machine from a second user; and

in response to determining that adding the second virtual machine to the pool caused the pool size to become greater than N, hibernating one or more of the virtual machines in the pool to reduce the pool size to N.

14. The non-transitory computer-accessible storage medium of claim 12 , wherein the program instructions are further executable to implement:

receiving information indicating a maximum number of concurrent users that can be assigned to virtual machines on the first server computer;

receiving a second request to assign a virtual machine to a second user;

assigning a second virtual machine from the pool to the second user; and

determining a first difference between the maximum number of concurrent users and a number of users currently assigned to virtual machines on the first server computer; and

determining whether to add a new free virtual machine to the pool to replace the second virtual machine based on the first difference and the pool size N.

15. The non-transitory computer-accessible storage medium of claim 12 ,

wherein each free virtual machine in the pool is in an active state of execution.

16. The non-transitory computer-accessible storage medium of claim 12 ,

wherein adding the new free virtual machine to the pool comprises creating the new free virtual machine and adding the new free virtual machine to the pool.

17. The non-transitory computer-accessible storage medium of claim 12 , wherein the program instructions are further executable to implement:

displaying a graphical user interface on a display for managing the first server computer and the second server computer;

wherein the first user input specifying the pool size N for the first pool on the first server computer and the second user input specifying the pool size M for the second pool on the second server computer are received to the graphical user interface displayed on the display.

18. A system comprising:

one or more processors; and

memory storing program instructions;

wherein the program instructions are executable by the one or more processors to implement:

receiving user input specifying a pool size N indicating a number of virtual machines for a pool, wherein N is a number greater than or equal to 1;

adding a group of N free virtual machines to the pool, wherein each free virtual machine in the pool is available to be assigned to a user;

in response to receiving a first request to assign a virtual machine to a first user:

assigning a first virtual machine from the pool to the first user; and

adding a new free virtual machine to the pool to replace the first virtual machine;

wherein, before the new free virtual machine is added to the pool, the new free virtual machine is in a state of hibernation;

wherein adding the new free virtual machine to the pool comprises returning the new free virtual machine to an active state of execution and adding the new free virtual machine to the pool; and

wherein the pool on the first server computer is a first pool, wherein the program instructions are further executable to implement:

receiving second user input specifying a second pool size M indicating a number of virtual machines for a second pool on a second server computer; and

adding a group of M free virtual machines executing on the second server computer to the second pool.

19. The system of claim 18 , wherein the program instructions are further executable to implement:

adding a second virtual machine to the pool in response to de-assigning the second virtual machine from a second user; and

in response to determining that adding the second virtual machine to the pool caused the pool size to become greater than N, hibernating one or more of the virtual machines in the pool to reduce the pool size to N.

20. The system of claim 18 , wherein the program instructions are further executable to implement:

receiving information indicating a maximum number of concurrent users that can be assigned to virtual machines;

receiving a second request to assign a virtual machine to a second user;

assigning a second virtual machine from the pool to the second user; and

determining a first difference between the maximum number of concurrent users and a number of users currently assigned to virtual machines; and

determining whether to add a new free virtual machine to the pool to replace the second virtual machine based on the first difference and the pool size N.

21. The system of claim 18 ,

wherein adding the new free virtual machine to the pool comprises creating the new free virtual machine and adding the new free virtual machine to the pool.

22. A computer-implemented method comprising:

utilizing a computer to perform:

receiving user input specifying a pool size N indicating a number of virtual machines for a pool, wherein N is a number greater than or equal to 1;

adding a group of N free virtual machines executing on a first server computer to the pool, wherein each free virtual machine in the pool is available to be assigned to a user;

in response to receiving a first request to assign a virtual machine to a first user:

assigning a first virtual machine from the pool to the first user; and

adding a new free virtual machine to the pool to replace the first virtual machine;

wherein, before the new free virtual machine is added to the pool, the new free virtual machine is in a state of hibernation;

wherein adding the new free virtual machine to the pool comprises returning the new free virtual machine to an active state of execution and adding the new free virtual machine to the pool; and

wherein the pool on the first server computer is a first pool, wherein the program instructions are further executable to implement:

receiving second user input specifying a second pool size M indicating a number of virtual machines for a second pool on a second server computer; and

adding a group of M free virtual machines executing on the second server computer to the second pool.

23. The computer-implemented method of claim 22 , further comprising:

adding a second virtual machine to the pool in response to de-assigning the second virtual machine from a second user; and

in response to determining that adding the second virtual machine to the pool caused the pool size to become greater than N, hibernating one or more of the virtual machines in the pool to reduce the pool size to N.

24. The computer-implemented method of claim 22 , further comprising:

receiving information indicating a maximum number of concurrent users that can be assigned to virtual machines on the first server computer;

receiving a second request to assign a virtual machine to a second user;

assigning a second virtual machine from the pool to the second user; and

determining a first difference between the maximum number of concurrent users and a number of users currently assigned to virtual machines on the first server computer; and

determining whether to add a new free virtual machine to the pool to replace the second virtual machine based on the first difference and the pool size N.

Assignments (12)
PATENT SECURITY AGREEMENT Recorded Aug 15, 2025
From: CLOUD SOFTWARE GROUP, INC.; CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 072488/0172 →
SECURITY INTEREST Recorded May 24, 2024
From: CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.); CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 067662/0568 →
RELEASE AND REASSIGNMENT OF SECURITY INTEREST IN PATENT (REEL/FRAME 062113/0001) Recorded Apr 14, 2023
From: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT
To: CITRIX SYSTEMS, INC.; CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.)
Reel/Frame 063339/0525 →
PATENT SECURITY AGREEMENT Recorded Apr 14, 2023
From: CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.); CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 063340/0164 →
SECOND LIEN PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT
Reel/Frame 062113/0001 →
PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: BANK OF AMERICA, N.A., AS COLLATERAL AGENT
Reel/Frame 062112/0262 →
PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 062113/0470 →
SECURITY INTEREST Recorded Sep 30, 2022
From: CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION
Reel/Frame 062079/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 23, 2013
From: CLEARCUBE TECHNOLOGY, INC.
To: CITRIX SYSTEMS, INC.
Reel/Frame 031837/0976 →
RELEASE OF SECURITY INTEREST Recorded Oct 27, 2011
From: BRIDGE BANK, NATIONAL ASSOCIATION
To: CLEARCUBE TECHNOLOGY, INC.
Reel/Frame 027135/0663 →
SECURITY INTEREST Recorded Oct 3, 2008
From: CLEARCUBE TECHNOLOGY, INC.
To: BRIDGE BANK, NATIONAL ASSOCIATION
Reel/Frame 021645/0719 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Feb 18, 2008
From: HUSAIN, SYED M. AMIR
To: CLEARCUBE TECHNOLOGY, INC.
Reel/Frame 020521/0145 →