US20080201479A1 - Associating Virtual Machines on a Server Computer with Particular Users on an Exclusive Basis - Google Patents
Associating Virtual Machines on a Server Computer with Particular Users on an Exclusive Basis Download PDFInfo
- Publication number
- US20080201479A1 US20080201479A1 US12/032,446 US3244608A US2008201479A1 US 20080201479 A1 US20080201479 A1 US 20080201479A1 US 3244608 A US3244608 A US 3244608A US 2008201479 A1 US2008201479 A1 US 2008201479A1
- Authority
- US
- United States
- Prior art keywords
- user
- computer
- virtual machine
- server computer
- server
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5077—Logical partitioning of resources; Management or configuration of virtualized resources
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L65/00—Network arrangements, protocols or services for supporting real-time applications in data packet communication
- H04L65/1066—Session management
- H04L65/1069—Session establishment or de-establishment
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/34—Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1479—Generic software techniques for error detection or fault masking
- G06F11/1482—Generic software techniques for error detection or fault masking by means of middleware or OS functionality
- G06F11/1484—Generic software techniques for error detection or fault masking by means of middleware or OS functionality involving virtual machines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/301—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system is a virtual computing platform, e.g. logically partitioned systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/4557—Distribution of virtual machine instances; Migration and load balancing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45575—Starting, stopping, suspending or resuming virtual machine instances
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45595—Network integration; Enabling network access in virtual machine instances
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
Definitions
- the present invention relates generally to a server computer system that provides centralized computing resources to a plurality of users. More particularly, the invention relates a system and method for associating virtual machines on a server computer with particular users on an exclusive basis.
- PCs personal computers
- each user of a PC in the enterprise has a networked PC at his/her desk or work area.
- the management of resources in the network may become increasingly complex and expensive.
- Some of the manageability issues involved in maintaining a large number of networked computer systems may include ease of installation and deployment, the topology and physical logistics of the network, asset management, scalability (the cost and effort involved in increasing the number of units), troubleshooting network or unit problems, support costs, software tracking and management, as well as the simple issue of physical space, be it floor space or room on the desktop, as well as security issues regarding physical assets, information protection, software control, and computer virus issues.
- each individual user may connect through a network to a server computer system and use computing resources provided by the server computer system.
- Some server computer systems are capable of leveraging the physical hardware resources available through virtualization.
- Virtualization provides the ability for multiple virtual machines to run together on the same physical server computer. For example, each virtual machine may execute its own operating system and may appear to a user of the virtual machine to be the same as an independent physical computer.
- the software layer that executes on the physical server computer and manages the various virtual machines is called a hypervisor or virtual machine host software.
- the hypervisor can run on bare hardware (called a Type 1 or native VM) or under control of an operating system (called a Type 2 or hosted VM).
- a first computer of a plurality of computers in the server computer system may be associated with a first user on an exclusive basis.
- An administrator of the server computer system may utilize an administrative user interface in order to specify the association.
- Associating the first computer with the first user on the exclusive basis may prevent users other than the first user from using the first computer.
- the system may operate to determine that the first computer is associated with the first user on the exclusive basis and may assign the first computer to the first user. Once the first computer has been assigned to the first user, the first user can begin using the first computer.
- the first computer may be a physical computer. In other embodiments the first computer may be a first virtual machine.
- the method may operate to determine that the first virtual machine is associated with the first user on the exclusive basis and may assign the first user to the first virtual machine. Once the first user has been assigned to the first virtual machine, the first user can begin using the first virtual machine. For example, the user may execute software programs on the first virtual machine, access data stored on the first virtual machine, etc.
- the user may request to disconnect from the server computer.
- the first user may be de-assigned from the first virtual machine, e.g., where the de-assigning indicates that the first virtual machine is no longer in use by the first user.
- the first virtual machine may not be removed from the server computer after the first user has been de-assigned from the first virtual machine. Instead, the server computer may continue to maintain the first virtual machine so that it is available for future connections by the first user. Other users who connect to the server computer may be prevented from using the first virtual machine.
- the first virtual machine may be maintained so that when the first user subsequently connects to it again, the first virtual machine is in the same state as it was when the first user previously disconnected.
- the first virtual machine when the first user is de-assigned from the first virtual machine, the first virtual machine may remain in an active state of execution on the server computer. For example, although the first virtual machine may be in an idle state, the first virtual machine may still be actively executed by the virtual machine host software.
- the first virtual machine when the first user is de-assigned from the first virtual machine, the first virtual machine may be hibernated so that it is no longer in an active state of execution.
- FIG. 1 illustrates computer systems including peripheral devices coupled to computer blades in a cage, according to one embodiment
- FIG. 2 illustrates a computer blade, according to one embodiment
- FIG. 3 illustrates a computer blade having a power supply, hard drive, and motherboard, according to one embodiment
- FIG. 4 illustrates an example of a blade computing system according to one embodiment
- FIGS. 4B and 4C illustrate examples of a server computer system including a plurality of server computers
- FIG. 5 is a flowchart diagram illustrating one embodiment of a method for maintaining a pool of free virtual machines on a server computer
- FIG. 5B illustrates various examples of algorithms for maintaining the number of free virtual machines in the pool over time
- FIG. 6A is a flowchart diagram illustrating one embodiment of a method for associating a virtual machine with a user on an exclusive basis
- FIG. 6B is a flowchart diagram illustrating one embodiment of a method for assigning a particular virtual machine to a particular user after the virtual machine has been exclusively associated with the user;
- FIG. 6C is an example illustrating a plurality of virtual machines on a particular server computer in the server computer system
- FIG. 7A is a flowchart diagram illustrating one embodiment of a method for transferring a virtual machine across server computers
- FIG. 7B is a flowchart diagram illustrating one embodiment of a method for moving execution of a virtual machine from a first server computer that implements one type of virtualization platform to a second server computer that implements a different type of virtualization platform;
- FIG. 7C illustrates an example of a system which may implement the method of FIG. 7B , according to one embodiment
- FIG. 7D illustrates an example of snapshot information used in the method of FIG. 7B ;
- FIG. 8 is a flowchart diagram illustrating one embodiment of a method for automatically hibernating an inactive virtual machine
- FIG. 9 illustrates an example of transferring a virtual machine from a server computer to a client computer and back again
- FIG. 10 is a flowchart diagram illustrating one embodiment of a method for dynamically transferring local execution of a virtual machine from a client computer to remote execution on a server computer;
- FIG. 11 is a flowchart diagram illustrating one embodiment of a method for dynamically transferring remote execution of a virtual machine on a server computer to local execution on a client computer.
- a plurality of users located at different physical locations may connect through a network to a server computer system including one or more server computers.
- each user upon connecting to the server computer system, each user may be assigned to a virtual machine executing on a server computer in the system.
- Various methods for assigning users to virtual machines and managing the virtual machines executing on the various server computers are described herein.
- FIGS. 1 - 4 Blade Computer Systems
- the server computer system may include a blade server computer system, also referred to herein as a blade computer system.
- a blade server computer system multiple physical server computers, e.g., PC's, may be installed into a central frame or cabinet (e.g., physical chassis). Different sets of human interface hardware (e.g., keyboard, display device, mouse, etc.) for interacting with the server computers may be located at remote locations from the central cabinet.
- each physical server computer in the system may be a “computer on a card”, also referred to as a computer blade or “blade”.
- each server computer may be included on a circuit card that may include standard computing system components such as a CPU, memory, power supply, and network interface, as well as an extender, e.g., a USB or PCI extender, for communicating with the remote human interface.
- a server computer system in which a plurality of human interfaces are coupled via a network to a plurality of centralized computer blades is referred to herein as a blade server computing system.
- FIGS. 1-4 illustrate components that may be used in various embodiments of a blade computing system.
- the blade computing system may include a plurality of human interfaces 20 coupled to a cage or chassis 113 that includes a plurality of computer blades 105 , where each computer blade 105 acts as a server computer.
- Each human interface 20 may include at least one peripheral device (e.g., keyboard 117 , mouse 119 , monitor 121 , etc.) that enables a user to provide user input to and/or receive output from a respective computer blade 105 , or a respective virtual machine executing on a computer blade 105 .
- Each computer blade 105 may include various components necessary for computer operations, such as, but not limited to, a processor and a storage medium.
- connecting cables 151 may connect computer blades 105 to respective human interfaces 20 , also referred to as peripheral device groups, through respective device ports or hubs 157 (e.g., C-Ports or I-Ports).
- each device port may comprise an extender device that may enable transmission of user interface signals (i.e., peripheral device signals) over distances generally not allowed by standard protocols such as USB.
- the human interfaces 20 or peripheral device groups may include a keyboard 117 , a pointing device, e.g., a mouse 119 , a display device, e.g., a computer monitor 121 , and/or other peripheral devices for human interface.
- a computer blade 105 such as computer blade 105 A, may communicate with the peripheral devices coupled to the computer blade 105 by sending and receiving encoded human interface signals transmitted over the respective connecting cable 151 .
- a cage 113 e.g., a metal cabinet or chassis, may have a plurality of slots 111 .
- the computer blades 105 A, 105 B, and 105 C may be inserted into the slots 111 A, 111 B, and 111 C, respectively.
- the cage 113 may also include cage connectors (not shown) to couple the computer blades 105 to their respective connecting cables 151 .
- the computer blades 105 may be installed in the cage 113 at a central location, while each human interface 20 (e.g., each peripheral device group) may be located remotely from the cage 113 , such as at respective work areas of the users of the computer blades 105 .
- the separation of the human interfaces 20 from the computer blades 105 may allow easier software installation across a network, such as but not limited to downloading CD-ROMs, and may provide a central location of multiple server computers which may simplify both hardware and software maintenance.
- Each computer blade 105 may also be coupled to a network 115 through an on-board network logic (not shown).
- the network 115 may be a Local Area Network (LAN) or a Wide Area Network (WAN), such as the Internet, although other networks, e.g, wireless, cellular, etc., are also contemplated.
- the computer blades 105 may be inserted into respective slots 111 of the cage 113 , and coupled to respective peripheral device groups through the cage connectors (not shown) and connecting cables 151 .
- each computer blade 105 may also be coupled to the network 115 through the cage connectors (not shown) and a network cable, such as Ethernet cables 163 .
- FIG. 1 illustrates a blade computing system
- the server computer system described herein may include other types and forms of computers.
- the server computer system embodiment shown in FIG. 1 is intended to be an example only, and is not intended to limit the types or number of server computers used in the server computer system.
- FIG. 2 Computer Blade
- the computer blade 105 may include various components for computer operations, such as, but not limited to, a motherboard 207 , a power supply 210 , and a hard drive 208 , as shown.
- the motherboard 207 , the power supply 210 , and the hard drive 208 may be coupled to or mounted on a slide drawer frame 205 .
- the slide drawer frame 205 may be three rack units high (or approximately 5.25 inches), thus occupying a much smaller space than standard PC units, although other slide drawer frame 205 dimensions may also be used.
- the motherboard 207 may be a printed circuit board with components such as, but not limited to, a central processing unit (CPU), memory, and LAN interface. Other types of motherboards and other types of motherboard components are also contemplated.
- the computer blade 105 may include one or more storage devices that implement non-volatile storage, such as a hard drive 208 , optical drive, and/or flash memory.
- the computer blade 105 may communicate with external systems, e.g., peripheral devices and networks, through an edge connector 209 .
- the edge connector 209 may transmit signals such as, but not limited to, network signals, input/output (I/O) signals, video signals, audio signals, and universal serial bus (USB) signals.
- the edge connector may communicate network signals to a network and encoded human interface signals to a group of peripheral devices.
- the computer blade 105 may further include power supply 210 mounted on the slide drawer frame 205 with an internal power source or coupled to an external power source (not shown) to provide power to the computer blade 105 .
- the power supply 210 may convert local main power to an appropriate voltage for the computer blade 105 . Because the computer blade 105 has an individual power supply 210 , if the power supply 210 fails, the computer blade 105 may be the only computer blade that fails.
- a single power supply located in the cage 113 may supply power to several computer blades 105 . However, a single power supply for the cage 113 may be a single point of failure for the cage 113 . If the single power supply fails, multiple computer blades 105 may also fail, requiring multiple replacement blades.
- the computer blades 105 may require one or more stand-by replacement blades connected to another power source. If the power supply for the cage 113 fails, information from the computer blades 105 may be copied onto the replacement computer blades from other computer blades in the system to which information from the computer blades 105 had been previously copied.
- cage 113 may have a plurality of slots, such as slot 111 , to house the computer blade 105 .
- the computer blade 105 may be inserted into one of the slots 111 of the cage 113 .
- the cage 113 may include a cage connector (not shown) to couple to the edge connector 209 on the computer blade 105 .
- the cage connector may also include an external second connector (not shown) that is electrically coupled to the computer blade 105 when the computer blade 105 is inserted into the slot 107 .
- the external second connector may be further coupled to the connecting cables 151 (shown in FIG. 1 ) for communication of the encoded human interface signals to a group of peripheral devices at a remote location.
- the use of the cage connectors as an intermediate connection between computer blade 105 and the connecting cable 151 may allow the removal and exchange of computer blade 105 without the need to disconnect the connecting cable 151 from the cage 113 . If the computer blade 105 fails, the computer blade 105 may be removed and a new computer blade inserted. As noted above, in one embodiment, when a computer blade 105 fails, the user's human interface, e.g., one or more peripheral devices, may be switched to a replacement computer blade 105 (possibly in a manner that is transparent to the user), after which the failed computer blade 105 may be removed and replaced.
- a replacement computer blade 105 possibly in a manner that is transparent to the user
- FIG. 3 Computer Blade Components
- the computer blade 105 may include elements that make up a standard PC, such as, but not limited to, a motherboard 207 with various components such as but not limited to a processor, e.g., a CPU 306 , memory 304 , and interface logic 302 , which may include network logic 305 , I/O logic 307 , and interface logic 303 , as well as other interface circuitry associated with a motherboard 207 , configured on a single card.
- a processor e.g., a CPU 306 , memory 304 , and interface logic 302 , which may include network logic 305 , I/O logic 307 , and interface logic 303 , as well as other interface circuitry associated with a motherboard 207 , configured on a single card.
- the network logic 305 may include a LAN or WAN connection, such as but not limited to an IEEE 803.2 (10/100 BaseT) Ethernet, and circuitry for connecting to peripheral devices coupled to the computer blade 105 .
- the computer blade 105 may be electrically coupled to the cage 113 (shown in FIG. 2 ) through the edge connector 209 that may face to the rear of the computer blade 105 .
- the computer blade 105 may slide into a slot 107 (shown in FIG. 2 ) of the cage 113 (shown in FIG. 2 ), making contact with the cage connector (not shown).
- the computer blade 105 may further include a network interface logic 305 included on a printed circuit board for interfacing to a network.
- the network logic 305 may encode network signals into a format suitable for transmission to the network.
- the network logic 305 may also receive encoded network signals from the network, and decode the encoded network signals.
- the motherboard 207 may further include logic supporting PCI slot-based feature cards.
- the components on the computer blade 105 may be arranged from front to back for thermal efficiency.
- the interface logic 302 may be located at the rear of the computer blade 105
- the power supply 210 and hard disk 208 may be located at the front of the computer blade 105 .
- the computer blade 105 may have different slide drawer frame shapes, such as but not limited to square, rectangle, cubic, and three-dimensional rectangular forms.
- the computer blade 105 may have components mounted on either side of the computer blade 105 .
- the computer blade 105 may also have components mounted on both sides of the computer blade 105 . If the slide drawer frame 205 has a three-dimensional shape, the components may be mounted on an inside surface and outside surface of the slide drawer frame 205 .
- FIG. 4 Example Blade Computing System
- FIG. 4 illustrates an example of a blade computing system according to one embodiment.
- the system includes a plurality of end user consoles 80 .
- Each end user console 80 may include a human interface 20 , also referred to as a peripheral device group.
- Human end users utilize the end user consoles 80 to interact with software programs executing on computer blades 105 .
- the end user consoles 80 may be geographically dispersed, while the computer blades 105 are located in a central location in a cage 113 .
- each computer blade 105 may correspond to one end user console 80 .
- a first user may utilize the end user console 80 A to interact with software programs executing on a computer blade 105 A
- a second user may utilize the end user console 80 B to interact with software programs executing on a computer blade 105 B, etc.
- a computer blade 105 may correspond to or host multiple end user consoles 80 .
- each computer blade 105 may execute virtual machine host software that enables a plurality of virtual machines to execute on the computer blade 105 .
- Each virtual machine may correspond to one of the end user consoles 80 .
- a computer blade 105 A may instantiate two virtual machines, where one of the virtual machines corresponds to an end user console 80 A and the other virtual machine corresponds to an end user console 80 B.
- each computer blade 105 may execute any number of virtual machines and thus may correspond to or host any number of end user consoles 80 .
- the end user consoles 80 may communicate with the computer blades 105 through a wide area network, such as the Internet.
- the number of users connected to the computer blades 105 at any given time may vary. For example, in some embodiments, when a user needs to use a virtual machine he may establish a remote communication session in order to communicate with a virtual machine executing on one of the computer blades 105 . When the user is finished using the virtual machine the remote communication session may end. Thus, at any given time, various numbers of users may have respective remote communication sessions open in order to use respective virtual machines implemented on the computer blades 105 .
- the end user consoles 80 may communicate with the computer blades 105 using any kind of devices and communication software.
- an end user console 80 A may communicate with a dedicated computer blade 105 A through a NeoLinux I/Port client.
- an end user console 80 B may communicate with a VMWare virtual machine executing on a computer blade 105 B through an XPe I/Port client.
- end user consoles 80 C and 80 D may communicate through a web-browser interface via network hardware 40 with computer blades 105 C and 105 D.
- the system includes a primary application server 50 .
- the primary application server 50 is an application server that acts as an interface between the administrator console 70 , the database server 45 , the end user consoles 80 , and the computer blades 105 .
- the primary application server 50 executes system management software 10 that enables the interaction among these components.
- the primary application server 50 may also support fault-tolerant failover to a secondary failover application server 52 .
- the primary application server 50 may maintain security for the system and interact with the each of the nodes in the system, including the database server 45 that stores characteristics, information, and logs related to the system.
- only one primary application server is used in the system.
- failover is provided from the primary to the secondary. Every transaction that is managed by the primary application server 50 may include a final synchronization step to ensure that the secondary application server 52 is always in lock step.
- the secondary application server 52 may be act as a mirror image of the primary application server 50 .
- the secondary application server 52 may receive one-way updates from the devices configured to communicate with both primary and secondary application servers. In the event of a failure with the primary application server 50 , the secondary application server 52 may take over communications and become the primary application server 50 with no loss of configuration information.
- the database server 45 may host a management database that includes information about the system.
- the database may include information about computer blades 105 or other devices in the system, virtual machines executing on the computer blades 105 , users that have been discovered on the network, etc.
- the database may store various kinds of information about the system environment, including inventory information, logs, mapping information, device health and status information (e.g., resource usage and performance statistics), security information, and management information.
- the database may be implemented as a relational database, e.g., using software such as Microsoft SQL Server or MySQL Server.
- Each computer blade 105 may execute software that enables the computer blade to interact with the primary application server 50 and host software applications with which end users interact.
- each computer blade 105 may execute blade client software 12 .
- each virtual machine executing on the computer blade 105 may execute the blade client software 12 .
- the blade client software 12 may be executed by both the host computer blade and by each virtual machine executing on the computer blade 105 .
- 5 copies of the blade client software 12 may be executed—one for the host computer blade 105 and one on each virtual machine instantiation.
- the blade client software 12 may be executed by each virtual machine on a host computer blade 105 but may not be executed by the host computer blade 105 itself.
- a computer blade 105 hosts one or more virtual machines then the computer blade 105 may also execute virtual machine host software that implements and manages the virtual machines.
- the computer blade 105 may execute any kind of virtual machine host software. Examples include Microsoft Virtual Server and VMware Server (or other virtualization platforms from VMWare, Inc.).
- the peripheral devices at each end user console 80 may connect to the primary application server 50 via a device port 157 .
- the port 157 may enable the transmission of device signals between the peripheral devices and the primary application server 50 .
- a port 157 may include an I-Port that allows thin-client communication by encoding the device signals using an IP-based protocol.
- a port 157 may include a C-Port that encodes the device signals using a protocol that enables high-performance graphics transmission.
- port software 14 may be installed on each device port 157 in the system.
- I-Port client software may be installed on the I-Port.
- any of various I-Ports may be supported, such as 18800 running Windows XPe, 18820 running Windows XPe, Eon e100 running Windows XPe, 18020 running NeoLinux, Eon e100 running NeoLinux, Capio One running NeoLinux, etc.
- the system also includes one or more administrator consoles 70 .
- the administrator console 70 provides an administrative graphical user interface through which an administrator may manage the system, e.g., by interacting with the system management software 10 executing on the primary application server 50 .
- the system may include any number of administrator consoles 70 .
- the administrative graphical user interface may enable the administrator to manage the system and monitor resources in the system.
- the administrative graphical user interface may enable the administrator to perform tasks such as: delivering software and driver updates to I/Port thin clients at the end user consoles 80 ; monitoring the health and status of end user consoles, computer blades 105 , primary application server 50 , database server 45 , or other devices in the system; monitoring resource usage on the computer blades 105 ; managing virtual machines executing on the computer blades 105 ; assigning virtual machines to users; etc.
- the graphical user interface may provide the administrator an at-a-glance network-wide snapshot of key resource elements.
- the administrative graphical user interface may also provide the administrator with control over the provisioning of computer blades 105 and their allocation to end user consoles 80 .
- limiting a user to a single computer blade 105 or virtual machine has the potential to create imbalanced resource utilization. This is because while the same blade or virtual machine may have more than enough capability for a light workload at a particular time, it may provide too little computing or memory capacity for more demanding tasks at other times.
- the system may also automate a number of help desk and service tasks that require physical intervention with traditional legacy PCs. For instance, if a virtual machine or blade goes down because of hardware or software failures, the system's sparing functionality may automatically allocate a new virtual machine or blade to the end user, or may enable an administrator to quickly assign a new virtual machine or blade to the end user. Similarly, if the administrator wishes to perform maintenance on a virtual machine or blade and needs to switch a user currently logged into that blade to another resource, he can do so easily using the system's switching-over-IP functionality.
- the server computer system may include multiple blade computing systems.
- the server computer system may include multiple cages 113 , where each cage includes a plurality of computer blades 105 .
- each of the cages 113 may be located physically close to each other, e.g., in the same room or at the same data center.
- different cages 113 may be located separately from each other.
- different cages 113 may be located in different buildings of a large organization.
- different cages 113 may be located in different cities or even different countries.
- FIG. 4 B Server Computer System Including Multiple Standalone Server Computers
- the server computer system to which users connect may include any type and number of server computers.
- the server computer system may not be implemented using a blade computing system, but may instead include a plurality of standalone server computers, e.g., traditional PCs.
- FIG. 4B illustrates an example in which the server computer system includes a plurality of server computers 106 .
- the server computers 106 may be coupled to each other and may also be coupled to a network 115 .
- Each server computer 106 may execute virtual machine host software which implements a plurality of virtual machines executing on the server computer 106 .
- each user may utilize a respective client computer system 82 .
- Each client computer system 82 may be any type of computer system, such as a PC or handheld computing device.
- a user of a respective client computer system 82 may interact with client software in order to connect to the server computer system through the network 115 .
- the user may be assigned to one of the virtual machines executing on one of the server computers 106 .
- the network 115 may include any type of network or combination of networks.
- the network 115 may include any type or combination of local area network (LAN), a wide area network (WAN), wireless networks, an Intranet, the Internet, etc.
- Exemplary local area networks include Ethernet networks, Fiber Distributed Data Interface (FDDI) networks, and token ring networks.
- the server computers 106 and client computers 82 may each be coupled to the network 115 using any type of wired or wireless connection medium.
- wired mediums may include Ethernet, fiber channel, a modem connected to plain old telephone service (POTS), etc.
- Wireless connection mediums may include a wireless connection using a wireless communication protocol such as IEEE 802.11 (wireless Ethernet), a modem link through a cellular service, a satellite link, etc.
- the server computer system may include multiple groups or clusters of server computers.
- FIG. 4C illustrates an example in which three clusters of server computers 82 are located in three respective data centers 17 .
- Server computers 82 in different data centers 17 may communicate with each other through a network.
- the server computers 82 in different data centers 17 may communicate through a Wide Area Network (WAN).
- WAN Wide Area Network
- the server computers 82 in different data centers 17 may communicate through the Internet.
- each data center 17 may be located in a different geographical location, e.g., a different city, country, or continent.
- management software may execute in the server computer system to allow an administrator to manage resources on all the server computers 82 in the various data centers 17 from a central administrative user interface.
- the server computer system may include multiple blade computing systems.
- the server computer system may include a first chassis including a first plurality of blades 105 and a second chassis including a second plurality of blades 105 .
- different blade computing systems may be located at different data centers 17 , e.g., different geographical locations.
- the system may include a combination of different types of server computers.
- some server computers may be implemented as computing blades 105 installed in a blade computing system, and other server computers may be implemented as standalone computers 82 .
- server computer may refer to any type of server computer in the server computer system, e.g., a computing blade 105 such as illustrated in FIGS. 1-4 or a standalone server computer 82 or PC such as illustrated in FIG. 4B .
- each respective server computer e.g., blade 105 or server computer 82 in the server computer system may be configured to execute virtual machine host software that enables the respective server computer to instantiate and execute a plurality of virtual machines. Executing a plurality of virtual machines on a respective server computer may enable multiple users to connect to the respective server computer, e.g., where each user interacts with software applications executed by a respective virtual machine on the respective server computer.
- the user When a user connects to the server computer system, the user may be directed to a one of the server computers (e.g., blades 105 or server computers 82 ) in the server computer system and may be assigned a virtual machine executing on the server computer. Assigning the virtual machine to the user may comprise enabling the user (or a client device used by the user) to communicate with and use the virtual machine. The user may interact through the network with the virtual machine, e.g., by providing input to the virtual machine and receiving output from the virtual machine, similarly as if interacting with a physical computer. For example the communication between the user's client device and the server computer that executes the virtual machine may be performed using any of various remote communication protocols or virtualization protocols, such as VNC, RDP, ICA, TDX, PCoIP, etc.
- VNC remote communication protocols or virtualization protocols
- a free virtual machine that is, a virtual machine not already assigned to and in use by another user
- Creating a new virtual machine may cause the user to experience a delay because of the overhead involved in creating and starting the new virtual machine.
- the user's experience may be improved if a free virtual machine which can be assigned to the user is already executing on the server computer in order to avoid the need to start a new one.
- each virtual machine in an active state of execution on the server computer may utilize the server computer's resources, such as memory and CPU cycles. Thus, it may be wasteful to have many free virtual machines unnecessarily executing on the server computer when they are not in use.
- the management software for the server computer system may enable an administrator to configure the various server computers in the system to maintain respective pools of free virtual machines. For example, for a particular server computer in the system, the administrator may provide user input specifying a pool size of N, which indicates that N free virtual machines should be maintained on the particular server computer, as indicated in block 401 of FIG. 5 .
- the server computer may create and add N free virtual machines to the pool, as indicated in block 403 , e.g., where N is a number greater than or equal to 1.
- Each of the free virtual machines in the pool may be available to be assigned to a user when needed in response to a user request to connect to the server computer.
- each virtual machine in the pool may not currently be in use, it may be in an active state of execution (e.g., not hibernated to disk) so that it can readily be assigned to a user when necessary.
- the number of free virtual machines in the pool may be maintained at the pool size N as users connect and disconnect from the server computer. For example, suppose that the server computer receives a first request to assign a virtual machine to a first user. In response to the first request, the server computer may assign a first virtual machine from the pool to the first user. The user may then use the first virtual machine. For example, a remote communication session may be established between the server computer and a client computer system which the user is using.
- the client computer system may provide input to the first virtual machine that is running on the server computer and receive output from the first virtual machine through the remote communication session, e.g., using a remote communication protocol or virtualization protocol, such as RDP, VNC, ICA, TDX, PCoIP, etc.
- a remote communication protocol or virtualization protocol such as RDP, VNC, ICA, TDX, PCoIP, etc.
- Assigning the first virtual machine to the first user means that the first virtual machine is no longer free, since it is now being used by the user. Thus, the first virtual machine is removed from the pool in response to assigning it to the user.
- the server computer may also add a new free virtual machine to the pool to replace the first virtual machine.
- adding the new free virtual machine to the pool may comprise creating the new free virtual machine and adding the new free virtual machine to the pool.
- the new free virtual machine may not exist at all, or may only exist in the form of a virtual machine image file which has not been instantiated into an active virtual machine.
- the new free virtual machine may already exist but may be in a state of hibernation (e.g., execution of the virtual machine may be suspended and its state information may be stored on disk).
- the new free virtual machine may be removed from hibernation and returned to an active state of execution and then added to the pool.
- the server computer may maintain a pool of free virtual machines available to be assigned to users.
- the number of free virtual machines in the pool may not always be equal to the specified pool size of N, but may vary over time depending on factors such as the pool size and the number of users currently connected to the server computer.
- the server computer may be configured with a maximum number of concurrent users, e.g., the maximum number of users that can be connected to the server computer (assigned to virtual machines on the server computer).
- the server computer may compute a decision on whether to add a new virtual machine to the pool to replace the one that was assigned to the user based on the maximum number of concurrent users, the number of users currently assigned to virtual machines on the first server computer, and/or the pool size N.
- any of various algorithms may be used to determine the number of free virtual machines that should be in the pool at any given time, e.g., where the algorithm may be based on various parameters or conditions.
- FIG. 5B illustrates several examples of how the number of free virtual machines in the pool may vary over time. In these examples, it is assumed that a maximum number of 4 users can be assigned to virtual machines executing on the server computer, and the server computer has been configured with a pool size of N. (In various embodiments a server computer may be configured to allow any maximum number of concurrent users.)
- the server computer may be configured to maintain the number of free virtual machines in the pool to be the minimum of: a) the pool size; and b) the maximum number of concurrent users (i.e., 4) minus the number of currently active users.
- Table 2 illustrates another example of an algorithm for maintaining the pool.
- the algorithm behaves similarly to the one described above with reference to Table 1 except that a minimum of at least one free virtual machine is kept in the pool at all times. Thus, even though the maximum number of 4 active users has been reached at time T 5 , there is still one free virtual machine in the pool.
- the minimum number may be set to values other than 1.
- Various embodiments of the algorithm may use different methods to reduce the number of free virtual machines in the pool as the number of currently active users nears the maximum number of concurrent users. For example, in Table 3 the algorithm behaves similarly as in Table 2, except that at time T 4 when there are 3 active users, there is only one free virtual machine in the pool.
- Table 4 illustrates another example where the number of free virtual machines in the pool is maintained at the pool size of 2 regardless of how many users are currently connected to the server computer.
- the virtual machine that the user was previously using is now free.
- this virtual machine may be added to the pool unconditionally in response to the user disconnecting.
- the virtual machine may only be added to the pool if it would not result in the number of virtual machines in the pool becoming greater than the pool size N.
- the algorithm may allow the virtual machine to be added to the pool even if it would cause the number of virtual machines in the pool to become greater than the pool size N, unless the difference is more than a threshold maximum.
- the server computer may determine that the virtual machine from which the user disconnected should not be added to the pool then the virtual machine may be hibernated, e.g., by saving its state information to disk and suspending its execution. In other embodiments the virtual machine may be removed from the server computer altogether, e.g., may be completely de-allocated or un-instantiated from the server computer.
- the server computer may be configured with a maximum number M of users that can connect to the server computer at one time. In some embodiments the server computer may ensure that the current number of users connected X plus the pool size N is not greater than the maximum number of users M. For example, suppose that the maximum number of users is 5 and the pool size is 2. If there are currently 3 or fewer users connected then the server computer may maintain a pool of 2 free virtual machines.
- the 4th user may be assigned to one of the free virtual machines in the pool, but the server computer may not create a new virtual machine to be added to the pool to replace the one that was assigned to the 4th user, since only one additional user can connect to the server computer and there is already one free virtual machine left in the pool.
- a pool of free virtual machines may be maintained at a certain size, e.g., as described above. For example, suppose that the pool size is set to 1 via a Pool Size configuration value specified by an administrator. In this example, the number of virtual machines running at any given time on the server computer may equal the number of currently connected users plus 1 (except when the maximum number of users are connected).
- the number of virtual machines running at any given time on the server computer may equal the number of currently connected users plus 1 (except when the maximum number of users are connected).
- one of the virtual machines in the pool may be assigned to the user. Since the virtual machine was already instantiated and in an active execution state before the user connected, the user may be able to quickly connect to the server computer.
- the size of the free virtual machine pool may be maintained by instantiating a new virtual machine and adding it to the pool.
- the number of free virtual machines (including the one that was just un-assigned from the user who disconnected) on the server computer may be examined. If the number of free virtual machines is greater than the Pool Size configuration value, the appropriate number of virtual machines may be hibernated to disk so that the number of free virtual machines once more equals the Pool Size configuration value.
- the server computer system may include multiple server computers.
- An administrator of the server computer system may be able to utilize management software to set different pool sizes for different server computers.
- an administrative graphical user interface of the management software may enable the administrator to set the pool size for each server computer as desired.
- the management software may communicate with each server computer to inform them of their respective pool sizes.
- the graphical user interface of the management software may allow the administrator to set a global Pool Size configuration value for all the server computers in the system.
- the administrator may specify a system-wide pool size of 4 for all server computers.
- different pool sizes may be set for different server computers.
- the server computers may be grouped into two or more groups. For each group, the administrator may be able to specify a respective group pool size for all the server computers in a particular group. If a global pool size was set and a group pool size is also set then the group pool size may override the global pool size. In some embodiments the administrator may also be able to set pool sizes for individual server computers. If a global pool size or group pool size is set then the individual pool size specified for a particular server computer may override these global and group settings.
- virtual machines may be used by multiple users. For example, suppose that a user A connects to a particular server computer of the server computer system, and a particular virtual machine is assigned to the user A. Once the user A is done, he may disconnect from the particular server computer. The particular virtual machine may then become available for use by other users. For example, if a user B subsequently connects to the particular server computer, the same virtual machine that user A was previously using may be assigned to the user B.
- FIG. 6A is a flowchart diagram illustrating one embodiment of a method for associating a virtual machine with a user on an exclusive basis.
- a first virtual machine may be created on a particular server computer.
- virtual machine hosting software executing on the particular server computer may create the first virtual machine.
- an administrative user interface of management software for managing the server computer system may be displayed.
- the administrative user interface may enable an administrator to configure operation of the various server computers in the server computer system.
- the administrative user interface may enable the administrator to associate particular virtual machines with particular users on an exclusive basis.
- the user interface may enable the administrator to select a particular server computer and view a list of virtual machines that have been created on the particular server computer.
- the user interface may also enable the administrator to select a first virtual machine from the list of virtual machines, select a first user from a plurality of users defined in the system, and request that the first virtual machine be associated with the first user on an exclusive basis.
- the system may store information indicating that the first virtual machine is exclusively associated with the first user, e.g., indicating that users other than the first user cannot use the first virtual machine.
- FIG. 6B is a flowchart diagram illustrating one embodiment of a method for assigning the first virtual machine to the first user after the first virtual machine has been exclusively associated with the first user.
- a first request from the first user to connect to the server computer system may be received.
- the system may determine that the first virtual machine is associated with the first user on the exclusive basis (e.g., by accessing the information stored in block 435 ) and assign the first virtual machine to the first user in response to the first request, as indicated in blocks 443 and 445 .
- Assigning the first virtual machine to the first user enables the first user to communicate with and use the first virtual machine, e.g., through a remote communication session with the first user's client device.
- the first user's request to connect may be sent directly from the first user's client device to the server computer on which the first virtual machine is defined.
- the request may be first sent to another server computer in the server computer system and then relayed to the server computer on which the first virtual machine is defined.
- the server computer system may include a login server which is configured to receive connection requests and direct the requests to the appropriate server computers in the system.
- the login server may access the stored information indicating that the first virtual machine is exclusively associated with the first user, and in response may direct the user's connection request to the server computer on which the first virtual machine executes.
- the first user can begin using the first virtual machine.
- the user may execute software programs on the first virtual machine, access data stored on the first virtual machine, etc.
- Communication between the user's client device and the server computer on which the first virtual machine executes may be performed using any of various remote communication protocols or virtualization protocols, such as VNC, RDP, ICA, TDX, PCoIP, etc.
- VNC remote communication protocols or virtualization protocols
- the user may request to disconnect from the server computer system, as indicated in block 447 .
- the first virtual machine may be de-assigned from the first user, e.g., where the de-assigning indicates that the first virtual machine is no longer in use by the first user. (It is noted that the first virtual machine remains exclusively associated with the first user even after the first virtual machine is de-assigned from the first user.)
- the first virtual machine may not be removed from the server computer after the first virtual machine has been de-assigned from the first user. Instead, the server computer may continue to maintain the first virtual machine so that it is available for future connections by the first user. In some embodiments the server computer may maintain the first virtual machine in an active state of execution. In other embodiments, execution of the first virtual machine may be suspended, and the first virtual machine may be hibernated to disk.
- the server computer system may store information indicating that only the first user can use the first virtual machine.
- the other user may be assigned a virtual machine other than the first virtual machine that is exclusively associated with the first user.
- the first virtual machine may be maintained so that when the first user subsequently connects to it again, the first virtual machine is in the same state as it was when the first user previously disconnected.
- the first virtual machine when the first virtual machine is de-assigned from the first user, the first virtual machine may remain in an active state of execution on the server computer. For example, although the first virtual machine may be in an idle state, the first virtual machine may still be actively executed by the virtual machine host software.
- the first virtual machine when the first user is de-assigned from the first virtual machine, the first virtual machine may be hibernated so that it is no longer in an active state of execution.
- FIG. 6C is an example illustrating a plurality of virtual machines (VMs) 60 on a particular server computer in the server computer system.
- the VMs 60 that are shown are those that are currently unassigned, i.e., currently not in use by any user.
- the VMs 60 A, 60 B, and 60 C are in an active state of execution, and the VMs 60 D and 60 E are in a state of hibernation.
- the VM 60 A has been associated with a User A on an exclusive basis
- the VM 60 D has been associated with a User B on an exclusive basis.
- users other than the User A are prevented from using the VM 60 A
- users other than the User B are prevented from using the VM 60 B.
- the other VMs 60 are shared virtual machines that have not been exclusively assigned to any user and may be used by any user in the system.
- the User A may have previously connected to and used the VM 60 A. Although the User A subsequently disconnected from the VM 60 A, the VM 60 A remains in an active state of execution in this example. Thus, if the User A subsequently re-connects to the server computer system then the VM 60 A may again be assigned to the User A, and the User A may not need to wait for it to be loaded since it is already in a state of active execution.
- the server computer system receives a connect request from the User B.
- the system may access stored information to determine that the VM 60 B is exclusively associated with the User B and may assign the VM 60 B to the User B.
- the User B may need to wait while the VM 60 B is returned to a state of active execution.
- the system may receive user input from the User B indicating that it is permissible to assign a virtual machine other than the VM 60 B to the User B.
- a login screen may be displayed on the User B's client device when the User B logs in, where the login screen allows the User B to select an option specifying that if the User B's exclusive VM 60 B is not currently loaded then it is acceptable to assign a different VM 60 to the User B.
- the system may prompt the User B to specify whether he wants to wait while the VM 60 B is loaded or wants another active VM 60 to be immediately assigned to him.
- the system may select one of the shared virtual machines that are currently unassigned and in an active state of execution, and assign the User B to the selected VM 60 , e.g., either the VM 60 B or 60 C in this example.
- the virtual machine exclusively assigned to a particular user may not be currently loaded when the user attempts to connect to the system, and no other shared virtual machines may be available on the particular server computer which hosts the user's exclusive virtual machine.
- the particular server computer may have already reached a maximum number of concurrent users allowed.
- the system may be operable to transfer the user's exclusive virtual machine to a different server computer in the server computer system, e.g., using techniques such as described below.
- a particular server computer maintains a pool of free virtual machines of a particular pool size N, as described above.
- the user's exclusive virtual machine may be hibernated to disk so that the number of free virtual machines does not exceed the configured pool size. Thus, if the user reconnects, the user may need to wait until the first virtual machine is retrieved from disk.
- an exclusive virtual machine (i.e., a virtual machine that is associated with a user on an exclusive basis) may not be counted in the total of free virtual machines in the pool.
- an exclusive virtual machine may be counted in the total of free virtual machines in the pool, but the server computer may be configured to replace a non-exclusive (shared) virtual machine in the pool of free virtual machines with the exclusive virtual machine in response to a user of the exclusive virtual machine disconnecting from the server computer.
- the exclusive virtual machine may be ready when the user re-connects so that the user does not have to wait for the exclusive virtual machine to be ready.
- the system may provide the user with a choice, e.g., via a graphical user interface, to either wait for his exclusive virtual machine to be loaded or to be assigned a shared virtual machine.
- the system preferably would not assign a user who has an exclusive virtual machine to a shared virtual machine without first receiving the user's approval.
- the system may support different classes of users, e.g., Exclusive users and Non-Exclusive users.
- Each user in the Exclusive class may be assigned a virtual machine on an exclusive basis when the user first connects to the system, whereas Non-Exclusive users are assigned to shared virtual machines on a non-exclusive basis.
- Associating virtual machines with users on an exclusive basis may allow complete user-based isolation of applications and data stored on a virtual machine. Each user can be an exclusive owner of his virtual machine so that the user's virtual machine is never re-used by other users. In various embodiments, associating a virtual machine with a user on an exclusive basis may also ensure conditions such as:
- various server computers in the system may each execute one or more virtual machines.
- the user may be assigned one of the virtual machines for his use.
- the user may be assigned one of the physical server computers.
- a given server computer in the system may not implement a virtualization platform that allows multiple users to use the server computer's resources. Instead, the entire physical server computer may be dedicated to a single user.
- the physical server computers may be shared among different users. For example, one user may connect to the system and may be assigned a particular physical server computer. After finished using the physical server computer, this user may disconnect from the system. Another user may then connect to the system can be assigned the same physical server computer.
- a physical server computer may be assigned to a single user on an exclusive basis, similarly as described above with respect to a virtual machine being assigned to a single user on an exclusive basis.
- the server computer system may implement a connection broker which is operable to assign computers to users as they connect to the system.
- the connection broker may be operable to assign both virtual machines and physical computers to users.
- the connection broker may use various criteria in order to decide whether to assign a user a virtual machine or a physical computer, and to decide which virtual machine or which physical computer to assign to the user.
- the connection broker may base the decision on factors such as the currently available resources of the computers in the system and the geographic location of the user with respect to the computers.
- the connection broker may also select a virtual machine or a physical computer to assign to a particular user in response to configuration information previously specified by an administrator.
- an administrator of the server computer system may use an administrative user interface to specify an association of a particular virtual machine or a particular physical computer with a particular user.
- Information specifying the association may be stored in a database accessible by the connection broker.
- the connection broker may access the information stored in the database in order to automatically determine which virtual machine or physical computer should be assigned to the user.
- the user may not need to inform the server computer system of the virtual machine or physical computer that is associated with the user, but instead, the system may automatically determine this based on the association information stored in the database.
- the user may not need to provide input specifying a particular virtual machine or physical computer to be assigned to the user.
- the server computer system includes a blade computing system
- the server computer system includes a plurality of standalone server computers or PCs 82 connected via a network
- FIG. 7A is a flowchart diagram illustrating one embodiment of a method for transferring a virtual machine from one server computer to another.
- a first virtual machine on a first server computer in the server computer system may be selected for transfer.
- the first virtual machine may currently be executing on the first server computer.
- the first virtual machine may be hibernated in response to being selected for transfer, as shown in block 502 .
- Hibernating the first virtual machine may comprise pausing or suspending execution of the first virtual machine and storing state information representing the current state of the first virtual machine (e.g., state information representing the state of the first virtual machine as it exists the moment before it is paused or suspended).
- state information may be stored as one or more files on non-volatile storage, such as a disk drive of the first server computer, or other non-volatile storage in the server computer system.
- the goal of hibernating the first virtual machine is to pause or suspend the execution of the first virtual machine without completely shutting down the first virtual machine.
- hibernating the first virtual machine may not include completely shutting down the first virtual machine.
- a shutdown procedure that would typically be performed in order to completely shut down the first virtual machine may not be performed.
- the execution of the first virtual machine may be paused or suspended so that the first virtual machine is no longer in an active state of execution (e.g., no longer being actively executed within the virtualization environment), and the state information representing the current state of the first virtual machine may be stored.
- the virtual machine When execution of a virtual machine is initiated, the virtual machine is typically instantiated from a virtual machine image file.
- the virtualization environment that hosts the virtual machine may read the virtual machine image file from a disk drive and create information in RAM which represents the virtual machine in an active state of execution.
- the virtual machine image file may be constructed according to a particular virtual machine image format supported by a particular virtualization environment or particular virtual machine host software.
- hibernating the first virtual machine may include creating a virtual machine image file representing the first virtual machine in its current state, or updating a virtual machine image file from which the first virtual machine was previously instantiated so that the virtual machine image file represents the current state of the first virtual machine as it exists at the time the first virtual machine is hibernated.
- hibernating the first virtual machine may include storing state information representing the current state of the first virtual machine separately from the virtual machine image file from which the first virtual machine was previously instantiated.
- the first virtual machine may already be hibernated.
- the disk drive of the first server computer may already store state information representing the first virtual machine in its suspended state, and it may not be necessary to perform block 502 .
- a second server computer to which to transfer the first virtual machine may be selected.
- the first server computer may be a first computer blade 105 installed in a chassis 113
- the second server computer may be a second computer blade 105 installed in the chassis 113
- the second server computer may be a second computer blade 105 installed in a different chassis 113 from the first computer blade 105 .
- first server computer may be a first standalone server computer or PC 82
- second server computer may be a second standalone server computer or PC 82
- first server computer may be a first standalone server computer or PC 82
- second server computer may be a computer blade 105 installed in a chassis 113 , or vice versa.
- the hibernated information representing the first virtual machine may be transmitted from the first server computer to the second server computer.
- transmitting the hibernated information may include transmitting a virtual machine image file representing the first virtual machine in its current state and/or transmitting other state information representing the first virtual machine.
- the hibernated information may initially be stored on a local disk drive or other storage device of the first server computer, and the hibernated information may be transmitted for storage on a local disk drive or storage device of the second server computer.
- the file system in which the hibernated information is stored on the first server computer may be accessible by the second server computer.
- the first server computer and the second server computer may both be included in a local area network (LAN) such that both server computers have access to a common file system.
- the second server computer may be connected through a virtual private network (VPN) to the first server computer or to a LAN that includes the first server computer or that includes a storage device on which files for the first server computer are stored.
- VPN virtual private network
- the one or more files representing the hibernated information may be copied to the second server computer through a file system copy operation or a VPN copy operation.
- the file system of the first server computer may not be accessible by the second server computer.
- the second server computer may not be included in the LAN of the first server computer and may not be connected to the LAN through a VPN.
- the second server computer may not have file system access to the one or more files representing the hibernated information of the first virtual machine.
- the first server computer and the second server computer may communicate through a network in order to transfer the hibernated information representing the first virtual machine to the second server computer.
- the second server computer may be connected to the first server computer through a wide area network (WAN) connection, and/or the second server computer may be separated from the first server computer by one or more firewalls.
- the first server computer and the second server computer may communicate using a communication protocol that enables the hibernated information to be transferred from the first server computer to the second server computer through the WAN connection and/or through the one or more firewalls.
- the first server computer and the second server computer may communicate using a common communication protocol, such as HTTP, HTTPS, or FTP to transmit the hibernated information of the first virtual machine to the second server computer.
- the hibernated information representing the first virtual machine may be stored on a storage device accessible by both the first server computer and the second server computer, such as a network attached storage (NAS) or storage area network (SAN). In this case, it may not be necessary to perform block 505 , since the second server computer can access the hibernated information from the NAS or SAN.
- NAS network attached storage
- SAN storage area network
- the second server computer may begin executing the first virtual machine, e.g., under control of a virtualization environment or virtual host software.
- the first virtual machine may be instantiated on the second server computer using the virtual machine image file and/or the other state information representing the first virtual machine transmitted in block 505 .
- the hibernated information includes state information representing the state of the first virtual machine as it existed on the first server computer the moment before it was hibernated.
- the state information may be used to set the first virtual machine on the second server computer into an identical state as it existed on the first server computer or to re-create an execution state of the first virtual machine on the second server computer such that the execution state is identical to how it was on the first server computer.
- the first virtual machine Since the first virtual machine was not completely shut down on the first server computer when it was hibernated, it may not be necessary to perform a complete startup procedure for the first virtual machine on the second server computer. Instead, the first virtual machine may simply be removed from its state of hibernation and returned to an active state of execution under control of the virtualization environment on the second server computer. This may enable execution of the first virtual machine on the second server computer to begin quickly and may enable the preservation of the state of the first virtual machine.
- the method described above may be performed in response to receiving a request to move execution of the first virtual machine from the first server computer to the second server computer.
- the first virtual machine may be in an active state of execution on the first server computer, and a user at a remote client computer may have a first remote communication session open to the first virtual machine on the first server computer.
- an administrator of the server computer system may utilize an administrative user interface in order to request that execution of the first virtual machine be transferred to the second server computer.
- the first virtual machine may be transferred to the second server computer, and the second server computer may resume execution of the first virtual machine, as described above.
- the first remote communication session between the user at a remote client computer and the first server computer may be automatically replaced with a second remote communication session between the remote client computer and the second server computer.
- the user may interact with the first virtual machine just as the user was doing previously, except that now the communication with the first virtual machine occurs between the user's client computer and the second server computer instead of between the user's client computer and the first server computer.
- the first virtual machine may appear to the user to be exactly the same as before it was transferred to the second server computer, and the user may not notice a difference in the first virtual machine regardless of which server computer executes the first virtual machine.
- the transfer of the first virtual machine may be transparent to or unnoticed by the user of the remote client computer.
- the user may not be aware of the transfer.
- the user may notice a delay as the transfer takes place, or the server computer system may communicate with the client software on the remote client computer to cause the client software to display information informing the user that the transfer is taking place and to expect a delay as it occurs.
- the user himself may initiate the transfer of the first virtual machine from the first server computer to the second server computer.
- the client software on the remote client computer may include a feature that enables the user to request that the first virtual machine which he is using be transferred to a different server computer. For example, if the user is experiencing an unusual delay in the communication with the first virtual machine and believes that the delay may be caused by network latency between the client computer and the first server computer, or if the user believes that the delay may be caused by the first server computer being overloaded, then the user may request that his first virtual machine be transferred to a different server computer. In response, the server computer system may transfer the first virtual machine to the second server computer, as described above.
- the user may use a feature of the client software in order to inform an administrator of the server computer system that the user is experiencing poor performance.
- the administrator may use an administrative user interface provided by management software for the server computer system in order to view server computers present in the system and to select a different server computer to which the first virtual machine should be transferred.
- the administrative user interface may display information indicating resource usage and performance statistics of the various server computers in the system, and the administrator may select the second server computer to which to move the first virtual machine based on its resource usage, e.g., may select a server computer that appears to have ample free memory, available processor power, available network bandwidth, or other free resources which may improve the user's experience.
- the administrative user interface may display information indicating network locations or geographic locations of the various server computers in the server computer system, and the administrator may select the second server computer to which to move the first virtual machine based on its location. For example, the administrator may select a second server computer which is geographically closer to the user's client computer than the first server computer.
- the server computer system may be configured to automatically keep track of resource usage and performance statistics of the various server computers in the system and may automatically move various virtual machines between server computers in order to load balance the system.
- the server computer system may be configured to automatically keep track of network latency experienced by the user, and may automatically move the user's virtual machine to a different server computer if the system detects that the user is experiencing an unusually slow network latency.
- the server computer system may automatically transfer the user's virtual machine to a different server computer if the system detects that the first server computer is overloaded, e.g., if its memory, disk space, processor power, network bandwidth, or other resources are running low.
- the server computer system may be configured to automatically determine the geographical proximity between the user's client computer and the first server computer that initially hosts the user's virtual machine, and may automatically move the user's virtual machine to the second server computer if the system determines that the second server computer is closer to the user's client computer.
- the first virtual machine may be actively executing on the first server computer, and the method described above may be performed in order move the first virtual machine to the second server computer. Once the first virtual machine has been transferred, its execution may be automatically resumed on the second server computer.
- the first virtual machine may not be actively executing on the first server computer before being moved to the second server computer, but may instead be in a state of hibernation on the first server computer. In this case, when the first virtual machine has been transferred to the second server computer, the second server computer may not automatically begin executing the first virtual machine. Instead, the first virtual machine may remain in a state of hibernation on the second server computer until subsequently being returned to active execution in response to a subsequent event, such as a request to re-activate the first virtual machine being received.
- various server computers in the server computer system may execute virtualization environment software (also referred to herein as a hypervisor, or virtual machine host software, or virtualization platform).
- the virtualization environment software executing on a particular server computer may implement a virtual machine execution environment so that one or more virtual machines can be created and executed within the virtual machine execution environment on the particular server computer.
- each server computer in the server computer system may execute any type of virtualization environment software.
- Many different implementations of virtualization environments are commercially available from various software vendor companies.
- One example of a virtualization environment software platform that may be executed by a server computer in the server computer system is Microsoft Virtual Server by Microsoft Corp.
- Other examples include ESX Server, Virtual Server, Workstation, and ACE by VMWare, Inc. It is noted that these are listed as examples only, and in other embodiments, the server computers and the server computer system may execute any of various other kinds of virtualization environment software platforms provided by or sold by any of various other organizations or software vendors.
- different server computers in the server computer system may execute different types of virtualization platforms.
- one or more of the server computers may execute the VMWare ESX Server virtualization platform, and one or more other server computers may execute a different VMWare virtualization platform, such as Workstation or ACE.
- one or more of the server computers may execute the VMWare ESX Server virtualization platform, and one or more other server computers may execute the Microsoft Virtual Server virtualization platform.
- Virtual machines for different virtualization platforms may not be compatible with each other.
- a virtual machine image format used by one virtualization platform may not be supported by another virtualization platform.
- the VMWare ESX Server virtualization platform typically cannot execute a virtual machine created by the Microsoft Virtual Server virtualization platform, and vice versa.
- snapshot information 64 for the first virtual machine 60 A may be created.
- the snapshot information 64 represents the state of the first virtual machine 60 A.
- the snapshot information 64 may include any of various types of information representing the state of the first virtual machine 60 A.
- FIG. 7D illustrates an example where the snapshot information 64 includes application state information 65 .
- the application state information 65 may include information representing the execution state of each of these software applications executing on the first virtual machine 60 A. For example, suppose that a first software application is executing on the first virtual machine 60 A.
- the application state information 65 may include information indicating program instructions and data for the first software application currently stored in the memory of the first virtual machine 60 A.
- the snapshot information 64 may include memory state information 67 .
- the memory state information 67 may represent the dynamic memory contents of the first virtual machine 60 A as the contents exist at the time the snapshot information 64 is created.
- the snapshot information 64 may include network state information 66 .
- the network state information 66 may represent the states of network connections that are currently open by the first virtual machine 60 A at the time the snapshot information 64 is created, or other information representing network communication performed by the first virtual machine 60 A.
- the snapshot information 64 may include user interface state information 68 .
- the user interface state information 68 may include information representing a state of the user interface implemented by the first virtual machine 60 A.
- a user of a remote client computer may have a remote communication session opened to the first virtual machine 60 A.
- the first virtual machine 60 A may display one or more graphical user interface windows on the display of the remote client computer.
- the user interface state information 68 may include information representing the state of each graphical user interface window. For example, suppose that a first graphical user interface window is currently displayed on the client computer.
- the user interface state information 68 may include information regarding the first graphical user interface window, such as information indicating whether the window is maximized or minimized, the size of the window, the position of the window on the display, etc.
- execution of the first virtual machine 60 A may be paused just prior to creating the snapshot information 64 . This may enable the entire state of the first virtual machine 60 A to be captured in the snapshot information 64 in a consistent manner, e.g., without the state of the first virtual machine 60 A changing while the snapshot information 64 is being created.
- the snapshot information may be transmitted from the first server computer to the second server computer.
- the virtual machine image file for the first virtual machine 60 A may not be transmitted to the second server computer.
- the snapshot information created in block 517 may be stored on the first server computer 82 A separately from the virtual machine image file and transmitted separately to the second server computer 82 B.
- similar techniques as described above for transmitting the virtual machine image file in the method of FIG. 7A may be used to transmit the snapshot information to the second server computer 82 B.
- the second server computer 82 B may be connected to the first server computer 82 A through a wide area network (WAN) connection, e.g., through the Internet.
- WAN wide area network
- a common communication protocol such as HTTP, HTTPS, or FTP may be used to transmit the snapshot information without requiring the second server computer 82 B to be connected to the first server computer 82 A through a LAN or VPN.
- a second virtual machine 60 B may be created on the second server computer 82 B within a second virtualization platform 63 B, and the state of the second virtual machine 60 B may be set using the snapshot information, as indicated in blocks 521 and 523 .
- the second virtualization platform 63 B may be a different type than the first virtualization platform 63 A on the first server computer 82 A.
- the second virtual machine 60 B may not be created from the virtual machine image file that implements the first virtual machine 60 A on the first server computer 82 A.
- the second virtual machine 60 B may be created by the second virtualization platform 63 B as a different type of virtual machine (i.e., a virtual machine supported by the second virtualization platform 63 B), and then the state of the second virtual machine 60 B may be set so that it appears to the user to be the same as the first virtual machine 60 A.
- the remote communication session that was previously open between the user's client computer and the first server computer 82 A may be replaced by a new remote communication session between the user's client computer and the second server computer 82 B.
- the state of the second virtual machine 60 B is set using the snapshot information 64 , it may appear to the user that he is still using the same virtual machine as before. In some embodiments, the user may not be aware that his virtual machine was moved to the second server computer 82 B, and may not be aware that the virtual machine has been re-created in a different virtualization platform.
- the snapshot information 64 may include application state information 65 representing the execution state of a first software application that was executing on the first virtual machine 60 A when the snapshot information 64 was created.
- setting the state of the second virtual machine 60 B in block 523 may include initiating execution of the first software application on the second virtual machine and setting the execution state of the first software application on the second virtual machine to the state specified by the application state information 65 .
- the user may see the same open software applications on the second virtual machine and may continue to interact with the open software applications just as he was previously doing on the first virtual machine.
- setting the state of the second virtual machine 60 B in block 523 may include storing the memory contents, e.g., program instructions and data, there were stored in the dynamic memory of the first virtual machine 60 A in the dynamic memory of the second virtual machine 60 B, using the memory state information 67 .
- setting the state of the second virtual machine 60 B in block 523 may include setting the network communication state of the second virtual machine 60 B using the network state information 66 . For example, if the first virtual machine 60 A had a network connection open with a particular server computer then a corresponding network connection to the particular server computer may be opened on the second virtual machine 60 B.
- setting the state of the second virtual machine 60 B in block 523 may include setting the user interface state of the second virtual machine 60 B using the user interface state information 68 . For example, if a graphical user interface window was open on the user interface of the first virtual machine 60 A then an identical corresponding graphical user interface window may be opened on the user interface of the second virtual machine 60 B and positioned in the same place on the display.
- FIG. 7C illustrates an example of a system which may implement the method of FIG. 7B according to one embodiment.
- the first server computer 82 A executes software implementing a first virtualization platform 63 A.
- the first virtual machine 60 A executes within the first virtualization platform 63 A.
- the first virtual machine 60 A includes a software agent 61 .
- the software agent 61 may be a software program that executes on the first virtual machine 60 A to create the snapshot information, as discussed above with reference to block 517 .
- the software agent 61 may analyze the contents of the first virtual machine 60 A's memory or other information maintained by the first virtual machine 60 A in order to create the snapshot information representing the state of the first virtual machine 60 A.
- the software that creates the snapshot information 64 in block 517 may not execute within the first virtual machine 60 A itself.
- the snapshot information 64 may be created by the first virtualization platform 63 A, or another software program executing under control of the first virtualization platform 63 A.
- the second server computer 82 B executes software implementing a second virtualization platform 63 B.
- the second virtual machine 60 B executes within the second virtualization platform 63 B.
- the second virtual machine 60 B includes a software agent 62 .
- the software agent 62 may be a software program that executes on the second virtual machine 60 B in order to set the state of the second virtual machine 60 B using the snapshot information 64 , as discussed above with reference to block 523 .
- the software agent 62 may analyze the snapshot information 64 and use the snapshot information 64 to set the contents of the second virtual machine 60 B's memory or set other configuration or state information for the second virtual machine 60 B, e.g., in order to configure the state of a second virtual machine 60 B as described above.
- an administrator may actively cause the execution of the virtual machine to be moved.
- the method of FIG. 7B may be performed in response to user input by the administrator.
- the administrator may communicate with management software through an administrative graphical user interface.
- the graphical user interface may display a list of server computers in the server computer system. The administrator may select the first server computer from the displayed list.
- the management software may display a list of all virtual machines on the first server computer. The administrator may select the first virtual machine from the displayed list.
- the administrator may also interact with the administrative graphical user interface to select the second server computer to which the transfer the first virtual machine (or the second server computer on which a virtual machine corresponding to the first virtual machine should be created).
- execution of the first virtual machine may automatically be transferred from the first server computer to the second server computer, e.g., may be transferred without an administrator requesting the transfer.
- the system management software 10 may cause virtual machines to be automatically transferred across server computers in order to increase the efficiency of resource utilization of server computers in the server computer system.
- an organization has a system that includes a first server computer at a location in California and a second server computer at a location in Japan.
- An employee E may be based at the location in California but may travel to Japan.
- the employee E may log into a thin client end user console 80 at the Japan location, and the system may assign a virtual machine to him.
- the system may store information indicating that he is normally based in California and may assign a virtual machine hosted by the server computer at the California location to him.
- an exclusive virtual machine may be assigned to him, where the exclusive virtual machine is hosted by the server computer at the California location.
- the employee E since the employee E is currently located in Japan, it may be more efficient if the virtual machine assigned to him were hosted by the server computer at the Japan location.
- an administrator or an automated algorithm may allow the virtual machine assigned to the user to be moved from the California location to the Japan location.
- additional variables may be considered, such as ensuring that the virtual machine is close to a database server, if the user needs to execute a database intensive application.
- virtual machines may be moved across server computers in the system for any of various reasons, such as security, speed, efficiency or cost (e.g. minimizing expensive bandwidth) reasons.
- FIG. 8 is a flowchart diagram illustrating one embodiment of a method for automatically hibernating an inactive virtual machine.
- a first virtual machine may be assigned to a first user, e.g., in response to the user logging in to the system.
- the first user may stop using the first virtual machine after some period of time but may not disconnect from the first virtual machine. For example, the user may forget to log out of the system or may be called to another task.
- the system may detect that the first virtual machine assigned to the first user is no longer in active use. For example, the system may determine that no user input has been received from peripheral devices at the first user's console for a threshold period of time or may use other techniques to determine that the first virtual machine is not actively being used. In various embodiments, any of various algorithms or heuristics may be used to determine whether the first virtual machine is in active use. The threshold time period or other factors used to determine inactivity may be configured in response to user input by an administrator.
- the system may cause the first virtual machine to be automatically hibernated. Hibernating the first virtual machine may free computing resources used by the first virtual machine so that they are available for use by active virtual machines.
- each user may be assigned a configuration variable that specifies whether the user is allowed to run disconnected virtual machines.
- a numeric value associated with the configuration variable may specify the number of simultaneous, disconnected virtual machines the user is allowed to run. For example, if a user has a value of 3 associated to him, the first 3 virtual machine sessions he creates and then disconnects will continue to run. If he runs a fourth session and disconnects then the fourth virtual machine may be automatically hibernated after an inactivity period.
- a user of a client computer may connect to a server computer on which a virtual machine is stored.
- the virtual machine may execute on the server computer under control of virtual machine host software (e.g., a hypervisor), and the client computer may provide input to the virtual machine and display output from the virtual machine using a communication protocol which enables communication between the client computer and the remote virtual machine.
- virtual machine host software e.g., a hypervisor
- the client computer may execute client software that includes a hypervisor or virtual machine host software which enables a virtual machine to be executed on the client computer.
- a virtual machine is typically implemented using a virtual machine an image file.
- the hypervisor or virtual machine host software on the client computer needs to access the image file.
- the virtual machine image file may be stored on the server computer system such that the client computer system does not have file-level access to the virtual machine image file.
- the client computer system may be a remote computer system that is not part of the server computer system's local network. The client computer system may not be able to join the server computer system's network in a way that provides the client computer system with direct access to files stored on the server computer system.
- the server computer system may provide access to the virtual machine image file through standard communication protocols such as HTTP, HTTPS, or FTP in order to allow the client computer system to retrieve the virtual machine image file over a network.
- standard communication protocols such as HTTP, HTTPS, or FTP
- the use of such a standard communication protocol may enable the client computer system to obtain the virtual image file without joining the server computer system's network through a VPN, and may enable the file transfer to traverse firewalls.
- the client computer system can execute it locally, e.g., under control of a hypervisor or virtual machine host software.
- FIG. 9 illustrates an example in which a client computer system 82 A executes client software that is capable of performing a communication protocol such as HTTP, HTTPS, or FTP.
- client software may communicate with server-side software executing on a server computer 106 A in order to retrieve the virtual machine image file from the server computer 106 A.
- the client software that retrieves the virtual machine image file may be embedded within a standard web browser program, such as Firefox or Internet Explorer.
- the client software may be embedded in the web browser as a browser plug-in or ActiveX, Flash, AJAX or other dynamic control within the web browser.
- the user may simply enter a URL of the server computer system in the web browser in order to access a web page.
- the web page may include input fields allowing the user to input authentication information, such as a username and password or other information.
- the server computer system may return another web page to the web browser which allows the user to select a desired virtual machine to be retrieved to the client computer.
- the user may be presented with a list of available virtual machines that are associated with the user or to which the user has access.
- the virtual machine to be retrieved by the user may be predetermined, e.g., may have been configured by an administrator of the server computer system.
- the image file for the virtual machine may be streamed from the server computer 106 A to the client computer 82 A, e.g., using a standard protocol supported by the web browser such as HTTP, HTTPS, or FTP. As noted above, these protocols typically do not require a VPN tunnel to exist between the client computer 82 A and the server computer 106 A.
- the client computer may instantiate the virtual machine and begin executing it, e.g., under control of a hypervisor.
- the hypervisor may be embedded in the web browser which the user uses to access the server computer and select the virtual machine image file.
- the user of the client computer 82 A may have previously connected to the server computer system and retrieved a full copy of the virtual machine image file.
- the system may utilize file differencing techniques so that only portions of the virtual machine image file that have changed since the previous transfer need to be transmitted to the client computer 82 A.
- the client computer 82 A may communicate with the server computer 106 A on which the virtual machine image file is stored in order to perform an initial transfer of the entire virtual machine image to the client computer 82 A.
- the virtual machine may then be executed on the client computer 82 A. If any changes to the virtual machine are made then it may be desirable to update the copy of the virtual machine image file on the server computer 106 A, as indicated by arrow 2 in FIG. 9 . Instead of transferring the entire virtual machine image file back to the server computer 106 A, only the changed portions of the virtual machine image file may be transmitted. Thus, the file differencing techniques may be employed in both directions, either when transferring the virtual machine from the server computer 106 A to the client computer 82 A or vice versa.
- the client software on the client computer 82 A may include a feature that enables the user to select whether to execute a virtual machine locally on the client computer 82 A or remotely on the server computer 106 A and manages the virtual machine session and execution. For example, this feature may be exposed to the user as a simple button.
- the system administrator has configured the virtual machine to be downloaded to the client and executed locally. While the virtual machine is executing on the client computer 82 A, the user may click the “Run at Server” button. In response, the execution of the virtual machine may be paused, as indicated in block 901 of FIG. 10 . As indicated in block 903 , an available server computer in the server computer system may be selected to execute the virtual machine. The virtual machine image file on the client computer may be migrated to the selected server computer and synchronized with the copy of the virtual machine image file already stored on the server computer system, as indicated in block 905 . As described above, only the changed portions of the virtual machine image file need to be transferred across the network.
- the selected server computer may then begin executing the virtual machine and may establish a remote communication session with the client computer to enable the user to interact with the virtual machine remotely, e.g., through a remote communication protocol such as VNC, RDP, ICA, TDX, PCoIP, etc.
- a remote communication protocol such as VNC, RDP, ICA, TDX, PCoIP, etc.
- the user may see the same virtual machine that was previously executing locally on the client computer 82 A.
- the user interface implemented by the virtual machine may appear on the display of the client computer 82 A identically to (or very similar to) how it appeared before the virtual machine was migrated to the server computer system, with the same applications and user interface windows open, etc.
- the “Run at client” feature is the inverse of the above functionality.
- a virtual machine is currently executing on the server computer 106 A.
- the user may then click the “Run at client” button in the client software on the client computer 82 A.
- the execution of the virtual machine on the server computer 106 A may be paused.
- the virtual machine may then be migrated to the client computer 82 A, as indicated in block 923 .
- the current version of the virtual machine may be synchronized with the previous version by transferring only the changed portions of the virtual machine image, as described above.
- the client computer 82 A may then begin executing the virtual machine, as indicated in block 925 .
- the client computer 82 A may include a hypervisor or virtual machine host software operable to execute the virtual machine.
- a virtual machine image file that has been transferred from the server computer system to the client computer may be encrypted. Encrypting the virtual machine image file may increase the security of the information in the virtual machine.
- the client software may allow the user to specify various options affecting storage of a virtual machine image file that has been downloaded to the client computer. For example, the user may be able to specify that the virtual machine image file should be completely deleted from the client computer after the user's session with the virtual machine is finished. As another example, the user may be able to specify that the virtual machine image file should continue to be stored locally on the client computer, which may enable the amount of time required to synchronize with the most recent copy of the virtual machine to be reduced upon subsequent usage, as described above.
- an administrator of the server computer system may be able override the user's configuration choices. For example, even if the user has configured virtual machine image files to persist on the local client computer, the administrator may set a server-side flag which causes the server computer to instruct the client software to always delete any downloaded virtual machines, or to delete particular virtual machines that have been downloaded.
- expiry date may be associated with a virtual machine that has been downloaded to and locally stored on the client computer. Once the expiry date of the virtual machine has been reached, the client software may automatically delete the virtual machine. In some embodiments the client software may use the time maintained by the server computer system clock in order to determine whether the expiry date has been reached, rather than using the local client computer system clock.
- the client computer may execute client software that provides capabilities to authenticate the user to the server computer system, download a virtual machine image file from the server computer system, and execute the virtual machine on the client computer, e.g., (through an embedded hypervisor).
- the client software may also be configured to contact the server computer system when it starts and query for any commands that should be executed by the client software.
- the server computer system may command the client software to delete or purge a specific virtual machine stored locally on the client computer, or to delete or purge all locally stored virtual machines.
- the server computer system may command the client software to set a new expiry date for one or more of the virtual machines locally stored on the client computer.
- the server computer system may command the client software to download and install an update for the client software on the client computer. Even if the client software is not able to contact the server computer system, the client software may still use the previously configured expiry dates for all locally stored virtual machines and still purge the virtual machines if they have expired.
- a computer-accessible storage medium may include any storage media accessible by a computer during use to provide instructions and/or data to the computer.
- a computer-accessible storage medium may include storage media such as magnetic or optical media, e.g., one or more disks (fixed or removable), tape, CD-ROM, DVD-ROM, CD-R, CD-RW, DVD-R, DVD-RW, etc.
- Storage media may further include volatile or non-volatile memory media such as RAM (e.g.
- the computer may access the storage media via a communication means such as a network and/or a wireless link.
- a communication means such as a network and/or a wireless link.
Abstract
Description
- The present application claims priority to U.S. provisional patent application Ser. No. 60/889,994 titled, “Virtualization Methods for a Blade Computing System,” which was filed on Feb. 15, 2007, whose inventor was Syed Mohammad Amir Husain.
- 1. Field of the Invention
- The present invention relates generally to a server computer system that provides centralized computing resources to a plurality of users. More particularly, the invention relates a system and method for associating virtual machines on a server computer with particular users on an exclusive basis.
- 2. Description of the Related Art
- Many commercial businesses and enterprises make extensive use of personal computers (PCs) in their daily operations. Typically, each user of a PC in the enterprise has a networked PC at his/her desk or work area. As the number of networked computer systems utilized in an enterprise increases, the management of resources in the network may become increasingly complex and expensive. Some of the manageability issues involved in maintaining a large number of networked computer systems may include ease of installation and deployment, the topology and physical logistics of the network, asset management, scalability (the cost and effort involved in increasing the number of units), troubleshooting network or unit problems, support costs, software tracking and management, as well as the simple issue of physical space, be it floor space or room on the desktop, as well as security issues regarding physical assets, information protection, software control, and computer virus issues.
- Many of these issues may be addressed by centralizing the locations of computing resources. For example, each individual user may connect through a network to a server computer system and use computing resources provided by the server computer system.
- Some server computer systems are capable of leveraging the physical hardware resources available through virtualization. Virtualization provides the ability for multiple virtual machines to run together on the same physical server computer. For example, each virtual machine may execute its own operating system and may appear to a user of the virtual machine to be the same as an independent physical computer. The software layer that executes on the physical server computer and manages the various virtual machines is called a hypervisor or virtual machine host software. The hypervisor can run on bare hardware (called a
Type 1 or native VM) or under control of an operating system (called aType 2 or hosted VM). - Various embodiments of a system and method for associating a computer in a server computer system with a user are disclosed. According to one embodiment of the method, a first computer of a plurality of computers in the server computer system may be associated with a first user on an exclusive basis. An administrator of the server computer system may utilize an administrative user interface in order to specify the association. Associating the first computer with the first user on the exclusive basis may prevent users other than the first user from using the first computer. In response to receiving a request from the first user to connect to the server computer system, the system may operate to determine that the first computer is associated with the first user on the exclusive basis and may assign the first computer to the first user. Once the first computer has been assigned to the first user, the first user can begin using the first computer.
- In some embodiments the first computer may be a physical computer. In other embodiments the first computer may be a first virtual machine. In response to receiving a first request from the first user to connect to the server computer, the method may operate to determine that the first virtual machine is associated with the first user on the exclusive basis and may assign the first user to the first virtual machine. Once the first user has been assigned to the first virtual machine, the first user can begin using the first virtual machine. For example, the user may execute software programs on the first virtual machine, access data stored on the first virtual machine, etc. When the user is finished using the first virtual machine, the user may request to disconnect from the server computer. In response to the user's request to disconnect, the first user may be de-assigned from the first virtual machine, e.g., where the de-assigning indicates that the first virtual machine is no longer in use by the first user.
- However, in some embodiments the first virtual machine may not be removed from the server computer after the first user has been de-assigned from the first virtual machine. Instead, the server computer may continue to maintain the first virtual machine so that it is available for future connections by the first user. Other users who connect to the server computer may be prevented from using the first virtual machine.
- In some embodiments, the first virtual machine may be maintained so that when the first user subsequently connects to it again, the first virtual machine is in the same state as it was when the first user previously disconnected. In some embodiments, when the first user is de-assigned from the first virtual machine, the first virtual machine may remain in an active state of execution on the server computer. For example, although the first virtual machine may be in an idle state, the first virtual machine may still be actively executed by the virtual machine host software. In other embodiments, when the first user is de-assigned from the first virtual machine, the first virtual machine may be hibernated so that it is no longer in an active state of execution.
- A better understanding of the present invention can be obtained when the following detailed description of the embodiment is considered in conjunction with the following drawings, in which:
-
FIG. 1 illustrates computer systems including peripheral devices coupled to computer blades in a cage, according to one embodiment; -
FIG. 2 illustrates a computer blade, according to one embodiment; -
FIG. 3 illustrates a computer blade having a power supply, hard drive, and motherboard, according to one embodiment; -
FIG. 4 illustrates an example of a blade computing system according to one embodiment; -
FIGS. 4B and 4C illustrate examples of a server computer system including a plurality of server computers; -
FIG. 5 is a flowchart diagram illustrating one embodiment of a method for maintaining a pool of free virtual machines on a server computer; -
FIG. 5B illustrates various examples of algorithms for maintaining the number of free virtual machines in the pool over time; -
FIG. 6A is a flowchart diagram illustrating one embodiment of a method for associating a virtual machine with a user on an exclusive basis; -
FIG. 6B is a flowchart diagram illustrating one embodiment of a method for assigning a particular virtual machine to a particular user after the virtual machine has been exclusively associated with the user; -
FIG. 6C is an example illustrating a plurality of virtual machines on a particular server computer in the server computer system; -
FIG. 7A is a flowchart diagram illustrating one embodiment of a method for transferring a virtual machine across server computers; -
FIG. 7B is a flowchart diagram illustrating one embodiment of a method for moving execution of a virtual machine from a first server computer that implements one type of virtualization platform to a second server computer that implements a different type of virtualization platform; -
FIG. 7C illustrates an example of a system which may implement the method ofFIG. 7B , according to one embodiment; -
FIG. 7D illustrates an example of snapshot information used in the method ofFIG. 7B ; -
FIG. 8 is a flowchart diagram illustrating one embodiment of a method for automatically hibernating an inactive virtual machine; -
FIG. 9 illustrates an example of transferring a virtual machine from a server computer to a client computer and back again; -
FIG. 10 is a flowchart diagram illustrating one embodiment of a method for dynamically transferring local execution of a virtual machine from a client computer to remote execution on a server computer; and -
FIG. 11 is a flowchart diagram illustrating one embodiment of a method for dynamically transferring remote execution of a virtual machine on a server computer to local execution on a client computer. - While the invention is susceptible to various modifications and alternative forms, specific embodiments thereof are shown by way of example in the drawings and are herein described in detail. It should be understood, however, that the drawings and detailed description thereto are not intended to limit the invention to the particular form disclosed, but on the contrary, the intention is to cover all modifications, equivalents and alternatives falling within the spirit and scope of the present invention as defined by the appended claims.
- The following provisional patent application is hereby incorporated by reference:
- U.S. provisional patent application Ser. No. 60/889,994 titled, “Virtualization Methods for a Blade Computing System,” which was filed on Feb. 15, 2007, whose inventor was Syed Mohammad Amir Husain.
- Various embodiments of a distributed computer system and associated methods are described herein. A plurality of users located at different physical locations may connect through a network to a server computer system including one or more server computers. In some embodiments, upon connecting to the server computer system, each user may be assigned to a virtual machine executing on a server computer in the system. Various methods for assigning users to virtual machines and managing the virtual machines executing on the various server computers are described herein.
- In some embodiments the server computer system may include a blade server computer system, also referred to herein as a blade computer system. In a blade server computer system, multiple physical server computers, e.g., PC's, may be installed into a central frame or cabinet (e.g., physical chassis). Different sets of human interface hardware (e.g., keyboard, display device, mouse, etc.) for interacting with the server computers may be located at remote locations from the central cabinet. In one approach, each physical server computer in the system may be a “computer on a card”, also referred to as a computer blade or “blade”. For example, each server computer may be included on a circuit card that may include standard computing system components such as a CPU, memory, power supply, and network interface, as well as an extender, e.g., a USB or PCI extender, for communicating with the remote human interface. A server computer system in which a plurality of human interfaces are coupled via a network to a plurality of centralized computer blades is referred to herein as a blade server computing system.
-
FIGS. 1-4 illustrate components that may be used in various embodiments of a blade computing system. AsFIG. 1 indicates, in one embodiment, the blade computing system may include a plurality of human interfaces 20 coupled to a cage orchassis 113 that includes a plurality ofcomputer blades 105, where eachcomputer blade 105 acts as a server computer. Each human interface 20 may include at least one peripheral device (e.g., keyboard 117, mouse 119, monitor 121, etc.) that enables a user to provide user input to and/or receive output from arespective computer blade 105, or a respective virtual machine executing on acomputer blade 105. Eachcomputer blade 105 may include various components necessary for computer operations, such as, but not limited to, a processor and a storage medium. - As
FIG. 1 shows, connecting cables 151 may connectcomputer blades 105 to respective human interfaces 20, also referred to as peripheral device groups, through respective device ports or hubs 157 (e.g., C-Ports or I-Ports). In one embodiment, each device port may comprise an extender device that may enable transmission of user interface signals (i.e., peripheral device signals) over distances generally not allowed by standard protocols such as USB. - In one embodiment, the human interfaces 20 or peripheral device groups, such as the
human interface 20A, may include a keyboard 117, a pointing device, e.g., a mouse 119, a display device, e.g., a computer monitor 121, and/or other peripheral devices for human interface. Acomputer blade 105, such ascomputer blade 105A, may communicate with the peripheral devices coupled to thecomputer blade 105 by sending and receiving encoded human interface signals transmitted over the respective connecting cable 151. In one embodiment, acage 113, e.g., a metal cabinet or chassis, may have a plurality ofslots 111. Thecomputer blades slots cage 113 may also include cage connectors (not shown) to couple thecomputer blades 105 to their respective connecting cables 151. - The
computer blades 105 may be installed in thecage 113 at a central location, while each human interface 20 (e.g., each peripheral device group) may be located remotely from thecage 113, such as at respective work areas of the users of thecomputer blades 105. The separation of the human interfaces 20 from thecomputer blades 105 may allow easier software installation across a network, such as but not limited to downloading CD-ROMs, and may provide a central location of multiple server computers which may simplify both hardware and software maintenance. - Each
computer blade 105 may also be coupled to anetwork 115 through an on-board network logic (not shown). Thenetwork 115 may be a Local Area Network (LAN) or a Wide Area Network (WAN), such as the Internet, although other networks, e.g, wireless, cellular, etc., are also contemplated. As mentioned above, in one embodiment, thecomputer blades 105 may be inserted intorespective slots 111 of thecage 113, and coupled to respective peripheral device groups through the cage connectors (not shown) and connecting cables 151. In one embodiment, eachcomputer blade 105 may also be coupled to thenetwork 115 through the cage connectors (not shown) and a network cable, such as Ethernet cables 163. - While the embodiment of
FIG. 1 illustrates a blade computing system, it is noted that in other embodiments the server computer system described herein may include other types and forms of computers. In other words, the server computer system embodiment shown inFIG. 1 is intended to be an example only, and is not intended to limit the types or number of server computers used in the server computer system. For further information regarding the use of multiple computer blades in a system, please see U.S. patent application Ser. No. 09/728,667 titled “Computer On A Card With A Remote Human Interface”. - Referring to
FIG. 2 , an embodiment of acomputer blade 105 is shown. In one embodiment, thecomputer blade 105 may include various components for computer operations, such as, but not limited to, amotherboard 207, apower supply 210, and ahard drive 208, as shown. In one embodiment, themotherboard 207, thepower supply 210, and thehard drive 208 may be coupled to or mounted on aslide drawer frame 205. In one embodiment, theslide drawer frame 205 may be three rack units high (or approximately 5.25 inches), thus occupying a much smaller space than standard PC units, although otherslide drawer frame 205 dimensions may also be used. - The
motherboard 207 may be a printed circuit board with components such as, but not limited to, a central processing unit (CPU), memory, and LAN interface. Other types of motherboards and other types of motherboard components are also contemplated. Thecomputer blade 105 may include one or more storage devices that implement non-volatile storage, such as ahard drive 208, optical drive, and/or flash memory. Thecomputer blade 105 may communicate with external systems, e.g., peripheral devices and networks, through anedge connector 209. In one embodiment, theedge connector 209 may transmit signals such as, but not limited to, network signals, input/output (I/O) signals, video signals, audio signals, and universal serial bus (USB) signals. For example, the edge connector may communicate network signals to a network and encoded human interface signals to a group of peripheral devices. - In one embodiment, the
computer blade 105 may further includepower supply 210 mounted on theslide drawer frame 205 with an internal power source or coupled to an external power source (not shown) to provide power to thecomputer blade 105. Thepower supply 210 may convert local main power to an appropriate voltage for thecomputer blade 105. Because thecomputer blade 105 has anindividual power supply 210, if thepower supply 210 fails, thecomputer blade 105 may be the only computer blade that fails. In one embodiment, a single power supply located in thecage 113 may supply power toseveral computer blades 105. However, a single power supply for thecage 113 may be a single point of failure for thecage 113. If the single power supply fails,multiple computer blades 105 may also fail, requiring multiple replacement blades. In a system with a single power supply for acage 113, thecomputer blades 105 may require one or more stand-by replacement blades connected to another power source. If the power supply for thecage 113 fails, information from thecomputer blades 105 may be copied onto the replacement computer blades from other computer blades in the system to which information from thecomputer blades 105 had been previously copied. - As
FIG. 2 also illustrates that, in one embodiment,cage 113 may have a plurality of slots, such asslot 111, to house thecomputer blade 105. Thecomputer blade 105 may be inserted into one of theslots 111 of thecage 113. Thecage 113 may include a cage connector (not shown) to couple to theedge connector 209 on thecomputer blade 105. The cage connector may also include an external second connector (not shown) that is electrically coupled to thecomputer blade 105 when thecomputer blade 105 is inserted into the slot 107. The external second connector may be further coupled to the connecting cables 151 (shown inFIG. 1 ) for communication of the encoded human interface signals to a group of peripheral devices at a remote location. The use of the cage connectors as an intermediate connection betweencomputer blade 105 and the connecting cable 151 may allow the removal and exchange ofcomputer blade 105 without the need to disconnect the connecting cable 151 from thecage 113. If thecomputer blade 105 fails, thecomputer blade 105 may be removed and a new computer blade inserted. As noted above, in one embodiment, when acomputer blade 105 fails, the user's human interface, e.g., one or more peripheral devices, may be switched to a replacement computer blade 105 (possibly in a manner that is transparent to the user), after which the failedcomputer blade 105 may be removed and replaced. - Referring to
FIG. 3 , an embodiment of acomputer blade 105 having apower supply 210,hard drive 208, andmotherboard 207 is shown. Thecomputer blade 105 may include elements that make up a standard PC, such as, but not limited to, amotherboard 207 with various components such as but not limited to a processor, e.g., aCPU 306,memory 304, andinterface logic 302, which may includenetwork logic 305, I/O logic 307, andinterface logic 303, as well as other interface circuitry associated with amotherboard 207, configured on a single card. Thenetwork logic 305 may include a LAN or WAN connection, such as but not limited to an IEEE 803.2 (10/100 BaseT) Ethernet, and circuitry for connecting to peripheral devices coupled to thecomputer blade 105. Thecomputer blade 105 may be electrically coupled to the cage 113 (shown inFIG. 2 ) through theedge connector 209 that may face to the rear of thecomputer blade 105. In one embodiment, thecomputer blade 105 may slide into a slot 107 (shown inFIG. 2 ) of the cage 113 (shown inFIG. 2 ), making contact with the cage connector (not shown). - In one embodiment, the
computer blade 105 may further include anetwork interface logic 305 included on a printed circuit board for interfacing to a network. Thenetwork logic 305 may encode network signals into a format suitable for transmission to the network. Thenetwork logic 305 may also receive encoded network signals from the network, and decode the encoded network signals. In one embodiment, themotherboard 207 may further include logic supporting PCI slot-based feature cards. - In one embodiment, the components on the
computer blade 105 may be arranged from front to back for thermal efficiency. Theinterface logic 302 may be located at the rear of thecomputer blade 105, while thepower supply 210 andhard disk 208 may be located at the front of thecomputer blade 105. In one embodiment, thecomputer blade 105 may have different slide drawer frame shapes, such as but not limited to square, rectangle, cubic, and three-dimensional rectangular forms. In one embodiment, thecomputer blade 105 may have components mounted on either side of thecomputer blade 105. Thecomputer blade 105 may also have components mounted on both sides of thecomputer blade 105. If theslide drawer frame 205 has a three-dimensional shape, the components may be mounted on an inside surface and outside surface of theslide drawer frame 205. -
FIG. 4 illustrates an example of a blade computing system according to one embodiment. The system includes a plurality of end user consoles 80. Each end user console 80 may include a human interface 20, also referred to as a peripheral device group. Human end users utilize the end user consoles 80 to interact with software programs executing oncomputer blades 105. The end user consoles 80 may be geographically dispersed, while thecomputer blades 105 are located in a central location in acage 113. - In some embodiments, there may be a one-to-one correspondence between the end user consoles 80 and the
computer blades 105. For example, eachcomputer blade 105 may correspond to one end user console 80. For example, a first user may utilize the end user console 80A to interact with software programs executing on acomputer blade 105A, a second user may utilize the end user console 80B to interact with software programs executing on acomputer blade 105B, etc. - In other embodiments, a
computer blade 105 may correspond to or host multiple end user consoles 80. For example, as described below, in some embodiments eachcomputer blade 105 may execute virtual machine host software that enables a plurality of virtual machines to execute on thecomputer blade 105. Each virtual machine may correspond to one of the end user consoles 80. As an example, acomputer blade 105A may instantiate two virtual machines, where one of the virtual machines corresponds to an end user console 80A and the other virtual machine corresponds to an end user console 80B. In various embodiments, eachcomputer blade 105 may execute any number of virtual machines and thus may correspond to or host any number of end user consoles 80. - In some embodiments the end user consoles 80 may communicate with the
computer blades 105 through a wide area network, such as the Internet. The number of users connected to thecomputer blades 105 at any given time may vary. For example, in some embodiments, when a user needs to use a virtual machine he may establish a remote communication session in order to communicate with a virtual machine executing on one of thecomputer blades 105. When the user is finished using the virtual machine the remote communication session may end. Thus, at any given time, various numbers of users may have respective remote communication sessions open in order to use respective virtual machines implemented on thecomputer blades 105. - In various embodiments, the end user consoles 80 may communicate with the
computer blades 105 using any kind of devices and communication software. As one example, an end user console 80A may communicate with adedicated computer blade 105A through a NeoLinux I/Port client. As another example, an end user console 80B may communicate with a VMWare virtual machine executing on acomputer blade 105B through an XPe I/Port client. As another example, end user consoles 80C and 80D may communicate through a web-browser interface vianetwork hardware 40 withcomputer blades 105C and 105D. - In the embodiment illustrated in
FIG. 4 , the system includes aprimary application server 50. Theprimary application server 50 is an application server that acts as an interface between theadministrator console 70, thedatabase server 45, the end user consoles 80, and thecomputer blades 105. Theprimary application server 50 executes system management software 10 that enables the interaction among these components. Theprimary application server 50 may also support fault-tolerant failover to a secondaryfailover application server 52. Theprimary application server 50 may maintain security for the system and interact with the each of the nodes in the system, including thedatabase server 45 that stores characteristics, information, and logs related to the system. - In some embodiments, only one primary application server is used in the system. When a primary and secondary application server are configured, failover is provided from the primary to the secondary. Every transaction that is managed by the
primary application server 50 may include a final synchronization step to ensure that thesecondary application server 52 is always in lock step. Thus, thesecondary application server 52 may be act as a mirror image of theprimary application server 50. Thesecondary application server 52 may receive one-way updates from the devices configured to communicate with both primary and secondary application servers. In the event of a failure with theprimary application server 50, thesecondary application server 52 may take over communications and become theprimary application server 50 with no loss of configuration information. - The
database server 45 may host a management database that includes information about the system. For example, the database may include information aboutcomputer blades 105 or other devices in the system, virtual machines executing on thecomputer blades 105, users that have been discovered on the network, etc. The database may store various kinds of information about the system environment, including inventory information, logs, mapping information, device health and status information (e.g., resource usage and performance statistics), security information, and management information. In some embodiments the database may be implemented as a relational database, e.g., using software such as Microsoft SQL Server or MySQL Server. - Each
computer blade 105 may execute software that enables the computer blade to interact with theprimary application server 50 and host software applications with which end users interact. For example, in some embodiments eachcomputer blade 105 may execute blade client software 12. In some embodiments, if acomputer blade 105 executes virtual machines then each virtual machine executing on thecomputer blade 105 may execute the blade client software 12. In some embodiments the blade client software 12 may be executed by both the host computer blade and by each virtual machine executing on thecomputer blade 105. For example, for ahost computer blade 105 with 4 virtual machines, 5 copies of the blade client software 12 may be executed—one for thehost computer blade 105 and one on each virtual machine instantiation. In other embodiments the blade client software 12 may be executed by each virtual machine on ahost computer blade 105 but may not be executed by thehost computer blade 105 itself. - If a
computer blade 105 hosts one or more virtual machines then thecomputer blade 105 may also execute virtual machine host software that implements and manages the virtual machines. In various embodiments thecomputer blade 105 may execute any kind of virtual machine host software. Examples include Microsoft Virtual Server and VMware Server (or other virtualization platforms from VMWare, Inc.). - In some embodiments, the peripheral devices at each end user console 80 may connect to the
primary application server 50 via a device port 157. The port 157 may enable the transmission of device signals between the peripheral devices and theprimary application server 50. For example, in one embodiment a port 157 may include an I-Port that allows thin-client communication by encoding the device signals using an IP-based protocol. In another embodiment a port 157 may include a C-Port that encodes the device signals using a protocol that enables high-performance graphics transmission. - In some embodiments, port software 14 may be installed on each device port 157 in the system. For example, where a device port 157 includes an I-Port, I-Port client software may be installed on the I-Port. In various embodiments, any of various I-Ports may be supported, such as 18800 running Windows XPe, 18820 running Windows XPe, Eon e100 running Windows XPe, 18020 running NeoLinux, Eon e100 running NeoLinux, Capio One running NeoLinux, etc.
- The system also includes one or more administrator consoles 70. The
administrator console 70 provides an administrative graphical user interface through which an administrator may manage the system, e.g., by interacting with the system management software 10 executing on theprimary application server 50. In various embodiments the system may include any number of administrator consoles 70. - The administrative graphical user interface may enable the administrator to manage the system and monitor resources in the system. For example, the administrative graphical user interface may enable the administrator to perform tasks such as: delivering software and driver updates to I/Port thin clients at the end user consoles 80; monitoring the health and status of end user consoles,
computer blades 105,primary application server 50,database server 45, or other devices in the system; monitoring resource usage on thecomputer blades 105; managing virtual machines executing on thecomputer blades 105; assigning virtual machines to users; etc. The graphical user interface may provide the administrator an at-a-glance network-wide snapshot of key resource elements. - The administrative graphical user interface may also provide the administrator with control over the provisioning of
computer blades 105 and their allocation to end user consoles 80. For example, in some applications, limiting a user to asingle computer blade 105 or virtual machine has the potential to create imbalanced resource utilization. This is because while the same blade or virtual machine may have more than enough capability for a light workload at a particular time, it may provide too little computing or memory capacity for more demanding tasks at other times. - The system may also automate a number of help desk and service tasks that require physical intervention with traditional legacy PCs. For instance, if a virtual machine or blade goes down because of hardware or software failures, the system's sparing functionality may automatically allocate a new virtual machine or blade to the end user, or may enable an administrator to quickly assign a new virtual machine or blade to the end user. Similarly, if the administrator wishes to perform maintenance on a virtual machine or blade and needs to switch a user currently logged into that blade to another resource, he can do so easily using the system's switching-over-IP functionality.
- It is noted that in some embodiments the server computer system may include multiple blade computing systems. For example, the server computer system may include
multiple cages 113, where each cage includes a plurality ofcomputer blades 105. In one embodiment, each of thecages 113 may be located physically close to each other, e.g., in the same room or at the same data center. In another embodiment,different cages 113 may be located separately from each other. As one example,different cages 113 may be located in different buildings of a large organization. As another example,different cages 113 may be located in different cities or even different countries. - In various embodiments the server computer system to which users connect may include any type and number of server computers. For example, in some embodiments the server computer system may not be implemented using a blade computing system, but may instead include a plurality of standalone server computers, e.g., traditional PCs. For example,
FIG. 4B illustrates an example in which the server computer system includes a plurality of server computers 106. The server computers 106 may be coupled to each other and may also be coupled to anetwork 115. Each server computer 106 may execute virtual machine host software which implements a plurality of virtual machines executing on the server computer 106. - It is also noted that in various embodiments users may utilize any type of client hardware to connect to the server computer system. For example, in the embodiment illustrated in
FIG. 4B , each user may utilize a respective client computer system 82. Each client computer system 82 may be any type of computer system, such as a PC or handheld computing device. A user of a respective client computer system 82 may interact with client software in order to connect to the server computer system through thenetwork 115. In response to the user connecting to the server computer system, the user may be assigned to one of the virtual machines executing on one of the server computers 106. - In various embodiments, the
network 115 may include any type of network or combination of networks. For example, thenetwork 115 may include any type or combination of local area network (LAN), a wide area network (WAN), wireless networks, an Intranet, the Internet, etc. Exemplary local area networks include Ethernet networks, Fiber Distributed Data Interface (FDDI) networks, and token ring networks. Also, the server computers 106 and client computers 82 may each be coupled to thenetwork 115 using any type of wired or wireless connection medium. For example, wired mediums may include Ethernet, fiber channel, a modem connected to plain old telephone service (POTS), etc. Wireless connection mediums may include a wireless connection using a wireless communication protocol such as IEEE 802.11 (wireless Ethernet), a modem link through a cellular service, a satellite link, etc. - It is also noted that in some embodiments the server computer system may include multiple groups or clusters of server computers. For example,
FIG. 4C illustrates an example in which three clusters of server computers 82 are located in three respective data centers 17. Server computers 82 in different data centers 17 may communicate with each other through a network. In some embodiments the server computers 82 in different data centers 17 may communicate through a Wide Area Network (WAN). For example, in some embodiments the server computers 82 in different data centers 17 may communicate through the Internet. For example, each data center 17 may be located in a different geographical location, e.g., a different city, country, or continent. In some embodiments, management software may execute in the server computer system to allow an administrator to manage resources on all the server computers 82 in the various data centers 17 from a central administrative user interface. - As another example, in some embodiments the server computer system may include multiple blade computing systems. For example, the server computer system may include a first chassis including a first plurality of
blades 105 and a second chassis including a second plurality ofblades 105. In some embodiments, different blade computing systems may be located at different data centers 17, e.g., different geographical locations. It is also noted that in some embodiments the system may include a combination of different types of server computers. For example, some server computers may be implemented as computingblades 105 installed in a blade computing system, and other server computers may be implemented as standalone computers 82. - For the remainder of this disclosure, the term “server computer” may refer to any type of server computer in the server computer system, e.g., a
computing blade 105 such as illustrated inFIGS. 1-4 or a standalone server computer 82 or PC such as illustrated inFIG. 4B . - In some embodiments, each respective server computer (e.g.,
blade 105 or server computer 82) in the server computer system may be configured to execute virtual machine host software that enables the respective server computer to instantiate and execute a plurality of virtual machines. Executing a plurality of virtual machines on a respective server computer may enable multiple users to connect to the respective server computer, e.g., where each user interacts with software applications executed by a respective virtual machine on the respective server computer. - When a user connects to the server computer system, the user may be directed to a one of the server computers (e.g.,
blades 105 or server computers 82) in the server computer system and may be assigned a virtual machine executing on the server computer. Assigning the virtual machine to the user may comprise enabling the user (or a client device used by the user) to communicate with and use the virtual machine. The user may interact through the network with the virtual machine, e.g., by providing input to the virtual machine and receiving output from the virtual machine, similarly as if interacting with a physical computer. For example the communication between the user's client device and the server computer that executes the virtual machine may be performed using any of various remote communication protocols or virtualization protocols, such as VNC, RDP, ICA, TDX, PCoIP, etc. - When the user is directed to a given server computer, if a free virtual machine (that is, a virtual machine not already assigned to and in use by another user) is not currently executing on the server computer then it may be necessary to first create or instantiate a new virtual machine. Creating a new virtual machine may cause the user to experience a delay because of the overhead involved in creating and starting the new virtual machine. Thus, the user's experience may be improved if a free virtual machine which can be assigned to the user is already executing on the server computer in order to avoid the need to start a new one.
- However, each virtual machine in an active state of execution on the server computer may utilize the server computer's resources, such as memory and CPU cycles. Thus, it may be wasteful to have many free virtual machines unnecessarily executing on the server computer when they are not in use.
- In some embodiments, the management software for the server computer system may enable an administrator to configure the various server computers in the system to maintain respective pools of free virtual machines. For example, for a particular server computer in the system, the administrator may provide user input specifying a pool size of N, which indicates that N free virtual machines should be maintained on the particular server computer, as indicated in
block 401 ofFIG. 5 . In response, the server computer may create and add N free virtual machines to the pool, as indicated inblock 403, e.g., where N is a number greater than or equal to 1. Each of the free virtual machines in the pool may be available to be assigned to a user when needed in response to a user request to connect to the server computer. Thus, while each virtual machine in the pool may not currently be in use, it may be in an active state of execution (e.g., not hibernated to disk) so that it can readily be assigned to a user when necessary. - As indicated in
block 405, the number of free virtual machines in the pool may be maintained at the pool size N as users connect and disconnect from the server computer. For example, suppose that the server computer receives a first request to assign a virtual machine to a first user. In response to the first request, the server computer may assign a first virtual machine from the pool to the first user. The user may then use the first virtual machine. For example, a remote communication session may be established between the server computer and a client computer system which the user is using. The client computer system may provide input to the first virtual machine that is running on the server computer and receive output from the first virtual machine through the remote communication session, e.g., using a remote communication protocol or virtualization protocol, such as RDP, VNC, ICA, TDX, PCoIP, etc. - Assigning the first virtual machine to the first user means that the first virtual machine is no longer free, since it is now being used by the user. Thus, the first virtual machine is removed from the pool in response to assigning it to the user.
- In order to maintain the number of free virtual machines in the pool at the specified pool size N, the server computer may also add a new free virtual machine to the pool to replace the first virtual machine. In some embodiments, adding the new free virtual machine to the pool may comprise creating the new free virtual machine and adding the new free virtual machine to the pool. For example, the new free virtual machine may not exist at all, or may only exist in the form of a virtual machine image file which has not been instantiated into an active virtual machine. In other embodiments, the new free virtual machine may already exist but may be in a state of hibernation (e.g., execution of the virtual machine may be suspended and its state information may be stored on disk). Thus, the new free virtual machine may be removed from hibernation and returned to an active state of execution and then added to the pool. In this manner, the server computer may maintain a pool of free virtual machines available to be assigned to users.
- In other embodiments the number of free virtual machines in the pool may not always be equal to the specified pool size of N, but may vary over time depending on factors such as the pool size and the number of users currently connected to the server computer. For example, in some embodiments the server computer may be configured with a maximum number of concurrent users, e.g., the maximum number of users that can be connected to the server computer (assigned to virtual machines on the server computer). In some embodiments, when a free virtual machine from the pool is assigned to a user, the server computer may compute a decision on whether to add a new virtual machine to the pool to replace the one that was assigned to the user based on the maximum number of concurrent users, the number of users currently assigned to virtual machines on the first server computer, and/or the pool size N.
- In various embodiments, any of various algorithms may be used to determine the number of free virtual machines that should be in the pool at any given time, e.g., where the algorithm may be based on various parameters or conditions.
FIG. 5B illustrates several examples of how the number of free virtual machines in the pool may vary over time. In these examples, it is assumed that a maximum number of 4 users can be assigned to virtual machines executing on the server computer, and the server computer has been configured with a pool size of N. (In various embodiments a server computer may be configured to allow any maximum number of concurrent users.) - In the example of Table 1, at time T1 there are no active users, and there are 2 free virtual machines in the pool. At time T2, a user has connected to the server computer. One of the free virtual machines in the pool was assigned to the user, and a new free virtual machine was added to the pool to maintain its number at 2. At time T3, a second user has connected to the server computer. Again, one of the free virtual machines in the pool was assigned to the second user, and a new free virtual machine was added to the pool to maintain its number at 2. In this example, the server computer may be configured to maintain the number of free virtual machines in the pool to be the minimum of: a) the pool size; and b) the maximum number of concurrent users (i.e., 4) minus the number of currently active users. Thus, at time T4, after a third user has connected to the server computer and been assigned to one of the free virtual machines in the pool, the virtual machine assigned to the third user is not replaced with a new one, so that there is now only one virtual machine in the pool. Similarly, at time T5, the maximum number of 4 users has been reached, and there are now no free virtual machines in the pool.
- Table 2 illustrates another example of an algorithm for maintaining the pool. In this example, the algorithm behaves similarly to the one described above with reference to Table 1 except that a minimum of at least one free virtual machine is kept in the pool at all times. Thus, even though the maximum number of 4 active users has been reached at time T5, there is still one free virtual machine in the pool. In various embodiments, the minimum number may be set to values other than 1.
- Various embodiments of the algorithm may use different methods to reduce the number of free virtual machines in the pool as the number of currently active users nears the maximum number of concurrent users. For example, in Table 3 the algorithm behaves similarly as in Table 2, except that at time T4 when there are 3 active users, there is only one free virtual machine in the pool.
- Table 4 illustrates another example where the number of free virtual machines in the pool is maintained at the pool size of 2 regardless of how many users are currently connected to the server computer.
- When a user disconnects from the server computer, the virtual machine that the user was previously using is now free. In some embodiments, this virtual machine may be added to the pool unconditionally in response to the user disconnecting. In other embodiments, the virtual machine may only be added to the pool if it would not result in the number of virtual machines in the pool becoming greater than the pool size N. In other embodiments, for example, the algorithm may allow the virtual machine to be added to the pool even if it would cause the number of virtual machines in the pool to become greater than the pool size N, unless the difference is more than a threshold maximum.
- In some embodiments, if the server computer determines that the virtual machine from which the user disconnected should not be added to the pool then the virtual machine may be hibernated, e.g., by saving its state information to disk and suspending its execution. In other embodiments the virtual machine may be removed from the server computer altogether, e.g., may be completely de-allocated or un-instantiated from the server computer.
- In one embodiment the server computer may be configured with a maximum number M of users that can connect to the server computer at one time. In some embodiments the server computer may ensure that the current number of users connected X plus the pool size N is not greater than the maximum number of users M. For example, suppose that the maximum number of users is 5 and the pool size is 2. If there are currently 3 or fewer users connected then the server computer may maintain a pool of 2 free virtual machines. However, if 3 users are connected and then a 4th user connects then the 4th user may be assigned to one of the free virtual machines in the pool, but the server computer may not create a new virtual machine to be added to the pool to replace the one that was assigned to the 4th user, since only one additional user can connect to the server computer and there is already one free virtual machine left in the pool.
- As a further illustration of the pooling technique described above, consider an example in which a server computer is configured to have a maximum of 6 users. It would be possible to have no free virtual machines running on the server computer and instead to instantiate new virtual machines on demand, e.g., in response to users connecting to the server computer. However, this would require users to wait for a virtual machine to be started up before their connection is successful.
- It would also be possible to have 6 virtual machines actively executing on the server computer at all times. For example, when no users are connected, all 6 of the virtual machines would be free; when 1 user is connected, one of the virtual machines would be assigned to the user and the other 5 would be free; etc. However, this may not be an efficient use of resources because each virtual machine uses some of the computer blade's computing resources (e.g., CPU power, memory, network bandwidth, etc.) even if the virtual machine is free.
- Instead, a pool of free virtual machines may be maintained at a certain size, e.g., as described above. For example, suppose that the pool size is set to 1 via a Pool Size configuration value specified by an administrator. In this example, the number of virtual machines running at any given time on the server computer may equal the number of currently connected users plus 1 (except when the maximum number of users are connected). When a new user connects to the server computer, one of the virtual machines in the pool may be assigned to the user. Since the virtual machine was already instantiated and in an active execution state before the user connected, the user may be able to quickly connect to the server computer. The size of the free virtual machine pool may be maintained by instantiating a new virtual machine and adding it to the pool. When a user disconnects from the server computer, the number of free virtual machines (including the one that was just un-assigned from the user who disconnected) on the server computer may be examined. If the number of free virtual machines is greater than the Pool Size configuration value, the appropriate number of virtual machines may be hibernated to disk so that the number of free virtual machines once more equals the Pool Size configuration value.
- As discussed above, the server computer system may include multiple server computers. An administrator of the server computer system may be able to utilize management software to set different pool sizes for different server computers. For example, an administrative graphical user interface of the management software may enable the administrator to set the pool size for each server computer as desired. In response to the user input from the administrator, the management software may communicate with each server computer to inform them of their respective pool sizes.
- In some embodiments, the graphical user interface of the management software may allow the administrator to set a global Pool Size configuration value for all the server computers in the system. For example, the administrator may specify a system-wide pool size of 4 for all server computers. In other embodiments, different pool sizes may be set for different server computers. In one embodiment, the server computers may be grouped into two or more groups. For each group, the administrator may be able to specify a respective group pool size for all the server computers in a particular group. If a global pool size was set and a group pool size is also set then the group pool size may override the global pool size. In some embodiments the administrator may also be able to set pool sizes for individual server computers. If a global pool size or group pool size is set then the individual pool size specified for a particular server computer may override these global and group settings.
- In some embodiments, virtual machines may be used by multiple users. For example, suppose that a user A connects to a particular server computer of the server computer system, and a particular virtual machine is assigned to the user A. Once the user A is done, he may disconnect from the particular server computer. The particular virtual machine may then become available for use by other users. For example, if a user B subsequently connects to the particular server computer, the same virtual machine that user A was previously using may be assigned to the user B.
- In other embodiments, it may be desirable to associate a particular virtual machine with a particular user on an exclusive basis, e.g., so that only the particular user can use the particular virtual machine.
FIG. 6A is a flowchart diagram illustrating one embodiment of a method for associating a virtual machine with a user on an exclusive basis. - In
block 431, a first virtual machine may be created on a particular server computer. For example, virtual machine hosting software executing on the particular server computer may create the first virtual machine. - In 433, an administrative user interface of management software for managing the server computer system may be displayed. The administrative user interface may enable an administrator to configure operation of the various server computers in the server computer system. In particular, the administrative user interface may enable the administrator to associate particular virtual machines with particular users on an exclusive basis. For example, the user interface may enable the administrator to select a particular server computer and view a list of virtual machines that have been created on the particular server computer. The user interface may also enable the administrator to select a first virtual machine from the list of virtual machines, select a first user from a plurality of users defined in the system, and request that the first virtual machine be associated with the first user on an exclusive basis.
- As indicated in 435, in response to the administrator's user input to the user interface, the system may store information indicating that the first virtual machine is exclusively associated with the first user, e.g., indicating that users other than the first user cannot use the first virtual machine.
-
FIG. 6B is a flowchart diagram illustrating one embodiment of a method for assigning the first virtual machine to the first user after the first virtual machine has been exclusively associated with the first user. As indicated inblock 441, a first request from the first user to connect to the server computer system may be received. The system may determine that the first virtual machine is associated with the first user on the exclusive basis (e.g., by accessing the information stored in block 435) and assign the first virtual machine to the first user in response to the first request, as indicated inblocks - In some embodiments, the first user's request to connect may be sent directly from the first user's client device to the server computer on which the first virtual machine is defined. In other embodiments, the request may be first sent to another server computer in the server computer system and then relayed to the server computer on which the first virtual machine is defined. For example, the server computer system may include a login server which is configured to receive connection requests and direct the requests to the appropriate server computers in the system. For example, the login server may access the stored information indicating that the first virtual machine is exclusively associated with the first user, and in response may direct the user's connection request to the server computer on which the first virtual machine executes.
- Once the first virtual machine has been assigned to the first user, the first user can begin using the first virtual machine. For example, the user may execute software programs on the first virtual machine, access data stored on the first virtual machine, etc. Communication between the user's client device and the server computer on which the first virtual machine executes may be performed using any of various remote communication protocols or virtualization protocols, such as VNC, RDP, ICA, TDX, PCoIP, etc. When the user is finished using the first virtual machine, the user may request to disconnect from the server computer system, as indicated in
block 447. In response to the user's request to disconnect, the first virtual machine may be de-assigned from the first user, e.g., where the de-assigning indicates that the first virtual machine is no longer in use by the first user. (It is noted that the first virtual machine remains exclusively associated with the first user even after the first virtual machine is de-assigned from the first user.) - However, in some embodiments the first virtual machine may not be removed from the server computer after the first virtual machine has been de-assigned from the first user. Instead, the server computer may continue to maintain the first virtual machine so that it is available for future connections by the first user. In some embodiments the server computer may maintain the first virtual machine in an active state of execution. In other embodiments, execution of the first virtual machine may be suspended, and the first virtual machine may be hibernated to disk.
- Other users who connect to the server computer may be prevented from using the first virtual machine. For example, as noted above, when the first virtual machine is associated with the first user on the exclusive basis, the server computer system may store information indicating that only the first user can use the first virtual machine. Thus, if another user connects to the server computer, the other user may be assigned a virtual machine other than the first virtual machine that is exclusively associated with the first user.
- In some embodiments, the first virtual machine may be maintained so that when the first user subsequently connects to it again, the first virtual machine is in the same state as it was when the first user previously disconnected. In some embodiments, when the first virtual machine is de-assigned from the first user, the first virtual machine may remain in an active state of execution on the server computer. For example, although the first virtual machine may be in an idle state, the first virtual machine may still be actively executed by the virtual machine host software. In other embodiments, when the first user is de-assigned from the first virtual machine, the first virtual machine may be hibernated so that it is no longer in an active state of execution.
-
FIG. 6C is an example illustrating a plurality of virtual machines (VMs) 60 on a particular server computer in the server computer system. TheVMs 60 that are shown are those that are currently unassigned, i.e., currently not in use by any user. TheVMs VMs VM 60A has been associated with a User A on an exclusive basis, and theVM 60D has been associated with a User B on an exclusive basis. Thus, users other than the User A are prevented from using theVM 60A, and users other than the User B are prevented from using theVM 60B. Theother VMs 60 are shared virtual machines that have not been exclusively assigned to any user and may be used by any user in the system. - In this example, the User A may have previously connected to and used the
VM 60A. Although the User A subsequently disconnected from theVM 60A, theVM 60A remains in an active state of execution in this example. Thus, if the User A subsequently re-connects to the server computer system then theVM 60A may again be assigned to the User A, and the User A may not need to wait for it to be loaded since it is already in a state of active execution. - Suppose now that the server computer system receives a connect request from the User B. The system may access stored information to determine that the
VM 60B is exclusively associated with the User B and may assign theVM 60B to the User B. However, since theVM 60B is in a state of hibernation, in some embodiments the User B may need to wait while theVM 60B is returned to a state of active execution. In other embodiments the system may receive user input from the User B indicating that it is permissible to assign a virtual machine other than theVM 60B to the User B. For example, in some embodiments a login screen may be displayed on the User B's client device when the User B logs in, where the login screen allows the User B to select an option specifying that if the User B'sexclusive VM 60B is not currently loaded then it is acceptable to assign adifferent VM 60 to the User B. In other embodiments, after determining that theVM 60B is currently hibernated, the system may prompt the User B to specify whether he wants to wait while theVM 60B is loaded or wants anotheractive VM 60 to be immediately assigned to him. - If the User B chooses to be assigned to a
different VM 60 then the system may select one of the shared virtual machines that are currently unassigned and in an active state of execution, and assign the User B to the selectedVM 60, e.g., either theVM - It is possible that in some situations the virtual machine exclusively assigned to a particular user may not be currently loaded when the user attempts to connect to the system, and no other shared virtual machines may be available on the particular server computer which hosts the user's exclusive virtual machine. For example, the particular server computer may have already reached a maximum number of concurrent users allowed. In this situation the system may be operable to transfer the user's exclusive virtual machine to a different server computer in the server computer system, e.g., using techniques such as described below.
- Consider an embodiment in which a particular server computer maintains a pool of free virtual machines of a particular pool size N, as described above. In some embodiments, when a user with an exclusive virtual machine disconnects from the server computer, the user's exclusive virtual machine may be hibernated to disk so that the number of free virtual machines does not exceed the configured pool size. Thus, if the user reconnects, the user may need to wait until the first virtual machine is retrieved from disk.
- In other embodiments, an exclusive virtual machine (i.e., a virtual machine that is associated with a user on an exclusive basis) may not be counted in the total of free virtual machines in the pool. In other embodiments, an exclusive virtual machine may be counted in the total of free virtual machines in the pool, but the server computer may be configured to replace a non-exclusive (shared) virtual machine in the pool of free virtual machines with the exclusive virtual machine in response to a user of the exclusive virtual machine disconnecting from the server computer. In either of these embodiments, the exclusive virtual machine may be ready when the user re-connects so that the user does not have to wait for the exclusive virtual machine to be ready.
- As noted above, the system may provide the user with a choice, e.g., via a graphical user interface, to either wait for his exclusive virtual machine to be loaded or to be assigned a shared virtual machine. However, the system preferably would not assign a user who has an exclusive virtual machine to a shared virtual machine without first receiving the user's approval.
- In some embodiments, the system may support different classes of users, e.g., Exclusive users and Non-Exclusive users. Each user in the Exclusive class may be assigned a virtual machine on an exclusive basis when the user first connects to the system, whereas Non-Exclusive users are assigned to shared virtual machines on a non-exclusive basis.
- Associating virtual machines with users on an exclusive basis may allow complete user-based isolation of applications and data stored on a virtual machine. Each user can be an exclusive owner of his virtual machine so that the user's virtual machine is never re-used by other users. In various embodiments, associating a virtual machine with a user on an exclusive basis may also ensure conditions such as:
-
- A particular application license is only used by a particular user
- Data stored on a particular virtual machine is in no way accessible to anyone else
- Personalization and Internet cache data as well as other privacy items are not accessible to any user other than the exclusively assigned user
- Any temporary files or other scratch space can in no way be accessed and reverse engineered for data theft
- Operating system features such as System Restore operate within the context of a single user (not multiple users making changes to the system in a way that makes System Restore unviable).
- As discussed above, in some embodiments of the server computer system, various server computers in the system may each execute one or more virtual machines. When a user connects to the server computer system, the user may be assigned one of the virtual machines for his use.
- In other embodiments, instead of being assigned a virtual machine, the user may be assigned one of the physical server computers. For example, a given server computer in the system may not implement a virtualization platform that allows multiple users to use the server computer's resources. Instead, the entire physical server computer may be dedicated to a single user.
- In some embodiments the physical server computers may be shared among different users. For example, one user may connect to the system and may be assigned a particular physical server computer. After finished using the physical server computer, this user may disconnect from the system. Another user may then connect to the system can be assigned the same physical server computer.
- In other embodiments a physical server computer may be assigned to a single user on an exclusive basis, similarly as described above with respect to a virtual machine being assigned to a single user on an exclusive basis.
- The server computer system may implement a connection broker which is operable to assign computers to users as they connect to the system. In some embodiments the connection broker may be operable to assign both virtual machines and physical computers to users. For example, the connection broker may use various criteria in order to decide whether to assign a user a virtual machine or a physical computer, and to decide which virtual machine or which physical computer to assign to the user. For example, the connection broker may base the decision on factors such as the currently available resources of the computers in the system and the geographic location of the user with respect to the computers.
- The connection broker may also select a virtual machine or a physical computer to assign to a particular user in response to configuration information previously specified by an administrator. For example, an administrator of the server computer system may use an administrative user interface to specify an association of a particular virtual machine or a particular physical computer with a particular user. Information specifying the association may be stored in a database accessible by the connection broker. When the user attempts to log on to the system, the connection broker may access the information stored in the database in order to automatically determine which virtual machine or physical computer should be assigned to the user. Thus, the user may not need to inform the server computer system of the virtual machine or physical computer that is associated with the user, but instead, the system may automatically determine this based on the association information stored in the database. Thus, when the user logs on to the system, the user may not need to provide input specifying a particular virtual machine or physical computer to be assigned to the user.
- In some embodiments it may be desirable to transfer or move a virtual machine from one server computer in the server computer system to another server computer in the server computer system. For example, where the server computer system includes a blade computing system, it may be desirable to transfer a virtual machine executing on one
computing blade 105 to anothercomputing blade 105. As another example, where the server computer system includes a plurality of standalone server computers or PCs 82 connected via a network, it may be desirable to transfer a virtual machine executing on one server computer 82 to another server computer 82. -
FIG. 7A is a flowchart diagram illustrating one embodiment of a method for transferring a virtual machine from one server computer to another. - In 501, a first virtual machine on a first server computer in the server computer system may be selected for transfer. In some embodiments the first virtual machine may currently be executing on the first server computer. In this case, the first virtual machine may be hibernated in response to being selected for transfer, as shown in
block 502. Hibernating the first virtual machine may comprise pausing or suspending execution of the first virtual machine and storing state information representing the current state of the first virtual machine (e.g., state information representing the state of the first virtual machine as it exists the moment before it is paused or suspended). For example, the state information may be stored as one or more files on non-volatile storage, such as a disk drive of the first server computer, or other non-volatile storage in the server computer system. - The goal of hibernating the first virtual machine is to pause or suspend the execution of the first virtual machine without completely shutting down the first virtual machine. Thus, hibernating the first virtual machine may not include completely shutting down the first virtual machine. For example, when the first virtual machine is hibernated, a shutdown procedure that would typically be performed in order to completely shut down the first virtual machine may not be performed. Instead, the execution of the first virtual machine may be paused or suspended so that the first virtual machine is no longer in an active state of execution (e.g., no longer being actively executed within the virtualization environment), and the state information representing the current state of the first virtual machine may be stored.
- When execution of a virtual machine is initiated, the virtual machine is typically instantiated from a virtual machine image file. For example, the virtualization environment that hosts the virtual machine may read the virtual machine image file from a disk drive and create information in RAM which represents the virtual machine in an active state of execution. The virtual machine image file may be constructed according to a particular virtual machine image format supported by a particular virtualization environment or particular virtual machine host software. In some embodiments, hibernating the first virtual machine may include creating a virtual machine image file representing the first virtual machine in its current state, or updating a virtual machine image file from which the first virtual machine was previously instantiated so that the virtual machine image file represents the current state of the first virtual machine as it exists at the time the first virtual machine is hibernated. In other embodiments, hibernating the first virtual machine may include storing state information representing the current state of the first virtual machine separately from the virtual machine image file from which the first virtual machine was previously instantiated.
- In other embodiments, at the time the first virtual machine is selected for transfer in
block 501, the first virtual machine may already be hibernated. In this case, the disk drive of the first server computer may already store state information representing the first virtual machine in its suspended state, and it may not be necessary to performblock 502. - In 503, a second server computer to which to transfer the first virtual machine may be selected. For example, in one embodiment the first server computer may be a
first computer blade 105 installed in achassis 113, and the second server computer may be asecond computer blade 105 installed in thechassis 113. In another embodiment the second server computer may be asecond computer blade 105 installed in adifferent chassis 113 from thefirst computer blade 105. - In another embodiment the first server computer may be a first standalone server computer or PC 82, and the second server computer may be a second standalone server computer or PC 82. In another embodiment the first server computer may be a first standalone server computer or PC 82, and the second server computer may be a
computer blade 105 installed in achassis 113, or vice versa. - As indicated in
block 505, in some embodiments the hibernated information representing the first virtual machine may be transmitted from the first server computer to the second server computer. For example, transmitting the hibernated information may include transmitting a virtual machine image file representing the first virtual machine in its current state and/or transmitting other state information representing the first virtual machine. - In some embodiments, the hibernated information may initially be stored on a local disk drive or other storage device of the first server computer, and the hibernated information may be transmitted for storage on a local disk drive or storage device of the second server computer. In some embodiments the file system in which the hibernated information is stored on the first server computer may be accessible by the second server computer. For example, in some embodiments the first server computer and the second server computer may both be included in a local area network (LAN) such that both server computers have access to a common file system. As another example, the second server computer may be connected through a virtual private network (VPN) to the first server computer or to a LAN that includes the first server computer or that includes a storage device on which files for the first server computer are stored. Thus, in some embodiments the one or more files representing the hibernated information may be copied to the second server computer through a file system copy operation or a VPN copy operation.
- In other embodiments the file system of the first server computer may not be accessible by the second server computer. For example, the second server computer may not be included in the LAN of the first server computer and may not be connected to the LAN through a VPN. Thus, the second server computer may not have file system access to the one or more files representing the hibernated information of the first virtual machine. In this case, the first server computer and the second server computer may communicate through a network in order to transfer the hibernated information representing the first virtual machine to the second server computer.
- In some embodiments the second server computer may be connected to the first server computer through a wide area network (WAN) connection, and/or the second server computer may be separated from the first server computer by one or more firewalls. In this case, the first server computer and the second server computer may communicate using a communication protocol that enables the hibernated information to be transferred from the first server computer to the second server computer through the WAN connection and/or through the one or more firewalls. For example, in some embodiments the first server computer and the second server computer may communicate using a common communication protocol, such as HTTP, HTTPS, or FTP to transmit the hibernated information of the first virtual machine to the second server computer.
- In other embodiments, when the first virtual machine is hibernated in
block 502, the hibernated information representing the first virtual machine may be stored on a storage device accessible by both the first server computer and the second server computer, such as a network attached storage (NAS) or storage area network (SAN). In this case, it may not be necessary to performblock 505, since the second server computer can access the hibernated information from the NAS or SAN. - As indicated in
block 507, after the hibernated information representing the first virtual machine has been transmitted to the second server computer, the second server computer may begin executing the first virtual machine, e.g., under control of a virtualization environment or virtual host software. For example, the first virtual machine may be instantiated on the second server computer using the virtual machine image file and/or the other state information representing the first virtual machine transmitted inblock 505. As noted above, the hibernated information includes state information representing the state of the first virtual machine as it existed on the first server computer the moment before it was hibernated. Thus, the state information may be used to set the first virtual machine on the second server computer into an identical state as it existed on the first server computer or to re-create an execution state of the first virtual machine on the second server computer such that the execution state is identical to how it was on the first server computer. - Since the first virtual machine was not completely shut down on the first server computer when it was hibernated, it may not be necessary to perform a complete startup procedure for the first virtual machine on the second server computer. Instead, the first virtual machine may simply be removed from its state of hibernation and returned to an active state of execution under control of the virtualization environment on the second server computer. This may enable execution of the first virtual machine on the second server computer to begin quickly and may enable the preservation of the state of the first virtual machine.
- In some embodiments, the method described above may be performed in response to receiving a request to move execution of the first virtual machine from the first server computer to the second server computer. For example, the first virtual machine may be in an active state of execution on the first server computer, and a user at a remote client computer may have a first remote communication session open to the first virtual machine on the first server computer. In one embodiment, an administrator of the server computer system may utilize an administrative user interface in order to request that execution of the first virtual machine be transferred to the second server computer. In response, the first virtual machine may be transferred to the second server computer, and the second server computer may resume execution of the first virtual machine, as described above.
- In this example, the first remote communication session between the user at a remote client computer and the first server computer may be automatically replaced with a second remote communication session between the remote client computer and the second server computer. Once the second server computer has begun executing the first virtual machine and the second remote communication session has been established, the user may interact with the first virtual machine just as the user was doing previously, except that now the communication with the first virtual machine occurs between the user's client computer and the second server computer instead of between the user's client computer and the first server computer. In some embodiments, the first virtual machine may appear to the user to be exactly the same as before it was transferred to the second server computer, and the user may not notice a difference in the first virtual machine regardless of which server computer executes the first virtual machine.
- In some embodiments the transfer of the first virtual machine may be transparent to or unnoticed by the user of the remote client computer. For example, in some embodiments the user may not be aware of the transfer. In other embodiments the user may notice a delay as the transfer takes place, or the server computer system may communicate with the client software on the remote client computer to cause the client software to display information informing the user that the transfer is taking place and to expect a delay as it occurs.
- In other embodiments, the user himself may initiate the transfer of the first virtual machine from the first server computer to the second server computer. For example, in some embodiments the client software on the remote client computer may include a feature that enables the user to request that the first virtual machine which he is using be transferred to a different server computer. For example, if the user is experiencing an unusual delay in the communication with the first virtual machine and believes that the delay may be caused by network latency between the client computer and the first server computer, or if the user believes that the delay may be caused by the first server computer being overloaded, then the user may request that his first virtual machine be transferred to a different server computer. In response, the server computer system may transfer the first virtual machine to the second server computer, as described above.
- Alternatively, in another embodiment, the user may use a feature of the client software in order to inform an administrator of the server computer system that the user is experiencing poor performance. In response to receiving the notification, the administrator may use an administrative user interface provided by management software for the server computer system in order to view server computers present in the system and to select a different server computer to which the first virtual machine should be transferred. For example, the administrative user interface may display information indicating resource usage and performance statistics of the various server computers in the system, and the administrator may select the second server computer to which to move the first virtual machine based on its resource usage, e.g., may select a server computer that appears to have ample free memory, available processor power, available network bandwidth, or other free resources which may improve the user's experience.
- In another embodiment, the administrative user interface may display information indicating network locations or geographic locations of the various server computers in the server computer system, and the administrator may select the second server computer to which to move the first virtual machine based on its location. For example, the administrator may select a second server computer which is geographically closer to the user's client computer than the first server computer.
- Alternatively, in some embodiments, the server computer system may be configured to automatically keep track of resource usage and performance statistics of the various server computers in the system and may automatically move various virtual machines between server computers in order to load balance the system. In other embodiments the server computer system may be configured to automatically keep track of network latency experienced by the user, and may automatically move the user's virtual machine to a different server computer if the system detects that the user is experiencing an unusually slow network latency. In other embodiments the server computer system may automatically transfer the user's virtual machine to a different server computer if the system detects that the first server computer is overloaded, e.g., if its memory, disk space, processor power, network bandwidth, or other resources are running low. In other embodiments the server computer system may be configured to automatically determine the geographical proximity between the user's client computer and the first server computer that initially hosts the user's virtual machine, and may automatically move the user's virtual machine to the second server computer if the system determines that the second server computer is closer to the user's client computer.
- Thus, in some embodiments, the first virtual machine may be actively executing on the first server computer, and the method described above may be performed in order move the first virtual machine to the second server computer. Once the first virtual machine has been transferred, its execution may be automatically resumed on the second server computer.
- In other embodiments, the first virtual machine may not be actively executing on the first server computer before being moved to the second server computer, but may instead be in a state of hibernation on the first server computer. In this case, when the first virtual machine has been transferred to the second server computer, the second server computer may not automatically begin executing the first virtual machine. Instead, the first virtual machine may remain in a state of hibernation on the second server computer until subsequently being returned to active execution in response to a subsequent event, such as a request to re-activate the first virtual machine being received.
- As described above, various server computers in the server computer system may execute virtualization environment software (also referred to herein as a hypervisor, or virtual machine host software, or virtualization platform). The virtualization environment software executing on a particular server computer may implement a virtual machine execution environment so that one or more virtual machines can be created and executed within the virtual machine execution environment on the particular server computer.
- In various embodiments each server computer in the server computer system may execute any type of virtualization environment software. Many different implementations of virtualization environments are commercially available from various software vendor companies. One example of a virtualization environment software platform that may be executed by a server computer in the server computer system is Microsoft Virtual Server by Microsoft Corp. Other examples include ESX Server, Virtual Server, Workstation, and ACE by VMWare, Inc. It is noted that these are listed as examples only, and in other embodiments, the server computers and the server computer system may execute any of various other kinds of virtualization environment software platforms provided by or sold by any of various other organizations or software vendors.
- In some embodiments, different server computers in the server computer system may execute different types of virtualization platforms. For example, in some embodiments one or more of the server computers may execute the VMWare ESX Server virtualization platform, and one or more other server computers may execute a different VMWare virtualization platform, such as Workstation or ACE. As another example, in some embodiments one or more of the server computers may execute the VMWare ESX Server virtualization platform, and one or more other server computers may execute the Microsoft Virtual Server virtualization platform.
- Virtual machines for different virtualization platforms may not be compatible with each other. For example, a virtual machine image format used by one virtualization platform may not be supported by another virtualization platform. For example, the VMWare ESX Server virtualization platform typically cannot execute a virtual machine created by the Microsoft Virtual Server virtualization platform, and vice versa.
- Thus, in some embodiments, in order to move a virtual machine from a first server computer to a second server computer that uses a different virtualization platform, it may be necessary to use techniques other than transferring the virtual machine image file used by the first server computer to the second server computer, and the second server computer instantiating the virtual machine from the virtual machine image file. Instead, in these cases, the alternative method illustrated in
FIG. 7B may be used in order to move execution of a virtual machine from the first server computer to the second server computer. - For example, suppose that a first
virtual machine 60A executing within afirst virtualization platform 63A on afirst server computer 82A needs to be moved to asecond server computer 82B. As indicated inblock 517 ofFIG. 7B ,snapshot information 64 for the firstvirtual machine 60A may be created. Thesnapshot information 64 represents the state of the firstvirtual machine 60A. In various embodiments, thesnapshot information 64 may include any of various types of information representing the state of the firstvirtual machine 60A. - For example,
FIG. 7D illustrates an example where thesnapshot information 64 includesapplication state information 65. At the time thesnapshot information 64 is created, one or more software applications may currently be executing on the firstvirtual machine 60A. Theapplication state information 65 may include information representing the execution state of each of these software applications executing on the firstvirtual machine 60A. For example, suppose that a first software application is executing on the firstvirtual machine 60A. Theapplication state information 65 may include information indicating program instructions and data for the first software application currently stored in the memory of the firstvirtual machine 60A. - As another example, the
snapshot information 64 may includememory state information 67. Thememory state information 67 may represent the dynamic memory contents of the firstvirtual machine 60A as the contents exist at the time thesnapshot information 64 is created. - As another example, the
snapshot information 64 may include network state information 66. The network state information 66 may represent the states of network connections that are currently open by the firstvirtual machine 60A at the time thesnapshot information 64 is created, or other information representing network communication performed by the firstvirtual machine 60A. - As another example, the
snapshot information 64 may include userinterface state information 68. The userinterface state information 68 may include information representing a state of the user interface implemented by the firstvirtual machine 60A. For example, at the time thesnapshot information 64 is created, a user of a remote client computer may have a remote communication session opened to the firstvirtual machine 60A. Through the remote communication session, the firstvirtual machine 60A may display one or more graphical user interface windows on the display of the remote client computer. The userinterface state information 68 may include information representing the state of each graphical user interface window. For example, suppose that a first graphical user interface window is currently displayed on the client computer. The userinterface state information 68 may include information regarding the first graphical user interface window, such as information indicating whether the window is maximized or minimized, the size of the window, the position of the window on the display, etc. - In some embodiments, execution of the first
virtual machine 60A may be paused just prior to creating thesnapshot information 64. This may enable the entire state of the firstvirtual machine 60A to be captured in thesnapshot information 64 in a consistent manner, e.g., without the state of the firstvirtual machine 60A changing while thesnapshot information 64 is being created. - As indicated in
block 519, the snapshot information may be transmitted from the first server computer to the second server computer. In some embodiments, the virtual machine image file for the firstvirtual machine 60A may not be transmitted to the second server computer. For example, the snapshot information created inblock 517 may be stored on thefirst server computer 82A separately from the virtual machine image file and transmitted separately to thesecond server computer 82B. However, similar techniques as described above for transmitting the virtual machine image file in the method ofFIG. 7A may be used to transmit the snapshot information to thesecond server computer 82B. For example, in some embodiments thesecond server computer 82B may be connected to thefirst server computer 82A through a wide area network (WAN) connection, e.g., through the Internet. A common communication protocol such as HTTP, HTTPS, or FTP may be used to transmit the snapshot information without requiring thesecond server computer 82B to be connected to thefirst server computer 82A through a LAN or VPN. - After the snapshot information has been transmitted to the
second server computer 82B, a secondvirtual machine 60B may be created on thesecond server computer 82B within asecond virtualization platform 63B, and the state of the secondvirtual machine 60B may be set using the snapshot information, as indicated inblocks second virtualization platform 63B may be a different type than thefirst virtualization platform 63A on thefirst server computer 82A. Thus, the secondvirtual machine 60B may not be created from the virtual machine image file that implements the firstvirtual machine 60A on thefirst server computer 82A. Instead, the secondvirtual machine 60B may be created by thesecond virtualization platform 63B as a different type of virtual machine (i.e., a virtual machine supported by thesecond virtualization platform 63B), and then the state of the secondvirtual machine 60B may be set so that it appears to the user to be the same as the firstvirtual machine 60A. The remote communication session that was previously open between the user's client computer and thefirst server computer 82A may be replaced by a new remote communication session between the user's client computer and thesecond server computer 82B. - Since the state of the second
virtual machine 60B is set using thesnapshot information 64, it may appear to the user that he is still using the same virtual machine as before. In some embodiments, the user may not be aware that his virtual machine was moved to thesecond server computer 82B, and may not be aware that the virtual machine has been re-created in a different virtualization platform. - For example, as noted above, the
snapshot information 64 may includeapplication state information 65 representing the execution state of a first software application that was executing on the firstvirtual machine 60A when thesnapshot information 64 was created. Thus, setting the state of the secondvirtual machine 60B inblock 523 may include initiating execution of the first software application on the second virtual machine and setting the execution state of the first software application on the second virtual machine to the state specified by theapplication state information 65. Thus, the user may see the same open software applications on the second virtual machine and may continue to interact with the open software applications just as he was previously doing on the first virtual machine. - As another example, setting the state of the second
virtual machine 60B inblock 523 may include storing the memory contents, e.g., program instructions and data, there were stored in the dynamic memory of the firstvirtual machine 60A in the dynamic memory of the secondvirtual machine 60B, using thememory state information 67. - As another example, setting the state of the second
virtual machine 60B inblock 523 may include setting the network communication state of the secondvirtual machine 60B using the network state information 66. For example, if the firstvirtual machine 60A had a network connection open with a particular server computer then a corresponding network connection to the particular server computer may be opened on the secondvirtual machine 60B. - As another example, setting the state of the second
virtual machine 60B inblock 523 may include setting the user interface state of the secondvirtual machine 60B using the userinterface state information 68. For example, if a graphical user interface window was open on the user interface of the firstvirtual machine 60A then an identical corresponding graphical user interface window may be opened on the user interface of the secondvirtual machine 60B and positioned in the same place on the display. -
FIG. 7C illustrates an example of a system which may implement the method ofFIG. 7B according to one embodiment. Thefirst server computer 82A executes software implementing afirst virtualization platform 63A. The firstvirtual machine 60A executes within thefirst virtualization platform 63A. In this example, the firstvirtual machine 60A includes asoftware agent 61. Thesoftware agent 61 may be a software program that executes on the firstvirtual machine 60A to create the snapshot information, as discussed above with reference to block 517. For example, thesoftware agent 61 may analyze the contents of the firstvirtual machine 60A's memory or other information maintained by the firstvirtual machine 60A in order to create the snapshot information representing the state of the firstvirtual machine 60A. In other embodiments, the software that creates thesnapshot information 64 inblock 517 may not execute within the firstvirtual machine 60A itself. For example, in some embodiments thesnapshot information 64 may be created by thefirst virtualization platform 63A, or another software program executing under control of thefirst virtualization platform 63A. - The
second server computer 82B executes software implementing asecond virtualization platform 63B. The secondvirtual machine 60B executes within thesecond virtualization platform 63B. In this example, the secondvirtual machine 60B includes asoftware agent 62. Thesoftware agent 62 may be a software program that executes on the secondvirtual machine 60B in order to set the state of the secondvirtual machine 60B using thesnapshot information 64, as discussed above with reference to block 523. For example, thesoftware agent 62 may analyze thesnapshot information 64 and use thesnapshot information 64 to set the contents of the secondvirtual machine 60B's memory or set other configuration or state information for the secondvirtual machine 60B, e.g., in order to configure the state of a secondvirtual machine 60B as described above. - In some embodiments an administrator may actively cause the execution of the virtual machine to be moved. For example, in some embodiments the method of
FIG. 7B may be performed in response to user input by the administrator. The administrator may communicate with management software through an administrative graphical user interface. For example, the graphical user interface may display a list of server computers in the server computer system. The administrator may select the first server computer from the displayed list. In response, the management software may display a list of all virtual machines on the first server computer. The administrator may select the first virtual machine from the displayed list. Similarly, the administrator may also interact with the administrative graphical user interface to select the second server computer to which the transfer the first virtual machine (or the second server computer on which a virtual machine corresponding to the first virtual machine should be created). - In other embodiments execution of the first virtual machine may automatically be transferred from the first server computer to the second server computer, e.g., may be transferred without an administrator requesting the transfer. For example, the system management software 10 may cause virtual machines to be automatically transferred across server computers in order to increase the efficiency of resource utilization of server computers in the server computer system.
- Consider an example in which an organization has a system that includes a first server computer at a location in California and a second server computer at a location in Japan. An employee E may be based at the location in California but may travel to Japan. The employee E may log into a thin client end user console 80 at the Japan location, and the system may assign a virtual machine to him. The system may store information indicating that he is normally based in California and may assign a virtual machine hosted by the server computer at the California location to him. As another example, an exclusive virtual machine may be assigned to him, where the exclusive virtual machine is hosted by the server computer at the California location.
- However, since the employee E is currently located in Japan, it may be more efficient if the virtual machine assigned to him were hosted by the server computer at the Japan location. With the transfer capability described above, an administrator or an automated algorithm may allow the virtual machine assigned to the user to be moved from the California location to the Japan location.
- In other embodiments, additional variables may be considered, such as ensuring that the virtual machine is close to a database server, if the user needs to execute a database intensive application. Thus, in various embodiments, virtual machines may be moved across server computers in the system for any of various reasons, such as security, speed, efficiency or cost (e.g. minimizing expensive bandwidth) reasons.
- In some embodiments, an end user may stop using the system but may not disconnect or log out from the system. If the user's virtual machine continues to execute, this may cause CPU power, memory, or other computing resources to be used unnecessarily.
FIG. 8 is a flowchart diagram illustrating one embodiment of a method for automatically hibernating an inactive virtual machine. - As indicated in 551, a first virtual machine may be assigned to a first user, e.g., in response to the user logging in to the system.
- As indicated in 553, the first user may stop using the first virtual machine after some period of time but may not disconnect from the first virtual machine. For example, the user may forget to log out of the system or may be called to another task.
- As indicated in 555, the system may detect that the first virtual machine assigned to the first user is no longer in active use. For example, the system may determine that no user input has been received from peripheral devices at the first user's console for a threshold period of time or may use other techniques to determine that the first virtual machine is not actively being used. In various embodiments, any of various algorithms or heuristics may be used to determine whether the first virtual machine is in active use. The threshold time period or other factors used to determine inactivity may be configured in response to user input by an administrator.
- As indicated in 557, in response to determining that the first virtual machine is not in active use, the system may cause the first virtual machine to be automatically hibernated. Hibernating the first virtual machine may free computing resources used by the first virtual machine so that they are available for use by active virtual machines.
- In some embodiments, each user may be assigned a configuration variable that specifies whether the user is allowed to run disconnected virtual machines. A numeric value associated with the configuration variable may specify the number of simultaneous, disconnected virtual machines the user is allowed to run. For example, if a user has a value of 3 associated to him, the first 3 virtual machine sessions he creates and then disconnects will continue to run. If he runs a fourth session and disconnects then the fourth virtual machine may be automatically hibernated after an inactivity period.
- As described above, in some embodiments of the system, a user of a client computer may connect to a server computer on which a virtual machine is stored. The virtual machine may execute on the server computer under control of virtual machine host software (e.g., a hypervisor), and the client computer may provide input to the virtual machine and display output from the virtual machine using a communication protocol which enables communication between the client computer and the remote virtual machine.
- In other embodiments it may be desirable to execute a virtual machine locally on a user's client computer. For example, in some embodiments the client computer may execute client software that includes a hypervisor or virtual machine host software which enables a virtual machine to be executed on the client computer.
- A virtual machine is typically implemented using a virtual machine an image file. In order to execute the virtual machine, the hypervisor or virtual machine host software on the client computer needs to access the image file. However, the virtual machine image file may be stored on the server computer system such that the client computer system does not have file-level access to the virtual machine image file. For example, in some embodiments the client computer system may be a remote computer system that is not part of the server computer system's local network. The client computer system may not be able to join the server computer system's network in a way that provides the client computer system with direct access to files stored on the server computer system.
- To overcome this problem, in some embodiments of the system, the server computer system may provide access to the virtual machine image file through standard communication protocols such as HTTP, HTTPS, or FTP in order to allow the client computer system to retrieve the virtual machine image file over a network. The use of such a standard communication protocol may enable the client computer system to obtain the virtual image file without joining the server computer system's network through a VPN, and may enable the file transfer to traverse firewalls. Once the virtual machine image file has been obtained, the client computer system can execute it locally, e.g., under control of a hypervisor or virtual machine host software.
-
FIG. 9 illustrates an example in which aclient computer system 82A executes client software that is capable of performing a communication protocol such as HTTP, HTTPS, or FTP. As indicated by thearrow 1, the client software may communicate with server-side software executing on aserver computer 106A in order to retrieve the virtual machine image file from theserver computer 106A. - In some embodiments the client software that retrieves the virtual machine image file may be embedded within a standard web browser program, such as Firefox or Internet Explorer. For example, the client software may be embedded in the web browser as a browser plug-in or ActiveX, Flash, AJAX or other dynamic control within the web browser. In this embodiment the user may simply enter a URL of the server computer system in the web browser in order to access a web page. The web page may include input fields allowing the user to input authentication information, such as a username and password or other information. Upon successfully authenticating the user, the server computer system may return another web page to the web browser which allows the user to select a desired virtual machine to be retrieved to the client computer. For example, in some embodiments the user may be presented with a list of available virtual machines that are associated with the user or to which the user has access. In other embodiments the virtual machine to be retrieved by the user may be predetermined, e.g., may have been configured by an administrator of the server computer system.
- Once the determination of which virtual machine to retrieve has been made (either by the user selecting a desired virtual machine or by identifying a predetermined virtual machine for the user) the image file for the virtual machine may be streamed from the
server computer 106A to theclient computer 82A, e.g., using a standard protocol supported by the web browser such as HTTP, HTTPS, or FTP. As noted above, these protocols typically do not require a VPN tunnel to exist between theclient computer 82A and theserver computer 106A. - Once the client computer has received the virtual machine image file, it may instantiate the virtual machine and begin executing it, e.g., under control of a hypervisor. In some embodiments the hypervisor may be embedded in the web browser which the user uses to access the server computer and select the virtual machine image file.
- In some embodiments the user of the
client computer 82A may have previously connected to the server computer system and retrieved a full copy of the virtual machine image file. In some embodiments, if theclient computer 82A subsequently reconnects to the server computer system, the system may utilize file differencing techniques so that only portions of the virtual machine image file that have changed since the previous transfer need to be transmitted to theclient computer 82A. For example, theclient computer 82A may communicate with theserver computer 106A on which the virtual machine image file is stored in order to perform an initial transfer of the entire virtual machine image to theclient computer 82A. - The virtual machine may then be executed on the
client computer 82A. If any changes to the virtual machine are made then it may be desirable to update the copy of the virtual machine image file on theserver computer 106A, as indicated byarrow 2 inFIG. 9 . Instead of transferring the entire virtual machine image file back to theserver computer 106A, only the changed portions of the virtual machine image file may be transmitted. Thus, the file differencing techniques may be employed in both directions, either when transferring the virtual machine from theserver computer 106A to theclient computer 82A or vice versa. - In some embodiments the client software on the
client computer 82A may include a feature that enables the user to select whether to execute a virtual machine locally on theclient computer 82A or remotely on theserver computer 106A and manages the virtual machine session and execution. For example, this feature may be exposed to the user as a simple button. - Assume that by default the system administrator has configured the virtual machine to be downloaded to the client and executed locally. While the virtual machine is executing on the
client computer 82A, the user may click the “Run at Server” button. In response, the execution of the virtual machine may be paused, as indicated inblock 901 ofFIG. 10 . As indicated inblock 903, an available server computer in the server computer system may be selected to execute the virtual machine. The virtual machine image file on the client computer may be migrated to the selected server computer and synchronized with the copy of the virtual machine image file already stored on the server computer system, as indicated inblock 905. As described above, only the changed portions of the virtual machine image file need to be transferred across the network. The selected server computer may then begin executing the virtual machine and may establish a remote communication session with the client computer to enable the user to interact with the virtual machine remotely, e.g., through a remote communication protocol such as VNC, RDP, ICA, TDX, PCoIP, etc. Once the remote communication session has been established, the user may see the same virtual machine that was previously executing locally on theclient computer 82A. For example, the user interface implemented by the virtual machine may appear on the display of theclient computer 82A identically to (or very similar to) how it appeared before the virtual machine was migrated to the server computer system, with the same applications and user interface windows open, etc. - The “Run at client” feature is the inverse of the above functionality. Suppose that a virtual machine is currently executing on the
server computer 106A. The user may then click the “Run at client” button in the client software on theclient computer 82A. As indicated inblock 921 ofFIG. 11 , the execution of the virtual machine on theserver computer 106A may be paused. The virtual machine may then be migrated to theclient computer 82A, as indicated inblock 923. If a previous version of the virtual machine is already stored on theclient computer 82A, then the current version of the virtual machine may be synchronized with the previous version by transferring only the changed portions of the virtual machine image, as described above. Theclient computer 82A may then begin executing the virtual machine, as indicated inblock 925. For example, theclient computer 82A may include a hypervisor or virtual machine host software operable to execute the virtual machine. - In some embodiments a virtual machine image file that has been transferred from the server computer system to the client computer may be encrypted. Encrypting the virtual machine image file may increase the security of the information in the virtual machine.
- In some embodiments the client software may allow the user to specify various options affecting storage of a virtual machine image file that has been downloaded to the client computer. For example, the user may be able to specify that the virtual machine image file should be completely deleted from the client computer after the user's session with the virtual machine is finished. As another example, the user may be able to specify that the virtual machine image file should continue to be stored locally on the client computer, which may enable the amount of time required to synchronize with the most recent copy of the virtual machine to be reduced upon subsequent usage, as described above.
- In some embodiments an administrator of the server computer system may be able override the user's configuration choices. For example, even if the user has configured virtual machine image files to persist on the local client computer, the administrator may set a server-side flag which causes the server computer to instruct the client software to always delete any downloaded virtual machines, or to delete particular virtual machines that have been downloaded.
- In some embodiments and expiry date may be associated with a virtual machine that has been downloaded to and locally stored on the client computer. Once the expiry date of the virtual machine has been reached, the client software may automatically delete the virtual machine. In some embodiments the client software may use the time maintained by the server computer system clock in order to determine whether the expiry date has been reached, rather than using the local client computer system clock.
- As described above, the client computer may execute client software that provides capabilities to authenticate the user to the server computer system, download a virtual machine image file from the server computer system, and execute the virtual machine on the client computer, e.g., (through an embedded hypervisor). The client software may also be configured to contact the server computer system when it starts and query for any commands that should be executed by the client software. As one example, the server computer system may command the client software to delete or purge a specific virtual machine stored locally on the client computer, or to delete or purge all locally stored virtual machines. As another example, the server computer system may command the client software to set a new expiry date for one or more of the virtual machines locally stored on the client computer. As another example, the server computer system may command the client software to download and install an update for the client software on the client computer. Even if the client software is not able to contact the server computer system, the client software may still use the previously configured expiry dates for all locally stored virtual machines and still purge the virtual machines if they have expired.
- It is noted that various embodiments may further include receiving, sending or storing instructions and/or data implemented in accordance with the foregoing description upon a computer-accessible storage medium. Generally speaking, a computer-accessible storage medium may include any storage media accessible by a computer during use to provide instructions and/or data to the computer. For example, a computer-accessible storage medium may include storage media such as magnetic or optical media, e.g., one or more disks (fixed or removable), tape, CD-ROM, DVD-ROM, CD-R, CD-RW, DVD-R, DVD-RW, etc. Storage media may further include volatile or non-volatile memory media such as RAM (e.g. synchronous dynamic RAM (SDRAM), Rambus DRAM (RDRAM), static RAM (SRAM), etc.), ROM, Flash memory, non-volatile memory (e.g. Flash memory) accessible via a peripheral interface such as the Universal Serial Bus (USB) interface, etc. In some embodiments the computer may access the storage media via a communication means such as a network and/or a wireless link.
- Although the embodiments above have been described in considerable detail, numerous variations and modifications will become apparent to those skilled in the art once the above disclosure is fully appreciated. It is intended that the following claims be interpreted to embrace all such variations and modifications.
Claims (20)
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/032,446 US9270781B2 (en) | 2007-02-15 | 2008-02-15 | Associating virtual machines on a server computer with particular users on an exclusive basis |
US15/008,931 US9747125B2 (en) | 2007-02-15 | 2016-01-28 | Associating virtual machines on a server computer with particular users on an exclusive basis |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US88999407P | 2007-02-15 | 2007-02-15 | |
US12/032,446 US9270781B2 (en) | 2007-02-15 | 2008-02-15 | Associating virtual machines on a server computer with particular users on an exclusive basis |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US15/008,931 Continuation US9747125B2 (en) | 2007-02-15 | 2016-01-28 | Associating virtual machines on a server computer with particular users on an exclusive basis |
Publications (2)
Publication Number | Publication Date |
---|---|
US20080201479A1 true US20080201479A1 (en) | 2008-08-21 |
US9270781B2 US9270781B2 (en) | 2016-02-23 |
Family
ID=39707577
Family Applications (5)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US12/032,429 Active 2030-11-10 US8176486B2 (en) | 2007-02-15 | 2008-02-15 | Maintaining a pool of free virtual machines on a server computer |
US12/032,446 Active 2031-12-08 US9270781B2 (en) | 2007-02-15 | 2008-02-15 | Associating virtual machines on a server computer with particular users on an exclusive basis |
US12/032,462 Abandoned US20080201414A1 (en) | 2007-02-15 | 2008-02-15 | Transferring a Virtual Machine from a Remote Server Computer for Local Execution by a Client Computer |
US12/032,477 Abandoned US20080201455A1 (en) | 2007-02-15 | 2008-02-15 | Moving Execution of a Virtual Machine Across Different Virtualization Platforms |
US15/008,931 Active US9747125B2 (en) | 2007-02-15 | 2016-01-28 | Associating virtual machines on a server computer with particular users on an exclusive basis |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US12/032,429 Active 2030-11-10 US8176486B2 (en) | 2007-02-15 | 2008-02-15 | Maintaining a pool of free virtual machines on a server computer |
Family Applications After (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US12/032,462 Abandoned US20080201414A1 (en) | 2007-02-15 | 2008-02-15 | Transferring a Virtual Machine from a Remote Server Computer for Local Execution by a Client Computer |
US12/032,477 Abandoned US20080201455A1 (en) | 2007-02-15 | 2008-02-15 | Moving Execution of a Virtual Machine Across Different Virtualization Platforms |
US15/008,931 Active US9747125B2 (en) | 2007-02-15 | 2016-01-28 | Associating virtual machines on a server computer with particular users on an exclusive basis |
Country Status (1)
Country | Link |
---|---|
US (5) | US8176486B2 (en) |
Cited By (39)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080201711A1 (en) * | 2007-02-15 | 2008-08-21 | Amir Husain Syed M | Maintaining a Pool of Free Virtual Machines on a Server Computer |
US20090265361A1 (en) * | 2008-04-17 | 2009-10-22 | Akihisa Nagami | Master management system, master management method, and master management program |
US20090293055A1 (en) * | 2008-05-22 | 2009-11-26 | Carroll Martin D | Central Office Based Virtual Personal Computer |
US20100251255A1 (en) * | 2009-03-30 | 2010-09-30 | Fujitsu Limited | Server device, computer system, recording medium and virtual computer moving method |
US20100268842A1 (en) * | 2007-12-18 | 2010-10-21 | Electronics And Telecommunications Research Institute | System and method for providing streaming-based portable application |
US20100269109A1 (en) * | 2009-04-17 | 2010-10-21 | John Cartales | Methods and Systems for Evaluating Historical Metrics in Selecting a Physical Host for Execution of a Virtual Machine |
US20110060832A1 (en) * | 2009-09-09 | 2011-03-10 | Vmware, Inc. | Fast Determination of Compatibility of Virtual Machines and Hosts |
US20110131573A1 (en) * | 2009-12-02 | 2011-06-02 | Vmware, Inc. | Centralized Computer Network Virtualization Environment |
US20110307887A1 (en) * | 2010-06-11 | 2011-12-15 | International Business Machines Corporation | Dynamic virtual machine shutdown without service interruptions |
US20120005267A1 (en) * | 2010-06-30 | 2012-01-05 | International Business Machines Corporation | Platform independent information handling system, communication method, and computer program product thereof |
US20120117196A1 (en) * | 2010-11-10 | 2012-05-10 | International Business Machines Corporation | Systems, methods, and computer program products for transferring reserves when moving virtual machines across systems |
US20120174094A1 (en) * | 2010-12-31 | 2012-07-05 | Emc Corporation | Virtual appliance deployment |
US20120191908A1 (en) * | 2011-01-25 | 2012-07-26 | International Business Machines Corporation | Storage writes in a mirrored virtual machine system |
US20120239734A1 (en) * | 2011-03-15 | 2012-09-20 | Siemens Aktiengesellschaft | Operation Of A Data Processing Network Having A Plurality Of Geographically Spaced-Apart Data Centers |
US20120259982A1 (en) * | 2011-04-11 | 2012-10-11 | International Business Machines Corporation | Dynamic resource allocation method, system, and program |
US20130130651A1 (en) * | 2011-11-22 | 2013-05-23 | Vmware, Inc. | Provisioning work environments on personal mobile devices |
US20130263115A1 (en) * | 2012-03-27 | 2013-10-03 | Fujitsu Limited | Information processing apparatus, apparatus management method, and apparatus management program |
US20140047442A1 (en) * | 2010-06-30 | 2014-02-13 | International Business Machines Corporation | Hypervisor selection for hosting a virtual machine image |
US20140053275A1 (en) * | 2011-04-20 | 2014-02-20 | Trumpf Werkzeugmaschinen Gmbh + Co. Kg | System and Method for Secure File Transmission |
US8707299B1 (en) * | 2008-11-14 | 2014-04-22 | Symantec Corporation | Method and apparatus for preserving virtual desktops for e-discovery through an agent-less solution |
US20140143391A1 (en) * | 2012-11-20 | 2014-05-22 | Hitachi, Ltd. | Computer system and virtual server migration control method for computer system |
US8799915B1 (en) | 2010-12-31 | 2014-08-05 | Emc Corporation | Decommissioning virtual appliances |
US9043391B2 (en) | 2007-02-15 | 2015-05-26 | Citrix Systems, Inc. | Capturing and restoring session state of a machine without using memory images |
US20150215165A1 (en) * | 2014-01-27 | 2015-07-30 | Fujitsu Limited | Management device and method of managing configuration information of network device |
US9158897B2 (en) | 2008-11-15 | 2015-10-13 | Adobe Systems Incorporated | Methods and systems for distributing right-protected asset |
US9396042B2 (en) | 2009-04-17 | 2016-07-19 | Citrix Systems, Inc. | Methods and systems for evaluating historical metrics in selecting a physical host for execution of a virtual machine |
US9456007B2 (en) * | 2008-11-15 | 2016-09-27 | Adobe Systems Incorporated | Session aware notifications |
US9501316B2 (en) | 2010-12-31 | 2016-11-22 | Emc Corporation | Instantiating virtual appliances of a storage array |
US20170153910A1 (en) * | 2014-04-28 | 2017-06-01 | Oracle International Corporation | System and method for supporting transaction affinity based on resource manager (rm) instance awareness in a transactional environment |
US9813485B2 (en) | 2013-06-14 | 2017-11-07 | 1E Limited | Communication of virtual machine data |
US20180143845A1 (en) * | 2010-01-27 | 2018-05-24 | Vmware, Inc. | Independent access to virtual machine desktop content |
US20180300290A1 (en) * | 2017-04-13 | 2018-10-18 | Sap Se | Virtualized server side rendering |
US20190018700A1 (en) * | 2017-07-17 | 2019-01-17 | Vmware, Inc. | Hyper-converged computing device |
US20190026137A1 (en) * | 2017-07-20 | 2019-01-24 | Vmware, Inc. | Managing virtual computing instances and physical servers |
US20190026194A1 (en) * | 2013-06-28 | 2019-01-24 | EMC IP Holding Company LLC | Cross site recovery of a vm |
CN111324416A (en) * | 2018-12-14 | 2020-06-23 | 慧与发展有限责任合伙企业 | Application deployment in a container management system |
US11080041B1 (en) * | 2017-03-30 | 2021-08-03 | Amazon Technologies, Inc. | Operating system management for virtual workspaces |
US20220197968A1 (en) * | 2018-11-01 | 2022-06-23 | Bank Of Montreal | Systems and methods for generating a snapshot view of virtual infrastructure |
US11500675B2 (en) * | 2013-08-19 | 2022-11-15 | Amazon Technologies, Inc. | Task scheduling, execution and monitoring |
Families Citing this family (382)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050060608A1 (en) * | 2002-05-23 | 2005-03-17 | Benoit Marchand | Maximizing processor utilization and minimizing network bandwidth requirements in throughput compute clusters |
US20080222234A1 (en) * | 2002-05-23 | 2008-09-11 | Benoit Marchand | Deployment and Scaling of Virtual Environments |
US7305585B2 (en) * | 2002-05-23 | 2007-12-04 | Exludus Technologies Inc. | Asynchronous and autonomous data replication |
WO2004104825A1 (en) * | 2003-05-15 | 2004-12-02 | Applianz Technologies, Inc. | Systems and methods of creating and accessing software simulated computers |
US7765543B1 (en) * | 2003-12-17 | 2010-07-27 | Vmware, Inc. | Selective descheduling of idling guests running on a host computer system |
JP4166778B2 (en) * | 2005-11-14 | 2008-10-15 | インターナショナル・ビジネス・マシーンズ・コーポレーション | System and method for managing community provided in information processing system |
JP2007220086A (en) * | 2006-01-17 | 2007-08-30 | Ntt Docomo Inc | Input/output controller, input/output control system, and input/output control method |
US9274807B2 (en) | 2006-04-20 | 2016-03-01 | Qualcomm Incorporated | Selective hibernation of activities in an electronic device |
US8141090B1 (en) * | 2007-04-24 | 2012-03-20 | Hewlett-Packard Development Company, L.P. | Automated model-based provisioning of resources |
US8065676B1 (en) | 2007-04-24 | 2011-11-22 | Hewlett-Packard Development Company, L.P. | Automated provisioning of virtual machines for a virtual machine buffer pool and production pool |
US7991910B2 (en) | 2008-11-17 | 2011-08-02 | Amazon Technologies, Inc. | Updating routing information based on client location |
US8046694B1 (en) | 2007-08-06 | 2011-10-25 | Gogrid, LLC | Multi-server control panel |
WO2009085977A2 (en) * | 2007-12-20 | 2009-07-09 | Virtual Computer, Inc. | Virtual computing management systems and methods |
WO2009108579A2 (en) * | 2008-02-26 | 2009-09-03 | Vmware, Inc. | Extending server-based desktop virtual machine architecture to client machines |
JP2009237826A (en) * | 2008-03-26 | 2009-10-15 | Hitachi Ltd | Storage system and volume management method therefor |
US7962597B2 (en) | 2008-03-31 | 2011-06-14 | Amazon Technologies, Inc. | Request routing based on class |
US8935692B2 (en) * | 2008-05-22 | 2015-01-13 | Red Hat, Inc. | Self-management of virtual machines in cloud-based networks |
US20110106883A1 (en) * | 2008-07-01 | 2011-05-05 | Ajay Gupta | Remote computing services |
US8060476B1 (en) | 2008-07-14 | 2011-11-15 | Quest Software, Inc. | Backup systems and methods for a virtual computing environment |
US8046550B2 (en) | 2008-07-14 | 2011-10-25 | Quest Software, Inc. | Systems and methods for performing backup operations of virtual machine files |
JP5268469B2 (en) * | 2008-07-23 | 2013-08-21 | 株式会社東芝 | High availability system and execution state control method |
US8102781B2 (en) * | 2008-07-31 | 2012-01-24 | Cisco Technology, Inc. | Dynamic distribution of virtual machines in a communication network |
US8255806B2 (en) | 2008-09-15 | 2012-08-28 | Vmware, Inc. | Unified secure virtual machine player and remote desktop client |
US8468535B1 (en) | 2008-09-23 | 2013-06-18 | Gogrid, LLC | Automated system and method to provision and allocate hosting resources |
US8429649B1 (en) | 2008-09-25 | 2013-04-23 | Quest Software, Inc. | Systems and methods for data management in a virtual computing environment |
US9880891B2 (en) * | 2008-09-30 | 2018-01-30 | Hewlett-Packard Development Company, L.P. | Assignment and failover of resources |
US8261282B1 (en) * | 2008-09-30 | 2012-09-04 | Netapp, Inc. | System and method for virtual machine host load protection |
US8572608B2 (en) * | 2008-10-22 | 2013-10-29 | Vmware, Inc. | Methods and systems for converting a related group of physical machines to virtual machines |
US8627328B2 (en) * | 2008-11-14 | 2014-01-07 | Oracle International Corporation | Operation control for deploying and managing software service in a virtual environment |
US9542222B2 (en) * | 2008-11-14 | 2017-01-10 | Oracle International Corporation | Resource broker system for dynamically deploying and managing software services in a virtual environment based on resource usage and service level agreement |
US8230050B1 (en) | 2008-12-10 | 2012-07-24 | Amazon Technologies, Inc. | Providing access to configurable private computer networks |
KR101489466B1 (en) | 2008-12-17 | 2015-02-03 | 삼성전자 주식회사 | Apparatus and method for managing process migration |
US20100153946A1 (en) * | 2008-12-17 | 2010-06-17 | Vmware, Inc. | Desktop source transfer between different pools |
US20100185587A1 (en) * | 2009-01-09 | 2010-07-22 | Microsoft Corporation | Data movement with reduced service outage |
US8213336B2 (en) * | 2009-02-23 | 2012-07-03 | Cisco Technology, Inc. | Distributed data center access switch |
US8819113B2 (en) * | 2009-03-02 | 2014-08-26 | Kaseya International Limited | Remote provisioning of virtual machines |
US8959510B2 (en) * | 2009-03-19 | 2015-02-17 | Red Hat, Inc. | Providing a trusted environment for provisioning a virtual machine |
US9037718B2 (en) * | 2009-03-25 | 2015-05-19 | Ntt Docomo, Inc. | Method and apparatus for live replication |
US20100257140A1 (en) * | 2009-03-31 | 2010-10-07 | Philip John Davis | Data archiving and retrieval system |
US9577893B1 (en) * | 2009-04-10 | 2017-02-21 | Open Invention Network Llc | System and method for cached streaming application isolation |
US9762701B1 (en) * | 2009-04-10 | 2017-09-12 | Open Invention Network Llc | System and method for cached streaming application isolation |
US8996468B1 (en) | 2009-04-17 | 2015-03-31 | Dell Software Inc. | Block status mapping system for reducing virtual machine backup storage |
US9600332B2 (en) * | 2009-04-28 | 2017-03-21 | Cisco Technology, Inc. | Server load balancing based on virtual utilization, physical utilization, and feedback |
JP2010267009A (en) * | 2009-05-13 | 2010-11-25 | Canon Inc | License management system, license management method and computer program |
US8538919B1 (en) | 2009-05-16 | 2013-09-17 | Eric H. Nielsen | System, method, and computer program for real time remote recovery of virtual computing machines |
JP5227887B2 (en) * | 2009-05-21 | 2013-07-03 | 株式会社日立製作所 | Backup management method |
US8639787B2 (en) | 2009-06-01 | 2014-01-28 | Oracle International Corporation | System and method for creating or reconfiguring a virtual server image for cloud deployment |
US8776053B2 (en) | 2009-09-25 | 2014-07-08 | Oracle International Corporation | System and method to reconfigure a virtual machine image suitable for cloud deployment |
US8856294B2 (en) * | 2009-06-01 | 2014-10-07 | Oracle International Corporation | System and method for converting a Java application into a virtual server image for cloud deployment |
US8281018B2 (en) * | 2009-06-22 | 2012-10-02 | Red Hat Israel, Ltd. | Method for automatically providing a client with access to an associated virtual machine |
US8341213B2 (en) * | 2009-06-22 | 2012-12-25 | Red Hat Israel, Ltd. | Method for improving boot time of a client having a virtualized operating environment |
US8135818B2 (en) * | 2009-06-22 | 2012-03-13 | Red Hat Israel, Ltd. | Automatic virtual machine migration in mixed SBC/CBC environment |
US8738781B2 (en) * | 2009-06-22 | 2014-05-27 | Red Hat Israel, Ltd. | Launching a virtual machine associated with a client during startup |
US8438256B2 (en) * | 2009-06-26 | 2013-05-07 | Vmware, Inc. | Migrating functionality in virtualized mobile devices |
US8233882B2 (en) * | 2009-06-26 | 2012-07-31 | Vmware, Inc. | Providing security in mobile devices via a virtualization software layer |
US8359594B1 (en) * | 2009-06-30 | 2013-01-22 | Sychron Advanced Technologies, Inc. | Automated rapid virtual machine provisioning system |
CN101938368A (en) * | 2009-06-30 | 2011-01-05 | 国际商业机器公司 | Virtual machine manager in blade server system and virtual machine processing method |
CN101989212B (en) * | 2009-07-31 | 2015-01-07 | 国际商业机器公司 | Method and device for providing virtual machine management program for starting blade server |
US9959131B2 (en) * | 2009-08-03 | 2018-05-01 | Quantum Corporation | Systems and methods for providing a file system viewing of a storeage environment |
US9778946B2 (en) * | 2009-08-07 | 2017-10-03 | Dell Software Inc. | Optimized copy of virtual machine storage files |
US20110043268A1 (en) * | 2009-08-24 | 2011-02-24 | United Microelectronics Corp. | Level shifter with native device |
US9043454B2 (en) | 2009-08-26 | 2015-05-26 | Red Hat Israel, Ltd. | Auto suspense of virtual machine on client disconnection |
US8473531B2 (en) | 2009-09-03 | 2013-06-25 | Quantum Corporation | Presenting a file system for a file containing items |
WO2011034548A1 (en) * | 2009-09-21 | 2011-03-24 | Hewlett-Packard Development Company, L.P. | System including a virtual disk |
US8516480B1 (en) * | 2009-10-19 | 2013-08-20 | CloudShare, Inc. | Enabling offline work in a virtual data center |
US8924534B2 (en) * | 2009-10-27 | 2014-12-30 | Vmware, Inc. | Resource optimization and monitoring in virtualized infrastructure |
US9280362B2 (en) * | 2009-11-15 | 2016-03-08 | Hewlett-Packard Development Company, L.P. | System and apparatus for sharing a host computer |
US10268522B2 (en) | 2009-11-30 | 2019-04-23 | Red Hat, Inc. | Service aggregation using graduated service levels in a cloud network |
US9430342B1 (en) * | 2009-12-01 | 2016-08-30 | Netapp, Inc. | Storage system providing hierarchical levels of storage functions using virtual machines |
US9389895B2 (en) | 2009-12-17 | 2016-07-12 | Microsoft Technology Licensing, Llc | Virtual storage target offload techniques |
US10146566B2 (en) * | 2009-12-21 | 2018-12-04 | Microsoft Technology Licensing, Llc | Enabling virtual desktop connections to remote clients |
US8887172B2 (en) * | 2009-12-31 | 2014-11-11 | Microsoft Corporation | Virtualized management of remote presentation sessions using virtual machines having load above or below thresholds |
GB2477092A (en) * | 2010-01-20 | 2011-07-27 | Nec Corp | Selecting virtual machine host servers based on client device location |
US9009219B2 (en) | 2010-01-27 | 2015-04-14 | Vmware, Inc. | Native viewer use for service results from a remote desktop |
JP5493976B2 (en) * | 2010-02-18 | 2014-05-14 | 富士通株式会社 | Information processing apparatus, computer system, and program |
EP2539846B1 (en) * | 2010-02-22 | 2018-08-22 | Virtustream IP Holding Company LLC | Methods and apparatus for data center management independent of hypervisor platform |
US9130912B2 (en) * | 2010-03-05 | 2015-09-08 | International Business Machines Corporation | System and method for assisting virtual machine instantiation and migration |
US8792510B2 (en) * | 2010-03-17 | 2014-07-29 | Futurewei Technologies, Inc. | System and method for pseudowire packet cache and re-transmission |
US8473587B1 (en) | 2010-05-20 | 2013-06-25 | Gogrid, LLC | System and method for caching server images in a hosting system |
US9569446B1 (en) | 2010-06-08 | 2017-02-14 | Dell Software Inc. | Cataloging system for image-based backup |
US9329947B2 (en) | 2010-06-22 | 2016-05-03 | Red Hat Israel, Ltd. | Resuming a paused virtual machine without restarting the virtual machine |
CN102314377B (en) | 2010-06-30 | 2014-08-06 | 国际商业机器公司 | Accelerator and method thereof for supporting virtual machine migration |
US8918499B2 (en) * | 2010-08-09 | 2014-12-23 | International Business Machines Corporation | Method and system for end-to-end quality of service in virtualized desktop systems |
US8898114B1 (en) | 2010-08-27 | 2014-11-25 | Dell Software Inc. | Multitier deduplication systems and methods |
JP2012068790A (en) | 2010-09-22 | 2012-04-05 | Internatl Business Mach Corp <Ibm> | Selection apparatus for image of os, selection method, and selection program |
US8959173B1 (en) * | 2010-09-30 | 2015-02-17 | Emc Corporation | Non-disruptive load-balancing of virtual machines between data centers |
US8706947B1 (en) | 2010-09-30 | 2014-04-22 | Amazon Technologies, Inc. | Virtual machine memory page sharing system |
US8499114B1 (en) * | 2010-09-30 | 2013-07-30 | Amazon Technologies, Inc. | Virtual machine memory page sharing system |
US9110727B2 (en) * | 2010-10-05 | 2015-08-18 | Unisys Corporation | Automatic replication of virtual machines |
WO2012048014A2 (en) * | 2010-10-05 | 2012-04-12 | Unisys Corporation | Automatic selection of secondary backend computing devices for virtual machine image replication |
EP2439637A1 (en) | 2010-10-07 | 2012-04-11 | Deutsche Telekom AG | Method and system of providing access to a virtual machine distributed in a hybrid cloud network |
US20120096269A1 (en) * | 2010-10-14 | 2012-04-19 | Certes Networks, Inc. | Dynamically scalable virtual gateway appliance |
US8832686B2 (en) | 2010-10-29 | 2014-09-09 | Microsoft Corporation | Inherited product activation for virtual machines |
KR20120052769A (en) * | 2010-11-16 | 2012-05-24 | 한국전자통신연구원 | Apparatus and method for synchronizing virtual machine |
US8924560B2 (en) | 2010-11-29 | 2014-12-30 | At&T Intellectual Property I, L.P. | Optimized game server relocation environment |
US8559433B2 (en) | 2011-01-07 | 2013-10-15 | Jeda Networks, Inc. | Methods, systems and apparatus for the servicing of fibre channel fabric login frames |
US8559335B2 (en) | 2011-01-07 | 2013-10-15 | Jeda Networks, Inc. | Methods for creating virtual links between fibre channel over ethernet nodes for converged network adapters |
US8625597B2 (en) | 2011-01-07 | 2014-01-07 | Jeda Networks, Inc. | Methods, systems and apparatus for the interconnection of fibre channel over ethernet devices |
US9106579B2 (en) * | 2011-01-07 | 2015-08-11 | Jeda Networks, Inc. | Methods, systems and apparatus for utilizing an iSNS server in a network of fibre channel over ethernet devices |
US9178944B2 (en) | 2011-01-07 | 2015-11-03 | Jeda Networks, Inc. | Methods, systems and apparatus for the control of interconnection of fibre channel over ethernet devices |
US8811399B2 (en) | 2011-01-07 | 2014-08-19 | Jeda Networks, Inc. | Methods, systems and apparatus for the interconnection of fibre channel over ethernet devices using a fibre channel over ethernet interconnection apparatus controller |
US9071629B2 (en) | 2011-01-07 | 2015-06-30 | Jeda Networks, Inc. | Methods for the interconnection of fibre channel over ethernet devices using shortest path bridging |
US9071630B2 (en) | 2011-01-07 | 2015-06-30 | Jeda Networks, Inc. | Methods for the interconnection of fibre channel over ethernet devices using a trill network |
EP2668608A4 (en) | 2011-01-27 | 2017-07-05 | L-3 Communications Corporation | Internet isolation for avoiding internet security threats |
US9288117B1 (en) | 2011-02-08 | 2016-03-15 | Gogrid, LLC | System and method for managing virtual and dedicated servers |
US9201677B2 (en) * | 2011-05-23 | 2015-12-01 | Intelligent Intellectual Property Holdings 2 Llc | Managing data input/output operations |
US9110693B1 (en) * | 2011-02-17 | 2015-08-18 | Emc Corporation | VM mobility over distance |
US10338947B2 (en) * | 2011-03-15 | 2019-07-02 | Microsoft Technology Licensing, Llc | Extent virtualization |
US8577842B1 (en) | 2011-09-19 | 2013-11-05 | Amazon Technologies, Inc. | Distributed computer system snapshots and instantiation thereof |
JP5863771B2 (en) * | 2011-03-28 | 2016-02-17 | 日本電気株式会社 | Virtual machine management system and virtual machine management method |
US9612803B2 (en) | 2011-04-15 | 2017-04-04 | Oracle International Corporation | System and method for use of a virtual assembly builder |
US8839363B2 (en) | 2011-04-18 | 2014-09-16 | Bank Of America Corporation | Trusted hardware for attesting to authenticity in a cloud environment |
JP5775738B2 (en) * | 2011-04-28 | 2015-09-09 | 富士通株式会社 | Information processing apparatus, secure module, information processing method, and information processing program |
US9703581B2 (en) * | 2011-05-20 | 2017-07-11 | Citrix Systems, Inc. | Managing unallocated server farms in a desktop virtualization system |
US10102018B2 (en) * | 2011-05-27 | 2018-10-16 | Red Hat, Inc. | Introspective application reporting to facilitate virtual machine movement between cloud hosts |
US9009437B1 (en) * | 2011-06-20 | 2015-04-14 | Emc Corporation | Techniques for shared data storage provisioning with thin devices |
US9736065B2 (en) | 2011-06-24 | 2017-08-15 | Cisco Technology, Inc. | Level of hierarchy in MST for traffic localization and load balancing |
US10108517B1 (en) * | 2011-06-27 | 2018-10-23 | EMC IP Holding Company LLC | Techniques for data storage systems using virtualized environments |
US8880657B1 (en) | 2011-06-28 | 2014-11-04 | Gogrid, LLC | System and method for configuring and managing virtual grids |
US9176766B2 (en) | 2011-07-06 | 2015-11-03 | Microsoft Technology Licensing, Llc | Configurable planned virtual machines |
US8521747B2 (en) * | 2011-07-19 | 2013-08-27 | Infosys Limited | System and method for selectively consolidating applications to a machine using resource utilization data |
KR101672227B1 (en) * | 2011-08-15 | 2016-11-03 | 엠파이어 테크놀로지 디벨롭먼트 엘엘씨 | Multimodal computing device |
US9189259B2 (en) * | 2011-08-22 | 2015-11-17 | International Business Machines Corporation | Provisioning of virtual machine pools based on historical data in a networked computing environment |
US9489222B2 (en) * | 2011-08-24 | 2016-11-08 | Radware, Ltd. | Techniques for workload balancing among a plurality of physical machines |
US9250944B2 (en) | 2011-08-30 | 2016-02-02 | International Business Machines Corporation | Selection of virtual machines from pools of pre-provisioned virtual machines in a networked computing environment |
US9038063B2 (en) * | 2011-09-07 | 2015-05-19 | International Business Machines Corporation | Determining virtual machine image pattern distributions in a networked computing environment |
US8635152B2 (en) | 2011-09-14 | 2014-01-21 | Microsoft Corporation | Multi tenancy for single tenancy applications |
US20130067345A1 (en) * | 2011-09-14 | 2013-03-14 | Microsoft Corporation | Automated Desktop Services Provisioning |
US8812687B2 (en) * | 2011-09-15 | 2014-08-19 | Microsoft Corporation | Managing user state of cloud desktops |
US20130074064A1 (en) * | 2011-09-15 | 2013-03-21 | Microsoft Corporation | Automated infrastructure provisioning |
US9722866B1 (en) | 2011-09-23 | 2017-08-01 | Amazon Technologies, Inc. | Resource allocation to reduce correlated failures |
US8826074B2 (en) * | 2011-09-30 | 2014-09-02 | Alcatel Lucent | Live module diagnostic testing |
US9294351B2 (en) | 2011-11-10 | 2016-03-22 | Cisco Technology, Inc. | Dynamic policy based interface configuration for virtualized environments |
US20130159487A1 (en) * | 2011-12-14 | 2013-06-20 | Microsoft Corporation | Migration of Virtual IP Addresses in a Failover Cluster |
US8908698B2 (en) | 2012-01-13 | 2014-12-09 | Cisco Technology, Inc. | System and method for managing site-to-site VPNs of a cloud managed network |
US9311375B1 (en) | 2012-02-07 | 2016-04-12 | Dell Software Inc. | Systems and methods for compacting a virtual machine file |
US9137210B1 (en) | 2012-02-21 | 2015-09-15 | Amazon Technologies, Inc. | Remote browsing session management |
US9444904B2 (en) * | 2012-03-16 | 2016-09-13 | Thomson Reuters Global Resources | Content distribution management system |
US10353738B2 (en) | 2012-03-21 | 2019-07-16 | International Business Machines Corporation | Resource allocation based on social networking trends in a networked computing environment |
US8997093B2 (en) * | 2012-04-17 | 2015-03-31 | Sap Se | Application installation management by selectively reuse or terminate virtual machines based on a process status |
US8949931B2 (en) | 2012-05-02 | 2015-02-03 | Cisco Technology, Inc. | System and method for monitoring application security in a network environment |
US9154551B1 (en) | 2012-06-11 | 2015-10-06 | Amazon Technologies, Inc. | Processing DNS queries to identify pre-processing information |
US20140052558A1 (en) * | 2012-06-18 | 2014-02-20 | Redigi, Inc. | Methods and apparatus for sharing digital books and other digital media objects |
US9183031B2 (en) | 2012-06-19 | 2015-11-10 | Bank Of America Corporation | Provisioning of a virtual machine by using a secured zone of a cloud environment |
US10963420B2 (en) * | 2012-08-10 | 2021-03-30 | Adobe Inc. | Systems and methods for providing hot spare nodes |
US9239727B1 (en) * | 2012-10-17 | 2016-01-19 | Amazon Technologies, Inc. | Configurable virtual machines |
US9600316B2 (en) * | 2012-10-17 | 2017-03-21 | Microsoft Technology Licensing, Llc | Augmented allocation of virtual machines for application |
CN103324278A (en) * | 2012-10-30 | 2013-09-25 | 中兴通讯股份有限公司 | Terminal device, system and method for accessing virtual desktops |
US9503310B1 (en) * | 2012-11-27 | 2016-11-22 | Leidos, Inc. | Methods and systems of dynamic management of resources in a virtualized environment |
FR3000339A1 (en) * | 2012-12-20 | 2014-06-27 | France Telecom | METHOD FOR PROCESSING ACCESS REQUESTS TO COMPUTER VIRTUALIZATION SERVICES, VIRTUALIZATION GATEWAY AND WEB BROWSER |
WO2014120218A1 (en) * | 2013-01-31 | 2014-08-07 | Hewlett-Packard Development Company, L.P. | Determining transferability of a computing resource to a cloud computing environment |
WO2014118938A1 (en) * | 2013-01-31 | 2014-08-07 | 株式会社日立製作所 | Communication path management method |
KR20140103559A (en) * | 2013-02-18 | 2014-08-27 | 한국전자통신연구원 | Object migration system and method for web-based contents service migration |
US11669441B1 (en) | 2013-03-14 | 2023-06-06 | Amazon Technologies, Inc. | Secure virtual machine reboot via memory allocation recycling |
US9507540B1 (en) | 2013-03-14 | 2016-11-29 | Amazon Technologies, Inc. | Secure virtual machine memory allocation management via memory usage trust groups |
US9043439B2 (en) | 2013-03-14 | 2015-05-26 | Cisco Technology, Inc. | Method for streaming packet captures from network access devices to a cloud server over HTTP |
JP6070355B2 (en) * | 2013-03-28 | 2017-02-01 | 富士通株式会社 | Virtual machine control program, virtual machine control method, virtual machine control device, and cloud system |
US20140359127A1 (en) * | 2013-06-03 | 2014-12-04 | Microsoft Corporation | Zero touch deployment of private cloud infrastructure |
TW201447763A (en) * | 2013-06-06 | 2014-12-16 | Hon Hai Prec Ind Co Ltd | System and method for controlling virtual machine |
CN104239116A (en) * | 2013-06-06 | 2014-12-24 | 鸿富锦精密工业(深圳)有限公司 | Virtual host control system and method |
KR101941282B1 (en) * | 2013-07-16 | 2019-01-23 | 한국전자통신연구원 | Method of allocating a virtual machine for virtual desktop service |
US10348628B2 (en) * | 2013-09-12 | 2019-07-09 | Vmware, Inc. | Placement of virtual machines in a virtualized computing environment |
US9832256B1 (en) * | 2013-09-20 | 2017-11-28 | Ca, Inc. | Assigning client virtual machines based on location |
CA2925016C (en) * | 2013-09-23 | 2024-01-02 | Gopc Pty Ltd | Virtual computing systems and methods |
US20150106805A1 (en) * | 2013-10-15 | 2015-04-16 | Cisco Technology, Inc. | Accelerated instantiation of cloud resource |
US9509626B2 (en) * | 2013-10-17 | 2016-11-29 | Ciena Corporation | Method and apparatus for provisioning a virtual machine (VM) from a network service provider |
CN104572274A (en) * | 2013-10-18 | 2015-04-29 | 宇宙互联有限公司 | Cross-cloud-node migration system and cross-cloud-node migration method |
US9575773B2 (en) * | 2013-10-23 | 2017-02-21 | Vmware, Inc. | Monitoring multiple remote desktops on a wireless device |
US9959106B2 (en) * | 2013-11-14 | 2018-05-01 | International Business Machines Corporation | Sharing of portable initialized objects between computing platforms |
US20150154042A1 (en) * | 2013-12-04 | 2015-06-04 | Hitachi, Ltd. | Computer system and control method for virtual machine |
US9647896B1 (en) | 2013-12-19 | 2017-05-09 | Amazon Technologies, Inc. | Rule-based actions for resources in a distributed execution environment |
TWI649656B (en) * | 2013-12-26 | 2019-02-01 | 日商史克威爾 艾尼克斯控股公司 | Rendering system, control method and storage medium |
US9921867B2 (en) * | 2013-12-30 | 2018-03-20 | Huawei Technologies Co., Ltd. | Negotiation between virtual machine and host to determine executor of packet flow control policy with reduced address space |
US10216585B2 (en) * | 2014-02-28 | 2019-02-26 | Red Hat Israel, Ltd. | Enabling disk image operations in conjunction with snapshot locking |
US9755858B2 (en) | 2014-04-15 | 2017-09-05 | Cisco Technology, Inc. | Programmable infrastructure gateway for enabling hybrid cloud services in a network environment |
US9473365B2 (en) | 2014-05-08 | 2016-10-18 | Cisco Technology, Inc. | Collaborative inter-service scheduling of logical resources in cloud platforms |
US10542049B2 (en) | 2014-05-09 | 2020-01-21 | Nutanix, Inc. | Mechanism for providing external access to a secured networked virtualization environment |
US10108638B2 (en) * | 2014-06-30 | 2018-10-23 | Vmware, Inc. | Integrating virtual machine file system into a native file explorer |
US10122605B2 (en) | 2014-07-09 | 2018-11-06 | Cisco Technology, Inc | Annotation of network activity through different phases of execution |
US10628186B2 (en) * | 2014-09-08 | 2020-04-21 | Wirepath Home Systems, Llc | Method for electronic device virtualization and management |
US9569316B2 (en) * | 2014-09-11 | 2017-02-14 | International Business Machines Corporation | Managing VIOS failover in a single storage adapter environment |
US9471362B2 (en) * | 2014-09-23 | 2016-10-18 | Splunk Inc. | Correlating hypervisor data for a virtual machine with associated operating system data |
US9825878B2 (en) | 2014-09-26 | 2017-11-21 | Cisco Technology, Inc. | Distributed application framework for prioritizing network traffic using application priority awareness |
US9323556B2 (en) | 2014-09-30 | 2016-04-26 | Amazon Technologies, Inc. | Programmatic event detection and message generation for requests to execute program code |
US9678773B1 (en) | 2014-09-30 | 2017-06-13 | Amazon Technologies, Inc. | Low latency computational capacity provisioning |
US9715402B2 (en) * | 2014-09-30 | 2017-07-25 | Amazon Technologies, Inc. | Dynamic code deployment and versioning |
US9600312B2 (en) | 2014-09-30 | 2017-03-21 | Amazon Technologies, Inc. | Threading as a service |
US9830193B1 (en) | 2014-09-30 | 2017-11-28 | Amazon Technologies, Inc. | Automatic management of low latency computational capacity |
US9146764B1 (en) | 2014-09-30 | 2015-09-29 | Amazon Technologies, Inc. | Processing event messages for user requests to execute program code |
US10048974B1 (en) | 2014-09-30 | 2018-08-14 | Amazon Technologies, Inc. | Message-based computation request scheduling |
WO2016054770A1 (en) * | 2014-10-08 | 2016-04-14 | Intel Corporation | Techniques for checkpointing/delivery between primary and secondary virtual machines |
JP5904514B1 (en) * | 2014-10-28 | 2016-04-13 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | Method of automatically applying an update to a snapshot of a virtual machine, and its computer system and computer system program |
US10867264B2 (en) * | 2014-10-31 | 2020-12-15 | Xerox Corporation | Methods and systems for estimating lag times in a cloud computing infrastructure |
US10067800B2 (en) * | 2014-11-06 | 2018-09-04 | Vmware, Inc. | Peripheral device sharing across virtual machines running on different host computing systems |
WO2016070426A1 (en) * | 2014-11-07 | 2016-05-12 | 华为技术有限公司 | Hardware resource management method, hardware resource location query method and related apparatus |
US10122828B1 (en) * | 2014-11-19 | 2018-11-06 | Amazon Technologies, Inc. | Geographic-aware virtual desktops |
US9537788B2 (en) | 2014-12-05 | 2017-01-03 | Amazon Technologies, Inc. | Automatic determination of resource sizing |
GB2533342A (en) * | 2014-12-17 | 2016-06-22 | Ibm | Checkpointing module and method for storing checkpoints |
US10097448B1 (en) | 2014-12-18 | 2018-10-09 | Amazon Technologies, Inc. | Routing mode and point-of-presence selection service |
US10078534B2 (en) * | 2015-01-23 | 2018-09-18 | Cisco Technology, Inc. | Network-aware workload placement in a data center |
US9727725B2 (en) | 2015-02-04 | 2017-08-08 | Amazon Technologies, Inc. | Security protocols for low latency execution of program code |
US9588790B1 (en) | 2015-02-04 | 2017-03-07 | Amazon Technologies, Inc. | Stateful virtual compute system |
US9733967B2 (en) | 2015-02-04 | 2017-08-15 | Amazon Technologies, Inc. | Security protocols for low latency execution of program code |
US9471775B1 (en) | 2015-02-04 | 2016-10-18 | Amazon Technologies, Inc. | Security protocols for low latency execution of program code |
US10050862B2 (en) | 2015-02-09 | 2018-08-14 | Cisco Technology, Inc. | Distributed application framework that uses network and application awareness for placing data |
TWI552077B (en) | 2015-02-12 | 2016-10-01 | 國立中央大學 | Method for live migrating virtual machine |
US10708342B2 (en) | 2015-02-27 | 2020-07-07 | Cisco Technology, Inc. | Dynamic troubleshooting workspaces for cloud and network management systems |
US10037617B2 (en) | 2015-02-27 | 2018-07-31 | Cisco Technology, Inc. | Enhanced user interface systems including dynamic context selection for cloud-based networks |
US10069680B1 (en) * | 2015-03-16 | 2018-09-04 | Amazon Technologies, Inc. | Dedicated virtual computing system servers |
US10382534B1 (en) | 2015-04-04 | 2019-08-13 | Cisco Technology, Inc. | Selective load balancing of network traffic |
US9785476B2 (en) | 2015-04-08 | 2017-10-10 | Amazon Technologies, Inc. | Endpoint management system and virtual compute system |
US9930103B2 (en) | 2015-04-08 | 2018-03-27 | Amazon Technologies, Inc. | Endpoint management system providing an application programming interface proxy service |
US10476982B2 (en) | 2015-05-15 | 2019-11-12 | Cisco Technology, Inc. | Multi-datacenter message queue |
EP3304303B1 (en) | 2015-06-03 | 2021-06-09 | Telefonaktiebolaget LM Ericsson (PUBL) | Allocating or announcing availability of a software container |
US10034201B2 (en) | 2015-07-09 | 2018-07-24 | Cisco Technology, Inc. | Stateless load-balancing across multiple tunnels |
CN106469117B (en) * | 2015-08-14 | 2020-07-31 | 中国电信股份有限公司 | Storage resource management method and device for virtual machine storage migration |
WO2017035395A1 (en) | 2015-08-25 | 2017-03-02 | Huawei Technologies Co., Ltd. | System and method for network function virtualization resource management |
US9928108B1 (en) | 2015-09-29 | 2018-03-27 | Amazon Technologies, Inc. | Metaevent handling for on-demand code execution environments |
US10042660B2 (en) | 2015-09-30 | 2018-08-07 | Amazon Technologies, Inc. | Management of periodic requests for compute capacity |
US10116528B2 (en) | 2015-10-02 | 2018-10-30 | Keysight Technologies Singapore (Holdings) Ptd Ltd | Direct network traffic monitoring within VM platforms in virtual processing environments |
US10652112B2 (en) | 2015-10-02 | 2020-05-12 | Keysight Technologies Singapore (Sales) Pte. Ltd. | Network traffic pre-classification within VM platforms in virtual processing environments |
US11005682B2 (en) | 2015-10-06 | 2021-05-11 | Cisco Technology, Inc. | Policy-driven switch overlay bypass in a hybrid cloud network environment |
US10067780B2 (en) | 2015-10-06 | 2018-09-04 | Cisco Technology, Inc. | Performance-based public cloud selection for a hybrid cloud environment |
US10462136B2 (en) | 2015-10-13 | 2019-10-29 | Cisco Technology, Inc. | Hybrid cloud security groups |
US10476773B2 (en) * | 2015-10-21 | 2019-11-12 | Microsoft Technology Licensing, Llc | Substituting window endpoints using a health monitor |
US10523657B2 (en) | 2015-11-16 | 2019-12-31 | Cisco Technology, Inc. | Endpoint privacy preservation with cloud conferencing |
US10205677B2 (en) | 2015-11-24 | 2019-02-12 | Cisco Technology, Inc. | Cloud resource placement optimization and migration execution in federated clouds |
US10084703B2 (en) | 2015-12-04 | 2018-09-25 | Cisco Technology, Inc. | Infrastructure-exclusive service forwarding |
US9830175B1 (en) | 2015-12-16 | 2017-11-28 | Amazon Technologies, Inc. | Predictive management of on-demand code execution |
US9830449B1 (en) | 2015-12-16 | 2017-11-28 | Amazon Technologies, Inc. | Execution locations for request-driven code |
US10200501B1 (en) * | 2015-12-16 | 2019-02-05 | Amazon Technologies, Inc. | Program code allocation based on processor features |
US10754701B1 (en) | 2015-12-16 | 2020-08-25 | Amazon Technologies, Inc. | Executing user-defined code in response to determining that resources expected to be utilized comply with resource restrictions |
US10013267B1 (en) | 2015-12-16 | 2018-07-03 | Amazon Technologies, Inc. | Pre-triggers for code execution environments |
US9811363B1 (en) | 2015-12-16 | 2017-11-07 | Amazon Technologies, Inc. | Predictive management of on-demand code execution |
US9811434B1 (en) | 2015-12-16 | 2017-11-07 | Amazon Technologies, Inc. | Predictive management of on-demand code execution |
US10067801B1 (en) | 2015-12-21 | 2018-09-04 | Amazon Technologies, Inc. | Acquisition and maintenance of compute capacity |
US9910713B2 (en) | 2015-12-21 | 2018-03-06 | Amazon Technologies, Inc. | Code execution request routing |
US10002026B1 (en) | 2015-12-21 | 2018-06-19 | Amazon Technologies, Inc. | Acquisition and maintenance of dedicated, reserved, and variable compute capacity |
US10037424B1 (en) * | 2015-12-22 | 2018-07-31 | Amazon Technologies, Inc. | Isolated virtual environments for untrusted applications |
US10257284B2 (en) | 2015-12-30 | 2019-04-09 | Samsung Electronics Co., Ltd. | Broadcasting local function templates to proximate mobile computing devices |
US10367914B2 (en) | 2016-01-12 | 2019-07-30 | Cisco Technology, Inc. | Attaching service level agreements to application containers and enabling service assurance |
US10095506B2 (en) | 2016-02-12 | 2018-10-09 | Nutanix, Inc. | Virtualized file server data sharing |
US10009227B2 (en) | 2016-02-16 | 2018-06-26 | Bank Of America Corporation | Network service provisioning tool and method |
JP6700848B2 (en) * | 2016-02-23 | 2020-05-27 | キヤノン株式会社 | Management system, control method |
WO2017171932A1 (en) | 2016-03-28 | 2017-10-05 | Oracle International Corporation | Pre-formed instructions for a mobile cloud service |
US11132213B1 (en) | 2016-03-30 | 2021-09-28 | Amazon Technologies, Inc. | Dependency-based process of pre-existing data sets at an on demand code execution environment |
US10891145B2 (en) | 2016-03-30 | 2021-01-12 | Amazon Technologies, Inc. | Processing pre-existing data sets at an on demand code execution environment |
US10162672B2 (en) | 2016-03-30 | 2018-12-25 | Amazon Technologies, Inc. | Generating data streams from pre-existing data sets |
US11218418B2 (en) | 2016-05-20 | 2022-01-04 | Nutanix, Inc. | Scalable leadership election in a multi-processing computing environment |
US10129177B2 (en) | 2016-05-23 | 2018-11-13 | Cisco Technology, Inc. | Inter-cloud broker for hybrid cloud networks |
US11016940B2 (en) * | 2016-06-02 | 2021-05-25 | International Business Machines Corporation | Techniques for improving deduplication efficiency in a storage system with multiple storage nodes |
US10713072B1 (en) * | 2016-06-27 | 2020-07-14 | Amazon Technologies, Inc. | Computing resource provisioning |
US9952896B2 (en) | 2016-06-28 | 2018-04-24 | Amazon Technologies, Inc. | Asynchronous task management in an on-demand network code execution environment |
US10282229B2 (en) | 2016-06-28 | 2019-05-07 | Amazon Technologies, Inc. | Asynchronous task management in an on-demand network code execution environment |
US10102040B2 (en) | 2016-06-29 | 2018-10-16 | Amazon Technologies, Inc | Adjusting variable limit on concurrent code executions |
US9977691B2 (en) | 2016-06-29 | 2018-05-22 | Amazon Technologies, Inc. | Adjusting variable limit on concurrent code executions based on communication between frontends |
US10277708B2 (en) | 2016-06-30 | 2019-04-30 | Amazon Technologies, Inc. | On-demand network code execution with cross-account aliases |
US10203990B2 (en) | 2016-06-30 | 2019-02-12 | Amazon Technologies, Inc. | On-demand network code execution with cross-account aliases |
US10659283B2 (en) | 2016-07-08 | 2020-05-19 | Cisco Technology, Inc. | Reducing ARP/ND flooding in cloud environment |
US10432532B2 (en) | 2016-07-12 | 2019-10-01 | Cisco Technology, Inc. | Dynamically pinning micro-service to uplink port |
US10382597B2 (en) | 2016-07-20 | 2019-08-13 | Cisco Technology, Inc. | System and method for transport-layer level identification and isolation of container traffic |
US10263898B2 (en) | 2016-07-20 | 2019-04-16 | Cisco Technology, Inc. | System and method for implementing universal cloud classification (UCC) as a service (UCCaaS) |
US10142346B2 (en) | 2016-07-28 | 2018-11-27 | Cisco Technology, Inc. | Extension of a private cloud end-point group to a public cloud |
US10567344B2 (en) | 2016-08-23 | 2020-02-18 | Cisco Technology, Inc. | Automatic firewall configuration based on aggregated cloud managed information |
US10884787B1 (en) | 2016-09-23 | 2021-01-05 | Amazon Technologies, Inc. | Execution guarantees in an on-demand network code execution system |
US10061613B1 (en) | 2016-09-23 | 2018-08-28 | Amazon Technologies, Inc. | Idempotent task execution in on-demand network code execution systems |
US10326838B2 (en) | 2016-09-23 | 2019-06-18 | Microsoft Technology Licensing, Llc | Live migration of probe enabled load balanced endpoints in a software defined network |
US11119813B1 (en) | 2016-09-30 | 2021-09-14 | Amazon Technologies, Inc. | Mapreduce implementation using an on-demand network code execution system |
US10523592B2 (en) | 2016-10-10 | 2019-12-31 | Cisco Technology, Inc. | Orchestration system for migrating user data and services based on user information |
US20180129524A1 (en) * | 2016-11-10 | 2018-05-10 | International Business Machines Corporation | Managing pre-allocated virtual machine instance pools |
US10824455B2 (en) | 2016-12-02 | 2020-11-03 | Nutanix, Inc. | Virtualized server systems and methods including load balancing for virtualized file servers |
US11568073B2 (en) | 2016-12-02 | 2023-01-31 | Nutanix, Inc. | Handling permissions for virtualized file servers |
US10728090B2 (en) * | 2016-12-02 | 2020-07-28 | Nutanix, Inc. | Configuring network segmentation for a virtualization environment |
US11562034B2 (en) | 2016-12-02 | 2023-01-24 | Nutanix, Inc. | Transparent referrals for distributed file servers |
US11294777B2 (en) | 2016-12-05 | 2022-04-05 | Nutanix, Inc. | Disaster recovery for distributed file servers, including metadata fixers |
US11044162B2 (en) | 2016-12-06 | 2021-06-22 | Cisco Technology, Inc. | Orchestration of cloud and fog interactions |
US11288239B2 (en) | 2016-12-06 | 2022-03-29 | Nutanix, Inc. | Cloning virtualized file servers |
US11281484B2 (en) | 2016-12-06 | 2022-03-22 | Nutanix, Inc. | Virtualized server systems and methods including scaling of file system virtual machines |
GB2557949B (en) * | 2016-12-19 | 2021-01-13 | Cisco Tech Inc | Data handling method and apparatus |
US10326817B2 (en) | 2016-12-20 | 2019-06-18 | Cisco Technology, Inc. | System and method for quality-aware recording in large scale collaborate clouds |
US10831549B1 (en) * | 2016-12-27 | 2020-11-10 | Amazon Technologies, Inc. | Multi-region request-driven code execution system |
US10334029B2 (en) | 2017-01-10 | 2019-06-25 | Cisco Technology, Inc. | Forming neighborhood groups from disperse cloud providers |
US10552191B2 (en) | 2017-01-26 | 2020-02-04 | Cisco Technology, Inc. | Distributed hybrid cloud orchestration model |
JP6872117B2 (en) * | 2017-01-26 | 2021-05-19 | 富士フイルムビジネスイノベーション株式会社 | Information processing equipment and programs |
US10320683B2 (en) | 2017-01-30 | 2019-06-11 | Cisco Technology, Inc. | Reliable load-balancer using segment routing and real-time application monitoring |
US10671571B2 (en) | 2017-01-31 | 2020-06-02 | Cisco Technology, Inc. | Fast network performance in containerized environments for network function virtualization |
US11005731B2 (en) | 2017-04-05 | 2021-05-11 | Cisco Technology, Inc. | Estimating model parameters for automatic deployment of scalable micro services |
US11169883B1 (en) * | 2017-05-04 | 2021-11-09 | Amazon Technologies, Inc. | User and system initiated instance hibernation |
US10382274B2 (en) | 2017-06-26 | 2019-08-13 | Cisco Technology, Inc. | System and method for wide area zero-configuration network auto configuration |
US10439877B2 (en) | 2017-06-26 | 2019-10-08 | Cisco Technology, Inc. | Systems and methods for enabling wide area multicast domain name system |
US10554475B2 (en) | 2017-06-29 | 2020-02-04 | L3Harris Technologies, Inc. | Sandbox based internet isolation in an untrusted network |
US10558798B2 (en) | 2017-06-29 | 2020-02-11 | L3Harris Technologies, Inc. | Sandbox based Internet isolation in a trusted network |
US10892940B2 (en) | 2017-07-21 | 2021-01-12 | Cisco Technology, Inc. | Scalable statistics and analytics mechanisms in cloud networking |
US10425288B2 (en) | 2017-07-21 | 2019-09-24 | Cisco Technology, Inc. | Container telemetry in data center environments with blade servers and switches |
US10601693B2 (en) | 2017-07-24 | 2020-03-24 | Cisco Technology, Inc. | System and method for providing scalable flow monitoring in a data center fabric |
US10541866B2 (en) | 2017-07-25 | 2020-01-21 | Cisco Technology, Inc. | Detecting and resolving multicast traffic performance issues |
US11240207B2 (en) | 2017-08-11 | 2022-02-01 | L3 Technologies, Inc. | Network isolation |
US11601467B2 (en) | 2017-08-24 | 2023-03-07 | L3 Technologies, Inc. | Service provider advanced threat protection |
US10992642B2 (en) | 2017-09-22 | 2021-04-27 | L3 Technologies, Inc. | Document isolation |
US11178104B2 (en) | 2017-09-26 | 2021-11-16 | L3 Technologies, Inc. | Network isolation with cloud networks |
US11552987B2 (en) | 2017-09-28 | 2023-01-10 | L3 Technologies, Inc. | Systems and methods for command and control protection |
US10931669B2 (en) | 2017-09-28 | 2021-02-23 | L3 Technologies, Inc. | Endpoint protection and authentication |
US11044233B2 (en) | 2017-09-28 | 2021-06-22 | L3 Technologies, Inc. | Browser switching system and methods |
US11374906B2 (en) | 2017-09-28 | 2022-06-28 | L3 Technologies, Inc. | Data exfiltration system and methods |
US11223601B2 (en) | 2017-09-28 | 2022-01-11 | L3 Technologies, Inc. | Network isolation for collaboration software |
US11184323B2 (en) | 2017-09-28 | 2021-11-23 | L3 Technologies, Inc | Threat isolation using a plurality of containers |
US11336619B2 (en) | 2017-09-28 | 2022-05-17 | L3 Technologies, Inc. | Host process and memory separation |
US10353800B2 (en) | 2017-10-18 | 2019-07-16 | Cisco Technology, Inc. | System and method for graph based monitoring and management of distributed systems |
US11170096B2 (en) | 2017-10-23 | 2021-11-09 | L3 Technologies, Inc. | Configurable internet isolation and security for mobile devices |
US11120125B2 (en) | 2017-10-23 | 2021-09-14 | L3 Technologies, Inc. | Configurable internet isolation and security for laptops and similar devices |
US11550898B2 (en) | 2017-10-23 | 2023-01-10 | L3 Technologies, Inc. | Browser application implementing sandbox based internet isolation |
US11481362B2 (en) | 2017-11-13 | 2022-10-25 | Cisco Technology, Inc. | Using persistent memory to enable restartability of bulk load transactions in cloud databases |
US10771564B2 (en) | 2017-11-22 | 2020-09-08 | International Business Machines Corporation | Sharing system managed HTTP client sessions across processes |
US11089079B2 (en) | 2017-11-22 | 2021-08-10 | International Business Machines Corporation | Asynchronously reading HTTP responses in separate process |
US10303492B1 (en) | 2017-12-13 | 2019-05-28 | Amazon Technologies, Inc. | Managing custom runtimes in an on-demand code execution system |
US10564946B1 (en) | 2017-12-13 | 2020-02-18 | Amazon Technologies, Inc. | Dependency handling in an on-demand network code execution system |
US10705882B2 (en) | 2017-12-21 | 2020-07-07 | Cisco Technology, Inc. | System and method for resource placement across clouds for data intensive workloads |
CN108170567B (en) * | 2017-12-25 | 2020-11-20 | 北京航空航天大学 | Method for detecting integrity of storage area in virtual machine based on copy-on-write characteristic |
US11595474B2 (en) | 2017-12-28 | 2023-02-28 | Cisco Technology, Inc. | Accelerating data replication using multicast and non-volatile memory enabled nodes |
US10904090B2 (en) * | 2018-01-26 | 2021-01-26 | Nutanix, Inc. | Virtual machine placement based on network communication patterns with other virtual machines |
US10733085B1 (en) | 2018-02-05 | 2020-08-04 | Amazon Technologies, Inc. | Detecting impedance mismatches due to cross-service calls |
US10353678B1 (en) | 2018-02-05 | 2019-07-16 | Amazon Technologies, Inc. | Detecting code characteristic alterations due to cross-service calls |
US10572375B1 (en) | 2018-02-05 | 2020-02-25 | Amazon Technologies, Inc. | Detecting parameter validity in code including cross-service calls |
US10831898B1 (en) | 2018-02-05 | 2020-11-10 | Amazon Technologies, Inc. | Detecting privilege escalations in code including cross-service calls |
US10725752B1 (en) | 2018-02-13 | 2020-07-28 | Amazon Technologies, Inc. | Dependency handling in an on-demand network code execution system |
US10776091B1 (en) | 2018-02-26 | 2020-09-15 | Amazon Technologies, Inc. | Logging endpoint in an on-demand code execution system |
JP7095354B2 (en) * | 2018-03-28 | 2022-07-05 | 株式会社リコー | Information processing system, information processing device, information processing method and program |
US10511534B2 (en) | 2018-04-06 | 2019-12-17 | Cisco Technology, Inc. | Stateless distributed load-balancing |
US11086826B2 (en) | 2018-04-30 | 2021-08-10 | Nutanix, Inc. | Virtualized server systems and methods including domain joining techniques |
US10728361B2 (en) | 2018-05-29 | 2020-07-28 | Cisco Technology, Inc. | System for association of customer information across subscribers |
US10904322B2 (en) | 2018-06-15 | 2021-01-26 | Cisco Technology, Inc. | Systems and methods for scaling down cloud-based servers handling secure connections |
US10764266B2 (en) | 2018-06-19 | 2020-09-01 | Cisco Technology, Inc. | Distributed authentication and authorization for rapid scaling of containerized services |
US11019083B2 (en) | 2018-06-20 | 2021-05-25 | Cisco Technology, Inc. | System for coordinating distributed website analysis |
US10853115B2 (en) | 2018-06-25 | 2020-12-01 | Amazon Technologies, Inc. | Execution of auxiliary functions in an on-demand network code execution system |
US10649749B1 (en) | 2018-06-26 | 2020-05-12 | Amazon Technologies, Inc. | Cross-environment application of tracing information for improved code execution |
US11146569B1 (en) | 2018-06-28 | 2021-10-12 | Amazon Technologies, Inc. | Escalation-resistant secure network services using request-scoped authentication information |
US10949237B2 (en) | 2018-06-29 | 2021-03-16 | Amazon Technologies, Inc. | Operating system customization in an on-demand network code execution system |
US10819571B2 (en) | 2018-06-29 | 2020-10-27 | Cisco Technology, Inc. | Network traffic optimization using in-situ notification system |
US11194680B2 (en) | 2018-07-20 | 2021-12-07 | Nutanix, Inc. | Two node clusters recovery on a failure |
US11099870B1 (en) | 2018-07-25 | 2021-08-24 | Amazon Technologies, Inc. | Reducing execution times in an on-demand network code execution system using saved machine states |
US10904342B2 (en) | 2018-07-30 | 2021-01-26 | Cisco Technology, Inc. | Container networking using communication tunnels |
CN109240768A (en) * | 2018-09-18 | 2019-01-18 | 广东微云科技股份有限公司 | The operation method and system of virtual machine under a kind of mixed computing model |
US11099917B2 (en) | 2018-09-27 | 2021-08-24 | Amazon Technologies, Inc. | Efficient state maintenance for execution environments in an on-demand code execution system |
US11243953B2 (en) | 2018-09-27 | 2022-02-08 | Amazon Technologies, Inc. | Mapreduce implementation in an on-demand network code execution system and stream data processing system |
CN109522088A (en) * | 2018-09-30 | 2019-03-26 | 华为技术有限公司 | A kind of virtual machine migration method and device |
US11770447B2 (en) | 2018-10-31 | 2023-09-26 | Nutanix, Inc. | Managing high-availability file servers |
US11943093B1 (en) | 2018-11-20 | 2024-03-26 | Amazon Technologies, Inc. | Network connection recovery after virtual machine transition in an on-demand network code execution system |
US10884812B2 (en) | 2018-12-13 | 2021-01-05 | Amazon Technologies, Inc. | Performance-based hardware emulation in an on-demand network code execution system |
US11010188B1 (en) | 2019-02-05 | 2021-05-18 | Amazon Technologies, Inc. | Simulated data object storage using on-demand computation of data objects |
US11861386B1 (en) | 2019-03-22 | 2024-01-02 | Amazon Technologies, Inc. | Application gateways in an on-demand network code execution system |
US11106482B2 (en) | 2019-05-31 | 2021-08-31 | Microsoft Technology Licensing, Llc | Connectivity migration in a virtual execution system |
US11119809B1 (en) | 2019-06-20 | 2021-09-14 | Amazon Technologies, Inc. | Virtualization-based transaction handling in an on-demand network code execution system |
US11190609B2 (en) | 2019-06-28 | 2021-11-30 | Amazon Technologies, Inc. | Connection pooling for scalable network services |
US11115404B2 (en) | 2019-06-28 | 2021-09-07 | Amazon Technologies, Inc. | Facilitating service connections in serverless code executions |
US11159528B2 (en) | 2019-06-28 | 2021-10-26 | Amazon Technologies, Inc. | Authentication to network-services using hosted authentication information |
US11360948B2 (en) | 2019-09-27 | 2022-06-14 | Amazon Technologies, Inc. | Inserting owner-specified data processing pipelines into input/output path of object storage service |
US11023416B2 (en) | 2019-09-27 | 2021-06-01 | Amazon Technologies, Inc. | Data access control system for object storage service based on owner-defined code |
US11550944B2 (en) | 2019-09-27 | 2023-01-10 | Amazon Technologies, Inc. | Code execution environment customization system for object storage service |
US10908927B1 (en) | 2019-09-27 | 2021-02-02 | Amazon Technologies, Inc. | On-demand execution of object filter code in output path of object storage service |
US11250007B1 (en) | 2019-09-27 | 2022-02-15 | Amazon Technologies, Inc. | On-demand execution of object combination code in output path of object storage service |
US11394761B1 (en) | 2019-09-27 | 2022-07-19 | Amazon Technologies, Inc. | Execution of user-submitted code on a stream of data |
US11386230B2 (en) | 2019-09-27 | 2022-07-12 | Amazon Technologies, Inc. | On-demand code obfuscation of data in input path of object storage service |
US11055112B2 (en) | 2019-09-27 | 2021-07-06 | Amazon Technologies, Inc. | Inserting executions of owner-specified code into input/output path of object storage service |
US11106477B2 (en) | 2019-09-27 | 2021-08-31 | Amazon Technologies, Inc. | Execution of owner-specified code during input/output path to object storage service |
US11656892B1 (en) | 2019-09-27 | 2023-05-23 | Amazon Technologies, Inc. | Sequential execution of user-submitted code and native functions |
US10996961B2 (en) | 2019-09-27 | 2021-05-04 | Amazon Technologies, Inc. | On-demand indexing of data in input path of object storage service |
US11023311B2 (en) | 2019-09-27 | 2021-06-01 | Amazon Technologies, Inc. | On-demand code execution in input path of data uploaded to storage service in multiple data portions |
US11263220B2 (en) | 2019-09-27 | 2022-03-01 | Amazon Technologies, Inc. | On-demand execution of object transformation code in output path of object storage service |
US11416628B2 (en) | 2019-09-27 | 2022-08-16 | Amazon Technologies, Inc. | User-specific data manipulation system for object storage service based on user-submitted code |
US11119826B2 (en) | 2019-11-27 | 2021-09-14 | Amazon Technologies, Inc. | Serverless call distribution to implement spillover while avoiding cold starts |
US10942795B1 (en) | 2019-11-27 | 2021-03-09 | Amazon Technologies, Inc. | Serverless call distribution to utilize reserved capacity without inhibiting scaling |
US11714682B1 (en) | 2020-03-03 | 2023-08-01 | Amazon Technologies, Inc. | Reclaiming computing resources in an on-demand code execution system |
US11188391B1 (en) | 2020-03-11 | 2021-11-30 | Amazon Technologies, Inc. | Allocating resources to on-demand code executions under scarcity conditions |
US11775640B1 (en) | 2020-03-30 | 2023-10-03 | Amazon Technologies, Inc. | Resource utilization-based malicious task detection in an on-demand code execution system |
CN111381937A (en) * | 2020-04-02 | 2020-07-07 | 中国电子科技网络信息安全有限公司 | Experimental scene snapshot generating system and method based on time base line |
US11768809B2 (en) | 2020-05-08 | 2023-09-26 | Nutanix, Inc. | Managing incremental snapshots for fast leader node bring-up |
US11915024B2 (en) * | 2020-07-16 | 2024-02-27 | International Business Machines Corporation | Pool management for in-vehicle device application startup |
US11463536B2 (en) | 2020-08-28 | 2022-10-04 | Teso LT, UAB | Curating proxy server pools |
US11593270B1 (en) | 2020-11-25 | 2023-02-28 | Amazon Technologies, Inc. | Fast distributed caching using erasure coded object parts |
US11550713B1 (en) | 2020-11-25 | 2023-01-10 | Amazon Technologies, Inc. | Garbage collection in distributed systems using life cycled storage roots |
US11388210B1 (en) | 2021-06-30 | 2022-07-12 | Amazon Technologies, Inc. | Streaming analytics using a serverless compute system |
CN114237811A (en) * | 2021-11-09 | 2022-03-25 | 南京信易达计算技术有限公司 | Slimming client server virtualization method and virtual slimming client server |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040153708A1 (en) * | 2002-05-31 | 2004-08-05 | Joshi Darshan B. | Business continuation policy for server consolidation environment |
US20050060590A1 (en) * | 2003-09-16 | 2005-03-17 | International Business Machines Corporation | Power-aware workload balancing usig virtual machines |
US20060136912A1 (en) * | 2004-12-17 | 2006-06-22 | Intel Corporation | Method, apparatus and system for transparent unification of virtual machines |
US20060143617A1 (en) * | 2004-12-29 | 2006-06-29 | Knauerhase Robert C | Method, apparatus and system for dynamic allocation of virtual platform resources |
US20070174429A1 (en) * | 2006-01-24 | 2007-07-26 | Citrix Systems, Inc. | Methods and servers for establishing a connection between a client system and a virtual machine hosting a requested computing environment |
US20070245348A1 (en) * | 2006-04-14 | 2007-10-18 | Microsoft Corporation | Virtual machine self-service restrictions |
US20070271560A1 (en) * | 2006-05-18 | 2007-11-22 | Microsoft Corporation | Deploying virtual machine to host based on workload characterizations |
US20080022032A1 (en) * | 2006-07-13 | 2008-01-24 | Microsoft Corporation | Concurrent virtual machine snapshots and restore |
Family Cites Families (50)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4949254A (en) * | 1988-09-29 | 1990-08-14 | Ibm Corp. | Method to manage concurrent execution of a distributed application program by a host computer and a large plurality of intelligent work stations on an SNA network |
US5062037A (en) * | 1988-10-24 | 1991-10-29 | Ibm Corp. | Method to provide concurrent execution of distributed application programs by a host computer and an intelligent work station on an sna network |
FR2740884B1 (en) * | 1995-11-03 | 1997-12-19 | Bull Sa | ADMINISTRATOR INTERFACE FOR A DATABASE IN A DISTRIBUTED COMPUTING ENVIRONMENT |
US6802062B1 (en) * | 1997-04-01 | 2004-10-05 | Hitachi, Ltd. | System with virtual machine movable between virtual machine systems and control method |
US6223202B1 (en) * | 1998-06-05 | 2001-04-24 | International Business Machines Corp. | Virtual machine pooling |
US6854114B1 (en) * | 1999-10-21 | 2005-02-08 | Oracle International Corp. | Using a virtual machine instance as the basic unit of user execution in a server environment |
US7200848B1 (en) | 2000-05-09 | 2007-04-03 | Sun Microsystems, Inc. | Migrating processes using data representation language representations of the processes in a distributed computing environment |
US7260820B1 (en) * | 2001-04-26 | 2007-08-21 | Vm Ware, Inc. | Undefeatable transformation for virtual machine I/O operations |
US7428636B1 (en) * | 2001-04-26 | 2008-09-23 | Vmware, Inc. | Selective encryption system and method for I/O operations |
US7219140B2 (en) * | 2001-12-05 | 2007-05-15 | Dennis Craig Marl | Configuration and management systems for mobile and embedded devices |
US7254634B1 (en) | 2002-03-08 | 2007-08-07 | Akamai Technologies, Inc. | Managing web tier session state objects in a content delivery network (CDN) |
US7603670B1 (en) * | 2002-03-28 | 2009-10-13 | Symantec Operating Corporation | Virtual machine transfer between computer systems |
US7577722B1 (en) * | 2002-04-05 | 2009-08-18 | Vmware, Inc. | Provisioning of computer systems using virtual machines |
US7313793B2 (en) * | 2002-07-11 | 2007-12-25 | Microsoft Corporation | Method for forking or migrating a virtual machine |
US8145759B2 (en) * | 2002-11-04 | 2012-03-27 | Oracle America, Inc. | Dynamically configurable resource pool |
US7246174B2 (en) * | 2003-10-28 | 2007-07-17 | Nacon Consulting, Llc | Method and system for accessing and managing virtual machines |
US7257811B2 (en) * | 2004-05-11 | 2007-08-14 | International Business Machines Corporation | System, method and program to migrate a virtual machine |
US7577959B2 (en) * | 2004-06-24 | 2009-08-18 | International Business Machines Corporation | Providing on-demand capabilities using virtual machines and clustering processes |
US7383405B2 (en) * | 2004-06-30 | 2008-06-03 | Microsoft Corporation | Systems and methods for voluntary migration of a virtual machine between hosts with common storage connectivity |
US20070094348A1 (en) * | 2005-01-07 | 2007-04-26 | Microsoft Corporation | BITS/RDC integration and BITS enhancements |
US8073926B2 (en) * | 2005-01-07 | 2011-12-06 | Microsoft Corporation | Virtual machine image server |
US20070011268A1 (en) | 2005-03-22 | 2007-01-11 | Banga Jasminder S | Systems and methods of network operation and information processing, including engaging users of a public-access network |
US7607129B2 (en) | 2005-04-07 | 2009-10-20 | International Business Machines Corporation | Method and apparatus for using virtual machine technology for managing parallel communicating applications |
US7480773B1 (en) * | 2005-05-02 | 2009-01-20 | Sprint Communications Company L.P. | Virtual machine use and optimization of hardware configurations |
JP5420242B2 (en) * | 2005-06-24 | 2014-02-19 | シンクソート インコーポレイテッド | System and method for high performance enterprise data protection |
US7761573B2 (en) * | 2005-12-07 | 2010-07-20 | Avaya Inc. | Seamless live migration of virtual machines across optical networks |
US7685283B2 (en) * | 2006-01-23 | 2010-03-23 | International Business Machiens Corporation | Method for modeling on-demand free pool of resources |
US8042108B2 (en) * | 2006-03-18 | 2011-10-18 | International Business Machines Corporation | Virtual machine migration between servers |
US8015563B2 (en) * | 2006-04-14 | 2011-09-06 | Microsoft Corporation | Managing virtual machines with system-wide policies |
US20070260702A1 (en) * | 2006-05-03 | 2007-11-08 | University Of Washington | Web browser architecture for virtual machine access |
CA2547047A1 (en) * | 2006-05-15 | 2007-11-15 | Embotics Corporation | Management of virtual machines using mobile autonomic elements |
US7461223B2 (en) * | 2006-05-29 | 2008-12-02 | Microsoft Corporation | Retaining shadow copy data during replication |
US9213513B2 (en) * | 2006-06-23 | 2015-12-15 | Microsoft Technology Licensing, Llc | Maintaining synchronization of virtual machine image differences across server and host computers |
JP4324975B2 (en) * | 2006-09-27 | 2009-09-02 | 日本電気株式会社 | Load reduction system, computer, and load reduction method |
US8621030B2 (en) | 2006-09-28 | 2013-12-31 | Intel Corporation | Techniques to copy an operating system |
US8949826B2 (en) * | 2006-10-17 | 2015-02-03 | Managelq, Inc. | Control and management of virtual systems |
US7814234B2 (en) * | 2006-10-30 | 2010-10-12 | Microsoft Corporation | Offline execution of web based applications |
US20120011509A1 (en) * | 2007-02-15 | 2012-01-12 | Syed Mohammad Amir Husain | Migrating Session State of a Machine Without Using Memory Images |
US9043391B2 (en) | 2007-02-15 | 2015-05-26 | Citrix Systems, Inc. | Capturing and restoring session state of a machine without using memory images |
US8176486B2 (en) | 2007-02-15 | 2012-05-08 | Clearcube Technology, Inc. | Maintaining a pool of free virtual machines on a server computer |
US20100088699A1 (en) * | 2007-03-27 | 2010-04-08 | Takayuki Sasaki | Virtual machine operation system, virtual machine operation method and program |
US8196138B2 (en) | 2007-04-19 | 2012-06-05 | International Business Machines Corporation | Method and system for migrating virtual machines between hypervisors |
JP4987555B2 (en) * | 2007-04-27 | 2012-07-25 | 株式会社東芝 | Information processing apparatus and information processing system |
US20080301770A1 (en) * | 2007-05-31 | 2008-12-04 | Kinder Nathan G | Identity based virtual machine selector |
US7904692B2 (en) * | 2007-11-01 | 2011-03-08 | Shrijeet Mukherjee | Iommu with translation request management and methods for managing translation requests |
US8782322B2 (en) * | 2007-06-21 | 2014-07-15 | International Business Machines Corporation | Ranking of target server partitions for virtual server mobility operations |
US7383327B1 (en) * | 2007-10-11 | 2008-06-03 | Swsoft Holdings, Ltd. | Management of virtual and physical servers using graphic control panels |
US8996890B2 (en) * | 2008-02-07 | 2015-03-31 | Dell Products L.P. | Method for power conservation in virtualized environments |
US20090217296A1 (en) | 2008-02-26 | 2009-08-27 | Alexander Gebhart | Benefit analysis of implementing virtual machines |
US9015705B2 (en) | 2008-03-28 | 2015-04-21 | International Business Machines Corporation | Computing device having a migrated virtual machine accessing physical storage space on another computing device |
-
2008
- 2008-02-15 US US12/032,429 patent/US8176486B2/en active Active
- 2008-02-15 US US12/032,446 patent/US9270781B2/en active Active
- 2008-02-15 US US12/032,462 patent/US20080201414A1/en not_active Abandoned
- 2008-02-15 US US12/032,477 patent/US20080201455A1/en not_active Abandoned
-
2016
- 2016-01-28 US US15/008,931 patent/US9747125B2/en active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040153708A1 (en) * | 2002-05-31 | 2004-08-05 | Joshi Darshan B. | Business continuation policy for server consolidation environment |
US20050060590A1 (en) * | 2003-09-16 | 2005-03-17 | International Business Machines Corporation | Power-aware workload balancing usig virtual machines |
US20060136912A1 (en) * | 2004-12-17 | 2006-06-22 | Intel Corporation | Method, apparatus and system for transparent unification of virtual machines |
US20060143617A1 (en) * | 2004-12-29 | 2006-06-29 | Knauerhase Robert C | Method, apparatus and system for dynamic allocation of virtual platform resources |
US20070174429A1 (en) * | 2006-01-24 | 2007-07-26 | Citrix Systems, Inc. | Methods and servers for establishing a connection between a client system and a virtual machine hosting a requested computing environment |
US20070245348A1 (en) * | 2006-04-14 | 2007-10-18 | Microsoft Corporation | Virtual machine self-service restrictions |
US20070271560A1 (en) * | 2006-05-18 | 2007-11-22 | Microsoft Corporation | Deploying virtual machine to host based on workload characterizations |
US20080022032A1 (en) * | 2006-07-13 | 2008-01-24 | Microsoft Corporation | Concurrent virtual machine snapshots and restore |
Cited By (87)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8176486B2 (en) * | 2007-02-15 | 2012-05-08 | Clearcube Technology, Inc. | Maintaining a pool of free virtual machines on a server computer |
US9043391B2 (en) | 2007-02-15 | 2015-05-26 | Citrix Systems, Inc. | Capturing and restoring session state of a machine without using memory images |
US20080201711A1 (en) * | 2007-02-15 | 2008-08-21 | Amir Husain Syed M | Maintaining a Pool of Free Virtual Machines on a Server Computer |
US9747125B2 (en) | 2007-02-15 | 2017-08-29 | Citrix Systems, Inc. | Associating virtual machines on a server computer with particular users on an exclusive basis |
US20100268842A1 (en) * | 2007-12-18 | 2010-10-21 | Electronics And Telecommunications Research Institute | System and method for providing streaming-based portable application |
US8583816B2 (en) * | 2007-12-18 | 2013-11-12 | Electronics And Telecommunications Research Institute | System for providing streaming-based portable application under selective conditions |
US20090265361A1 (en) * | 2008-04-17 | 2009-10-22 | Akihisa Nagami | Master management system, master management method, and master management program |
US7917533B2 (en) * | 2008-04-17 | 2011-03-29 | Hitachi, Ltd. | Master management system, master management method, and master management program |
US20090293055A1 (en) * | 2008-05-22 | 2009-11-26 | Carroll Martin D | Central Office Based Virtual Personal Computer |
US9459927B2 (en) * | 2008-05-22 | 2016-10-04 | Alcatel Lucent | Central office based virtual personal computer |
US8707299B1 (en) * | 2008-11-14 | 2014-04-22 | Symantec Corporation | Method and apparatus for preserving virtual desktops for e-discovery through an agent-less solution |
US9158897B2 (en) | 2008-11-15 | 2015-10-13 | Adobe Systems Incorporated | Methods and systems for distributing right-protected asset |
US9456007B2 (en) * | 2008-11-15 | 2016-09-27 | Adobe Systems Incorporated | Session aware notifications |
US20100251255A1 (en) * | 2009-03-30 | 2010-09-30 | Fujitsu Limited | Server device, computer system, recording medium and virtual computer moving method |
US20100269109A1 (en) * | 2009-04-17 | 2010-10-21 | John Cartales | Methods and Systems for Evaluating Historical Metrics in Selecting a Physical Host for Execution of a Virtual Machine |
US9396042B2 (en) | 2009-04-17 | 2016-07-19 | Citrix Systems, Inc. | Methods and systems for evaluating historical metrics in selecting a physical host for execution of a virtual machine |
US8291416B2 (en) * | 2009-04-17 | 2012-10-16 | Citrix Systems, Inc. | Methods and systems for using a plurality of historical metrics to select a physical host for virtual machine execution |
US8954545B2 (en) * | 2009-09-09 | 2015-02-10 | Vmware, Inc. | Fast determination of compatibility of virtual machines and hosts |
US20110060832A1 (en) * | 2009-09-09 | 2011-03-10 | Vmware, Inc. | Fast Determination of Compatibility of Virtual Machines and Hosts |
US8359374B2 (en) * | 2009-09-09 | 2013-01-22 | Vmware, Inc. | Fast determination of compatibility of virtual machines and hosts |
US20130111475A1 (en) * | 2009-09-09 | 2013-05-02 | Vmware, Inc. | Fast determination of compatibility of virtual machines and hosts |
US20170237688A1 (en) * | 2009-12-02 | 2017-08-17 | Vmware, Inc. | Central switch for coupling virtual desktops to peripheral devices |
US20110131573A1 (en) * | 2009-12-02 | 2011-06-02 | Vmware, Inc. | Centralized Computer Network Virtualization Environment |
US20150058853A1 (en) * | 2009-12-02 | 2015-02-26 | Vmware, Inc. | Central switch for coupling virtual desktops to peripheral devices |
US10938747B2 (en) * | 2009-12-02 | 2021-03-02 | Vmware, Inc. | Central switch for coupling virtual desktops to peripheral devices |
US9639386B2 (en) * | 2009-12-02 | 2017-05-02 | Vmware, Inc. | Central switch for coupling virtual desktops to peripheral devices |
US8886708B2 (en) * | 2009-12-02 | 2014-11-11 | Vmware, Inc. | Centralized computer network virtualization environment |
US11188366B2 (en) * | 2010-01-27 | 2021-11-30 | Vmware, Inc. | Independent access to virtual machine desktop content |
US20180143845A1 (en) * | 2010-01-27 | 2018-05-24 | Vmware, Inc. | Independent access to virtual machine desktop content |
US8839238B2 (en) * | 2010-06-11 | 2014-09-16 | International Business Machines Corporation | Dynamic virtual machine shutdown without service interruptions |
US20110307887A1 (en) * | 2010-06-11 | 2011-12-15 | International Business Machines Corporation | Dynamic virtual machine shutdown without service interruptions |
US8799477B2 (en) * | 2010-06-30 | 2014-08-05 | International Business Machines Corporation | Hypervisor selection for hosting a virtual machine image |
US20120005267A1 (en) * | 2010-06-30 | 2012-01-05 | International Business Machines Corporation | Platform independent information handling system, communication method, and computer program product thereof |
US20140047442A1 (en) * | 2010-06-30 | 2014-02-13 | International Business Machines Corporation | Hypervisor selection for hosting a virtual machine image |
US8639749B2 (en) * | 2010-06-30 | 2014-01-28 | International Business Machines Corporation | Platform independent information handling system, communication method, and computer program product thereof |
US9852154B2 (en) * | 2010-11-10 | 2017-12-26 | International Business Machines Corporation | Methods for transferring reserves when moving virtual machines across systems |
US20120117196A1 (en) * | 2010-11-10 | 2012-05-10 | International Business Machines Corporation | Systems, methods, and computer program products for transferring reserves when moving virtual machines across systems |
US9984097B2 (en) * | 2010-11-10 | 2018-05-29 | International Business Machines Corporation | Systems and computer program products for transferring reserves when moving virtual machines across systems |
US11194771B2 (en) | 2010-11-10 | 2021-12-07 | International Business Machines Corporation | Methods for transferring reserves when moving virtual machines across systems |
US20120174094A1 (en) * | 2010-12-31 | 2012-07-05 | Emc Corporation | Virtual appliance deployment |
US8799915B1 (en) | 2010-12-31 | 2014-08-05 | Emc Corporation | Decommissioning virtual appliances |
US20150081968A1 (en) * | 2010-12-31 | 2015-03-19 | Emc Corporation | Decommissioning virtual appliances |
US9501316B2 (en) | 2010-12-31 | 2016-11-22 | Emc Corporation | Instantiating virtual appliances of a storage array |
US9201699B2 (en) * | 2010-12-31 | 2015-12-01 | Emc Corporation | Decommissioning virtual appliances |
US9213561B2 (en) * | 2010-12-31 | 2015-12-15 | Emc Corporation | Virtual appliance deployment |
US8839241B2 (en) * | 2010-12-31 | 2014-09-16 | Emc Corporation | Virtual appliance deployment |
US9424113B2 (en) * | 2010-12-31 | 2016-08-23 | Emc Corporation | Virtual appliance deployment |
US20120191908A1 (en) * | 2011-01-25 | 2012-07-26 | International Business Machines Corporation | Storage writes in a mirrored virtual machine system |
US8954645B2 (en) * | 2011-01-25 | 2015-02-10 | International Business Machines Corporation | Storage writes in a mirrored virtual machine system |
US10135691B2 (en) | 2011-03-15 | 2018-11-20 | Siemens Healthcare Gmbh | Operation of a data processing network having a plurality of geographically spaced-apart data centers |
US9086926B2 (en) * | 2011-03-15 | 2015-07-21 | Siemens Aktiengesellschaft | Operation of a data processing network having a plurality of geographically spaced-apart data centers |
US20120239734A1 (en) * | 2011-03-15 | 2012-09-20 | Siemens Aktiengesellschaft | Operation Of A Data Processing Network Having A Plurality Of Geographically Spaced-Apart Data Centers |
US20120259982A1 (en) * | 2011-04-11 | 2012-10-11 | International Business Machines Corporation | Dynamic resource allocation method, system, and program |
US9495214B2 (en) * | 2011-04-11 | 2016-11-15 | International Business Machines Corporation | Dynamic resource allocations method, systems, and program |
US9910995B2 (en) * | 2011-04-20 | 2018-03-06 | Trumpf Werkzeugmaschinen Gmbh + Co. Kg | System and method for secure file transmission |
US20140053275A1 (en) * | 2011-04-20 | 2014-02-20 | Trumpf Werkzeugmaschinen Gmbh + Co. Kg | System and Method for Secure File Transmission |
US9219813B2 (en) * | 2011-11-22 | 2015-12-22 | Vmware, Inc. | Provisioning work environments on personal mobile devices |
US8954050B2 (en) | 2011-11-22 | 2015-02-10 | Vmware, Inc. | User interface for controlling use of a business environment on a mobile device |
US20130130651A1 (en) * | 2011-11-22 | 2013-05-23 | Vmware, Inc. | Provisioning work environments on personal mobile devices |
US9253309B2 (en) | 2011-11-22 | 2016-02-02 | Vmware, Inc. | Method and system for VPN isolation using network namespaces |
US9247042B2 (en) | 2011-11-22 | 2016-01-26 | Vmware, Inc. | Controlling use of a business environment on a mobile device |
US9769120B2 (en) | 2011-11-22 | 2017-09-19 | Vmware, Inc. | Method and system for VPN isolation using network namespaces |
US9577985B2 (en) | 2011-11-22 | 2017-02-21 | Vmware, Inc. | Provisioning work environments on personal mobile devices |
US9544274B2 (en) | 2011-11-22 | 2017-01-10 | Vmware, Inc. | User interface for controlling use of a business environment on a mobile device |
US8893261B2 (en) | 2011-11-22 | 2014-11-18 | Vmware, Inc. | Method and system for VPN isolation using network namespaces |
US9985929B2 (en) | 2011-11-22 | 2018-05-29 | Vmware, Inc. | Controlling use of a business environment on a mobile device |
US9436488B2 (en) * | 2012-03-27 | 2016-09-06 | Fujitsu Limited | Program redundancy among virtual machines and global management information and local resource information arrangement |
US20130263115A1 (en) * | 2012-03-27 | 2013-10-03 | Fujitsu Limited | Information processing apparatus, apparatus management method, and apparatus management program |
US20140143391A1 (en) * | 2012-11-20 | 2014-05-22 | Hitachi, Ltd. | Computer system and virtual server migration control method for computer system |
US9813485B2 (en) | 2013-06-14 | 2017-11-07 | 1E Limited | Communication of virtual machine data |
US20190026194A1 (en) * | 2013-06-28 | 2019-01-24 | EMC IP Holding Company LLC | Cross site recovery of a vm |
US10621053B2 (en) * | 2013-06-28 | 2020-04-14 | EMC IP Holding Company LLC | Cross site recovery of a VM |
US11500675B2 (en) * | 2013-08-19 | 2022-11-15 | Amazon Technologies, Inc. | Task scheduling, execution and monitoring |
US20150215165A1 (en) * | 2014-01-27 | 2015-07-30 | Fujitsu Limited | Management device and method of managing configuration information of network device |
US9977694B2 (en) * | 2014-04-28 | 2018-05-22 | Oracle International Corporation | System and method for supporting transaction affinity based on resource manager (RM) instance awareness in a transactional environment |
US20170153910A1 (en) * | 2014-04-28 | 2017-06-01 | Oracle International Corporation | System and method for supporting transaction affinity based on resource manager (rm) instance awareness in a transactional environment |
US11080041B1 (en) * | 2017-03-30 | 2021-08-03 | Amazon Technologies, Inc. | Operating system management for virtual workspaces |
US20180300290A1 (en) * | 2017-04-13 | 2018-10-18 | Sap Se | Virtualized server side rendering |
US10635851B2 (en) * | 2017-04-13 | 2020-04-28 | Sap Se | Virtualized server side rendering |
US10795710B2 (en) * | 2017-07-17 | 2020-10-06 | Vmware, Inc. | Hyper-converged computing device |
US20190018700A1 (en) * | 2017-07-17 | 2019-01-17 | Vmware, Inc. | Hyper-converged computing device |
US11042399B2 (en) | 2017-07-20 | 2021-06-22 | Vmware, Inc. | Managing virtual computing instances and physical servers |
US20190026137A1 (en) * | 2017-07-20 | 2019-01-24 | Vmware, Inc. | Managing virtual computing instances and physical servers |
US10496429B2 (en) * | 2017-07-20 | 2019-12-03 | Vmware, Inc. | Managing virtual computing instances and physical servers |
US20220197968A1 (en) * | 2018-11-01 | 2022-06-23 | Bank Of Montreal | Systems and methods for generating a snapshot view of virtual infrastructure |
US11853383B2 (en) * | 2018-11-01 | 2023-12-26 | Bank Of Montreal | Systems and methods for generating a snapshot view of virtual infrastructure |
CN111324416A (en) * | 2018-12-14 | 2020-06-23 | 慧与发展有限责任合伙企业 | Application deployment in a container management system |
Also Published As
Publication number | Publication date |
---|---|
US20080201711A1 (en) | 2008-08-21 |
US9270781B2 (en) | 2016-02-23 |
US9747125B2 (en) | 2017-08-29 |
US20080201455A1 (en) | 2008-08-21 |
US8176486B2 (en) | 2012-05-08 |
US20160162321A1 (en) | 2016-06-09 |
US20080201414A1 (en) | 2008-08-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9747125B2 (en) | Associating virtual machines on a server computer with particular users on an exclusive basis | |
US9043391B2 (en) | Capturing and restoring session state of a machine without using memory images | |
US20120011509A1 (en) | Migrating Session State of a Machine Without Using Memory Images | |
US11687422B2 (en) | Server clustering in a computing-on-demand system | |
CA3101982C (en) | Domain pass-through authentication in a hybrid cloud environment | |
JP5945031B2 (en) | Provision and manage replicated data instances | |
US8307362B1 (en) | Resource allocation in a virtualized environment | |
US9807153B2 (en) | Managing user state of cloud desktops | |
AU2004288532B2 (en) | Method and system for accessing and managing virtual machines | |
US9176829B2 (en) | Managing recovery virtual machines in clustered environment | |
US7370336B2 (en) | Distributed computing infrastructure including small peer-to-peer applications | |
US20130074179A1 (en) | Single sign-on for remote desktops | |
JP2006510976A5 (en) | ||
EP2766820B1 (en) | System and method for a distributed virtual desktop infrastructure | |
US11159367B2 (en) | Apparatuses and methods for zero touch computing node initialization | |
Dell | Proven Solutions Guide: EMC Infrastructure for VMware View 5.1 EMC VNX Series (FC), VMware vSphere 5.0, VMware View 5.1, VMware View Storage Accelerator, VMware View Persona Management, VMware View Composer 3.0 | |
Sucik et al. | Experience with Server Self Service Center (S3C) | |
GUIDE | VMware View 5.1 and FlexPod |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
AS | Assignment |
Owner name: CLEARCUBE TECHNOLOGY, INC., TEXAS Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:HUSAIN, SYED M. AMIR;UMAIR, MUHAMMAD;MUMTAZ, SAQIB;AND OTHERS;REEL/FRAME:020521/0254 Effective date: 20080215 |
|
AS | Assignment |
Owner name: BRIDGE BANK, NATIONAL ASSOCIATION, CALIFORNIA Free format text: SECURITY INTEREST;ASSIGNOR:CLEARCUBE TECHNOLOGY, INC.;REEL/FRAME:021645/0719 Effective date: 20080806 |
|
AS | Assignment |
Owner name: CLEARCUBE TECHNOLOGY, INC., TEXAS Free format text: RELEASE BY SECURED PARTY;ASSIGNOR:BRIDGE BANK, NATIONAL ASSOCIATION;REEL/FRAME:027135/0663 Effective date: 20110921 |
|
AS | Assignment |
Owner name: CITRIX SYSTEMS, INC., FLORIDA Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:CLEARCUBE TECHNOLOGY, INC.;REEL/FRAME:031837/0976 Effective date: 20131211 |
|
STCF | Information on status: patent grant |
Free format text: PATENTED CASE |
|
MAFP | Maintenance fee payment |
Free format text: PAYMENT OF MAINTENANCE FEE, 4TH YEAR, LARGE ENTITY (ORIGINAL EVENT CODE: M1551); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY Year of fee payment: 4 |
|
AS | Assignment |
Owner name: WILMINGTON TRUST, NATIONAL ASSOCIATION, DELAWARE Free format text: SECURITY INTEREST;ASSIGNOR:CITRIX SYSTEMS, INC.;REEL/FRAME:062079/0001 Effective date: 20220930 |
|
AS | Assignment |
Owner name: BANK OF AMERICA, N.A., AS COLLATERAL AGENT, NORTH CAROLINA Free format text: PATENT SECURITY AGREEMENT;ASSIGNORS:TIBCO SOFTWARE INC.;CITRIX SYSTEMS, INC.;REEL/FRAME:062112/0262 Effective date: 20220930 Owner name: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT, DELAWARE Free format text: PATENT SECURITY AGREEMENT;ASSIGNORS:TIBCO SOFTWARE INC.;CITRIX SYSTEMS, INC.;REEL/FRAME:062113/0470 Effective date: 20220930 Owner name: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT, NEW YORK Free format text: SECOND LIEN PATENT SECURITY AGREEMENT;ASSIGNORS:TIBCO SOFTWARE INC.;CITRIX SYSTEMS, INC.;REEL/FRAME:062113/0001 Effective date: 20220930 |
|
AS | Assignment |
Owner name: CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.), FLORIDA Free format text: RELEASE AND REASSIGNMENT OF SECURITY INTEREST IN PATENT (REEL/FRAME 062113/0001);ASSIGNOR:GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT;REEL/FRAME:063339/0525 Effective date: 20230410 Owner name: CITRIX SYSTEMS, INC., FLORIDA Free format text: RELEASE AND REASSIGNMENT OF SECURITY INTEREST IN PATENT (REEL/FRAME 062113/0001);ASSIGNOR:GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT;REEL/FRAME:063339/0525 Effective date: 20230410 Owner name: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT, DELAWARE Free format text: PATENT SECURITY AGREEMENT;ASSIGNORS:CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.);CITRIX SYSTEMS, INC.;REEL/FRAME:063340/0164 Effective date: 20230410 |
|
MAFP | Maintenance fee payment |
Free format text: PAYMENT OF MAINTENANCE FEE, 8TH YEAR, LARGE ENTITY (ORIGINAL EVENT CODE: M1552); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY Year of fee payment: 8 |