Patent Description:
When a virtual desktop is deployed in a datacenter, the virtual hard disk files are typically deployed on a centralized storage server such as a Storage Area Network (SAN) target and virtualization hosts read the virtual hard disk files off the SAN target. This deployment allows the virtual desktop to be dynamically instantiated on any virtualization host in the datacenter. SAN targets make logical unit numbers (LUNs), e.g., disks, available over a high-speed network to the virtualization hosts and unlike network attached storage, SAN targets do not appear as remote storage to the virtualization hosts. SAN targets however, are expensive and it would be beneficial if a commodity server (with low priced central storage) could be used to centrally deploy virtual hard disk files.

<CIT> relates to bits/rdc integration and bits enhancements. Virtual machine hard drive image files (VHDs) are stored in a virtual machine image store by a virtual machine image server. The BITS protocol with integrated Remote Differential Compression (RDC) is used to transfer one or more VHDs to a virtual machine client. The RDC may compare segments of preexisting VHDs on the virtual machine client with segments of the requested VHDs to minimize the number of segments that are transferred to the virtual machine client. The requested VHD may then be reconstructed from the received segments and the segments preexisting on the virtual machine client. In addition, the host operating system or applications of the virtual machine client may also be used as a source of segments for the RDC, for example.

<CIT> relates to systems and methods for optimizing a process of determining a location of data identified by a virtual hard drive access. The system includes a virtual hard drive, a hypervisor, a plurality of chained files and a table. The plurality of chained files includes a first file comprising a delta of a master file and each subsequent file comprising a delta of a previous file in the plurality of chained files. The table enumerates associations between each of a plurality of virtual hard drive addresses with one of the master file and a file in the plurality of chained files. The virtual hard drive stores the master file, the plurality of chained files, and the table. The hypervisor intercepts a request to access data at a virtual hard drive address and identifies, based on the table, a file containing the requested data and responds to the request with access to the requested data.

According to <NPL>, increasingly, businesses are turning to virtualization to achieve several important objectives, including increase return on investment, decreasing total cost of operation, improving operational efficiencies, improving responsiveness and becoming more environmentally friendly. The move to virtualization requires that IT administrators adopt a new way of thinking about storage infrastructure and application deployment. The Hitachi Universal Storage Platform™ family brings enterprise-class availability, performance and ease of management to organizations of all sizes that are dealing with an increasing number of virtualized business-critical applications.

<NPL> discloses differencing virtual hard disks.

<NPL>, describes virtual hard drive types including differencing disks.

It is the object of the present invention to enhance the streaming of a virtual hard disk files.

An exemplary embodiment describes a system for deploying virtual hard drives to virtual machine hosts. In the illustrated embodiment, the system can include, but is not limited to, a first server configured to execute a guest operating system off of a collection of virtual hard disk files stored on a second server; store, while simultaneously executing a guest operating system off the collection of virtual hard disk files, a received copy of the collection of virtual hard disk files in a storage device attached to the first server; and execute the guest operating system off the copy of the collection of the virtual hard disk files in response to determining that the copy of the collection of the virtual hard disk files was stored in the storage device attached to the first server. In addition to the foregoing, other techniques are described in the claims, the detailed description, and the figures.

In addition to a computer system, an exemplary embodiment provides an operational procedure for deploying virtual hard drives to virtual machine hosts. The exemplary operational procedure includes, but is not limited to booting a guest operating system from a machine differencing virtual hard disk file stored in a second server and a master virtual hard disk file stored in a storage device attached to the first server, wherein the master virtual hard disk file includes a copy of an operating system and the machine differencing virtual hard disk file includes machine identification information for customizing the copy of the operating system for a user; downloading, while simultaneously booting the guest operating system, a copy of the machine differencing virtual hard disk file from the second server; and executing the guest operating system from the copy of the machine differencing virtual hard disk and the master virtual hard disk file in response to determining that the copy of the machine differencing virtual hard disk file was downloaded. In addition to the foregoing, other techniques are described in the claims, the detailed description, and the figures.

In yet another example, a computer readable storage medium that include executable instructions operable to deploy virtual hard drives to virtual machine hosts. The exemplary computer readable storage medium can include instructions that when executed cause a virtualization host to boot a guest operating system from a collection of virtual hard disk files into a virtual machine, wherein a first portion of the collection is stored on a storage device attached to the first server and a second portion is stored on a second server; download, while booting the guest operating system, at least a sub-portion of the second portion of the collection; and execute the guest operating system off the storage device attached to the first server in response to determining that at least the sub-portion of the second portion of the collection was downloaded to the storage device attached to the first server. In addition to the foregoing, other techniques are described in the claims, the detailed description, and the figures.

It can be appreciated by one of skill in the art that one or more various aspects described herein may include but are not limited to circuitry and/or programming for effecting the herein-referenced aspects; the circuitry and/or programming can be virtually any combination of hardware, software, and/or firmware configured to effect the herein-referenced aspects depending upon the design choices of the system designer.

The foregoing is a summary and thus contains, by necessity, simplifications, generalizations and omissions of detail. Those skilled in the art will appreciate that the summary is illustrative only and is not intended to be in any way limiting.

The disclosed subject matter may use one or more computer systems. <FIG> and the following discussion are intended to provide a brief general description of a suitable computing environment in which the disclosed subject matter may be implemented.

The term circuitry used throughout can include hardware components such as hardware interrupt controllers, hard drives, network adaptors, graphics processors, hardware based video/audio codecs, and the firmware used to operate such hardware. The term circuitry can also include microprocessors, application specific integrated circuits, and a processor, e.g., a core (a unit configured to read and execute instructions) of a multicore general processing unit, configured by firmware and/or software. Processor(s) can be configured by instructions loaded from memory, e.g., RAM, ROM, firmware, and/or mass storage, embodying logic operable to configure the processor to perform a function(s). In an example embodiment, where circuitry includes a combination of hardware and software, an implementer may write source code embodying logic that is subsequently compiled into machine readable code that can be executed by hardware. Since one skilled in the art can appreciate that the state of the art has evolved to a point where there is little difference between hardware implemented functions or software implemented functions, the selection of hardware versus software to effectuate herein described functions is merely a design choice. Put another way, since one of skill in the art can appreciate that a software process can be transformed into an equivalent hardware structure, and a hardware structure can itself be transformed into an equivalent software process, the selection of a hardware implementation versus a software implementation is left to an implementer.

Referring now to <FIG>, an exemplary computing system <NUM> is depicted. Computer system <NUM> can include processor102, e.g., an execution core. While one processor102 is illustrated, in other embodiments computer system <NUM> may have multiple logical processors, e.g., multiple execution cores per processor substrate and/or multiple processor substrates that could each have multiple execution cores. As shown by <FIG>, various computer-readable storage media <NUM> can be interconnected by one or more system busses which couples various system components to the processor102. The system buses may be any of several types of bus structures including a memory bus or memory controller, a peripheral bus, and a local bus using any of a variety of bus architectures. In example embodiments the computer-readable storage media <NUM> can include for example, random access memory (RAM) <NUM>, storage device <NUM>, e.g., electromechanical hard drive, solid state hard drive, etc., firmware <NUM>, e.g., FLASH RAM or ROM, and removable storage devices <NUM> such as, for example, CD-ROMs, floppy disks, DVDs, FLASH drives, external storage devices, etc. It should be appreciated by those skilled in the art that other types of computer-readable storage media can be used such as magnetic cassettes, flash memory cards, and/or digital video disks.

The computer-readable storage media <NUM> can provide non volatile and volatile storage of processor executable instructions <NUM>, data structures, program modules and other data for the computer <NUM>. A basic input/output system (BIOS) <NUM>, containing the basic routines that help to copy information between elements within the computer system <NUM>, such as during start up, can be stored in firmware <NUM>. A number of programs may be stored on firmware <NUM>, storage device <NUM>, RAM <NUM>, and/or removable storage devices <NUM>, and executed by processor102 including an operating system and/or application programs.

Commands and information may be received by computer <NUM> through input devices <NUM> which can include, but are not limited to, a keyboard and pointing device. Other input devices may include a microphone, joystick, game pad, scanner or the like. These and other input devices are often connected to processor102 through a serial port interface that is coupled to the system bus, but may be connected by other interfaces, such as a parallel port, game port, or universal serial bus (USB). A display or other type of display device can also be connected to the system bus via an interface, such as a video adapter which can be part of, or connected to, a graphics processing unit <NUM>. In addition to the display, computers typically include other peripheral output devices, such as speakers and printers (not shown). The exemplary system of <FIG> can also include a host adapter, Small Computer System Interface (SCSI) bus, and an external storage device connected to the SCSI bus.

Computer system <NUM> may operate in a networked environment using logical connections to one or more remote computers, such as a remote computer. The remote computer may be another computer, a server, a router, a network PC, a peer device or other common network node, and typically can include many or all of the elements described above relative to computer system <NUM>.

When used in a LAN or WAN networking environment, computer system <NUM> can be connected to the LAN or WAN through network interface card <NUM>. The NIC <NUM>, which may be internal or external, can be connected to the system bus. In a networked environment, program modules depicted relative to the computer system <NUM>, or portions thereof, may be stored in the remote memory storage device. It will be appreciated that the network connections described here are exemplary and other means of establishing a communications link between the computers may be used. Moreover, while it is envisioned that numerous embodiments of the present disclosure are particularly well-suited for computerized systems, nothing in this document is intended to limit the disclosure to such embodiments.

Turning to <FIG>, illustrated is an exemplary virtualization platform that can be used to generate virtual machines. In this embodiment, hypervisor microkernel <NUM> can be configured to control and arbitrate access to the hardware of computer system <NUM>. Hypervisor microkernel <NUM> can isolate processes in one partition from accessing another partition's resources. For example, hypervisor microkernel <NUM> can generate execution environments called partitions such as child partition <NUM> through child partition N (where N is an integer greater than <NUM>). In this embodiment, a child partition is the basic unit of isolation supported by hypervisor microkernel <NUM>. Each child partition can be mapped to a set of hardware resources, e.g., memory, devices, processor cycles, etc., that is under control of the hypervisor microkernel <NUM>. In embodiments hypervisor microkernel <NUM> can be a stand-alone software product, a part of an operating system, embedded within firmware of the motherboard, specialized integrated circuits, or a combination thereof.

Hypervisor microkernel <NUM> can enforce partitioning by restricting a guest operating system's view of the memory in a physical computer system. When hypervisor microkernel <NUM> instantiates a virtual machine, it can allocate pages, e.g., fixed length blocks of memory with starting and ending addresses, of system physical memory (SPM) to the virtual machine as guest physical memory (GPM). In this embodiment, the guest's restricted view of system memory is controlled by hypervisor microkernel <NUM>. The term guest physical memory is a shorthand way of describing a page of memory from the viewpoint of a virtual machine and the term system physical memory is shorthand way of describing a page of memory from the viewpoint of the physical system. Thus, a page of memory allocated to a virtual machine will have a guest physical address (the address used by the virtual machine) and a system physical address (the actual address of the page).

A guest operating system may virtualize guest physical memory. Virtual memory is a management technique that allows an operating system to over commit memory and to give an application sole access to a contiguous working memory. In a virtualized environment, a guest operating system can use one or more page tables to translate virtual addresses, known as virtual guest addresses into guest physical addresses. In this example, a memory address may have a guest virtual address, a guest physical address, and a system physical address.

In the depicted example, parent partition component, which can also be also thought of as similar to domain <NUM> of Xen's open source hypervisor can include a host <NUM>. Host <NUM> can be an operating system (or a set of configuration utilities) and host <NUM> can be configured to provide resources to guest operating systems executing in the child partitions <NUM>-N by using virtualization service providers <NUM> (VSPs). VPSs <NUM>, which are typically referred to as back-end drivers in the open source community, can be used to multiplex the interfaces to the hardware resources by way of virtualization service clients (VSCs) (typically referred to as front-end drivers in the open source community or paravirtualized devices). As shown by the figures, virtualization service clients execute within the context of guest operating systems. However, these drivers are different than the rest of the drivers in the guest in that they may be supplied with a hypervisor, not with a guest. In an exemplary embodiment the path used to by virtualization service providers <NUM> to communicate with virtualization service clients <NUM> and <NUM> can be thought of as the virtualization path.

As shown by the figure, emulators <NUM>, e.g., virtualized IDE devices, virtualized video adaptors, virtualized NICs, etc., can be configured to run within host <NUM> and are attached to resources available to guest operating systems <NUM> and <NUM>. For example, when a guest OS touches a memory location mapped to where a register of a device would be or memory mapped to a device, microkernel hypervisor <NUM> can intercept the request and pass the values the guest attempted to write to an associated emulator. The resources in this example can be thought of as where a virtual device is located. The use of emulators in this way can be considered the emulation path. The emulation path is inefficient compared to the virtualized path because it requires more CPU resources to emulate device than it does to pass messages between VSPs and VSCs. For example, the hundreds of actions on memory mapped to registers required in order to write a value to disk via the emulation path may be reduced to a single message passed from a VSC to a VSP in the virtualization path.

Each child partition can include one or more virtual processors (<NUM> and <NUM>) that guest operating systems (<NUM> and <NUM>) can manage and schedule threads to execute thereon. Generally, the virtual processors are executable instructions and associated state information that provide a representation of a physical processor with a specific architecture. For example, one virtual machine may have a virtual processor having characteristics of an Intel x86 processor, whereas another virtual processor may have the characteristics of a PowerPC processor. The virtual processors in this example can be mapped to logical processors of the computer system such that the instructions that effectuate the virtual processors will be backed by logical processors. Thus, in an embodiment including multiple logical processors, virtual processors can be simultaneously executed by logical processors while, for example, other processor execute hypervisor instructions. The combination of virtual processors and memory in a partition can be considered a virtual machine.

Guest operating systems (<NUM> and <NUM>) can be any operating system such as, for example, operating systems from Microsoft®, Apple®, the open source community, etc. The guest operating systems can include user/kernel modes of operation and can have kernels that can include schedulers, memory managers, etc. Generally speaking, kernel mode can include an execution mode in a processor that grants access to at least privileged processor instructions. Each guest operating system can have associated file systems that can have applications stored thereon such as terminal servers, e-commerce servers, email servers, etc., and the guest operating systems themselves. The guest operating systems can schedule threads to execute on the virtual processors and instances of such applications can be effectuated.

Referring now to <FIG>, it illustrates an alternative virtualization platform to that described above in <FIG>. <FIG> depicts similar components to those of <FIG>; however, in this example embodiment hypervisor <NUM> can include a microkernel component and components similar to those in host <NUM> of <FIG> such as the virtualization service providers <NUM> and device drivers <NUM>, while management operating system <NUM> may contain, for example, configuration utilities used to configure hypervisor <NUM>. In this architecture, hypervisor <NUM> can perform the same or similar functions as hypervisor microkernel <NUM> of <FIG>; however, in this architecture hypervisor <NUM> can be configured to provide resources to guest operating systems executing in the child partitions. Hypervisor <NUM> of <FIG> can be a stand alone software product, a part of an operating system, embedded within firmware of the motherboard or a portion of hypervisor <NUM> can be effectuated by specialized integrated circuits.

Turning now to <FIG>, it illustrates a high-level block diagram of an exemplary datacenter. <FIG> generally illustrates an environment for deploying virtual desktops to clients. Briefly, some elements illustrated in <FIG> are indicated in dashed lines, which indicate that they are considered optionally located within their illustrated location and/or they could be implemented in a distributed manner. Thus, storage transfer engine <NUM> can be located on administrator server <NUM>, and/or VHD storage server <NUM>. The following description will call out specific examples of how and where storage transfer engine <NUM> can be implemented, however the disclosure is not limited to these specific exemplars.

In the illustrated example, the datacenter can include an internal network coupling a plurality of virtualization hosts (<NUM> and <NUM>), which can include components similar to those illustrated by <FIG> or <FIG>, to an administrator server <NUM> and a virtual hard drive (VHD) storage server <NUM>. As one of skill in the art can appreciate, while two virtualization hosts are shown the datacenter can have many more. Also, while each virtualization host (<NUM> and <NUM>) is illustrated running one virtual machine (<NUM> and <NUM>), each virtualization host can simultaneously host many more virtual machines. Or put another way, the datacenter can have M (where M is an integer greater than <NUM>) virtualization hosts and each of the M virtualization hosts can host N (where N is also an integer greater than <NUM>) virtual machines. Virtualization platforms <NUM> and <NUM> are logical abstractions of virtualization infrastructure components such as those described above in <FIG> and <FIG>. The functionality described in the following sections as "within" virtualization platform <NUM> or <NUM> can be implemented in one or more of the elements depicted in <FIG> or <FIG>.

Administrator server <NUM>, which can include components similar to computer system <NUM> of <FIG>, can also include circuitry for connection broker <NUM>, e.g., a processor configured by instructions loaded from a computer-readable storage medium. Connection broker <NUM> can receive virtual desktop requests from clients and can select a host to run the user's virtual machine. Administrator server <NUM> can send a configuration file for the user to virtualization host <NUM>. Virtualization host <NUM> can include a virtual machine engine (not illustrated), which can be implemented within virtualization platform <NUM>, that can execute and instantiate virtual machine <NUM> in accordance with the information in the configuration file. As part of the instantiation process, and described in more detail in the following paragraphs, virtualization platform <NUM> can be configured to determine the location of the virtual hard disk files for virtual machine <NUM> in order to boot a guest operating system stored therein.

VHD storage server <NUM> can include components similar to computer system <NUM> of <FIG>. In exemplary embodiments, instead of being implemented on an expensive SAN, VHD storage server <NUM> can be built from commodity parts such as general purpose processing units, <NUM> or <NUM> gigabit network adaptors, serial advanced technology attachment (SATA) hard disks, small computer system interface (SCSI) hard disks. VHD storage server <NUM> can load a commodity operating system, e.g., Windows Server <NUM>®, which can control the hardware of the computer system. In this example, the operating system can execute instructions operable to implement an application-layer network protocol that provides shared access to files stored in a file system controlled by the operating system. Instead of exposing LUNs like a SAN, VHD storage server <NUM> shares its file system <NUM> on the internal network. Thus, in this exemplary embodiment virtualization hosts can detect VHD storage server <NUM> as a networked storage device. In operation, virtualization hosts send requests to read files in VHD storage server's file system and the operating system running on VHD storage server <NUM> retrieves the desired data.

VHD storage server <NUM> can store a plurality of virtual hard disk files in its file system <NUM>. Briefly, a virtual hard disk file is a virtual representation of a physical hard disk and stores blocks of data, e.g., sequences of bytes or bits, that represent data structures such as guest operating systems and the data stored in the guest's file systems (files, folders, etc.). A virtualization platform can receive input/output (IO) jobs that have been issued from the guest and execute them on the guest's behalf. Booting and running a guest OS from VHD storage server <NUM> however, can cause severe latency issues since VHD storage server <NUM> is not optimized for this deployment. For example, it may take over a minute from boot the guest, e.g., measured from the time the boot loader starts until it exits, when virtualization platform <NUM> has to read bytes of a VHD off of VHD storage server <NUM>. This operation could take significantly longer if multiple users are attempting to logon to their virtual desktops at the same time. In order to expedite this process, in exemplary embodiments, each VHD can be broken up into multiple differencing VHD files and storage transfer engine <NUM> can selectively cache the different files (or portions thereof) in various locations in the datacenter.

In exemplary embodiments, the data that represents a virtual hard disk can be broken up into multiple files and the combination of data forms the virtual hard disk including a guest operating system. A differencing virtual hard disk file represents the current state of a virtual hard disk as a set of modified blocks in comparison to a parent image. The parent image can be another differencing virtual hard disk file or a base virtual hard disk file. Because of this, each differencing virtual hard disk file can include a unique identifier; the identifier of its parent; and a value that identifies the location of its parent. Each differencing VHD file can be linked together and the chain of links can point to the location of a base virtual hard disk file.

In exemplary embodiments, each virtual hard disk can be broken up into three virtual hard disk files. While three virtual hard disk files are illustrated, the disclosure is not limited to this configuration and a virtual hard disk could be broken up into two virtual hard disk files or many more. In an exemplary embodiment, a virtual hard disk file can be formed from a master VHD file, a machine differencing VHD file, and a user differencing VHD file. The master VHD file can include a copy of an operating system similar to what is found on an OS installation DVD and sold to consumers. The master VHD file can also include programs that are used by users in the datacenter. For example, the master VHD file can come with office productivity software if the datacenter is being provisioned for users that require such software. In another example, if the expected users are web-designers, the master VHD file could include web-deigning software.

A machine differencing VHD file can be linked to the master VHD file. Essentially, the machine differencing VHD file can include blocks of data that provision the master VHD file for a specific user. For example, the machine differencing VHD file can include the data that separates one user's computing environment from another such as a machine identifier, an active directory identifier, etc. In an exemplary embodiment, a machine differencing VHD file can exist for every unique user account in the datacenter. In the same or another embodiment, every master VHD file can be linked to the same master VHD file.

In another exemplary embodiment, a user differencing VHD file can optionally be used. In the example embodiment where a user differencing VHD file is used, it can be linked to the master VHD file and used to store the blocks of data that are written to disk during a session. For example, when a user interacts with a virtual desktop the guest operating system writes information to disk. In an exemplary embodiment, these blocks of data can be stored in a user differencing VHD file. In the same, or another embodiment, data written to disk during a snapshot can be stored in user differencing VHD file. Thus, the user differencing VHD file can be writable whereas the machine differencing VHD file and the master VHD file are set as read-only. In this exemplary configuration, only the data on the user differencing VHD file changes when the virtual machine is running.

In an exemplary configuration, the location of the last virtual hard disk file in the chain can be stored in a configuration file for the virtual machine. When a virtualization platform receives a request to instantiate the virtual machine, the virtualization platform can read the configuration file to discover the location of the last link in the chain. The virtualization platform can then discover the location of its parent and open the parent. The virtualization platform can continue to discover virtual hard disk files in the chain until it discovers the location of the base virtual hard disk file and opens it.

In another exemplary embodiment, the location of the last read-only virtual hard disk file in the chain can be stored in the configuration file, e.g., the machine differencing VHD file. In this example, the user differencing VHD file can be dynamically created when booting the virtual machine. For example, a process in virtualization platform <NUM>, e.g., a virtual machine engine, can create the user differencing VHD file in response to detecting a parent location value indicative of a read-only file. In this example, the virtual machine engine can create the user differencing VHD file and dynamically link it to the read-only file.

Virtualization platform can use bitmaps and a preconfigured order of operations to read and write to the collection of virtual hard disk files. For example, each virtual hard disk file can include a bitmap and data. The bitmap indicates which blocks of data are in the differencing disk (<NUM>'s) and which blocks of data are not (<NUM>'s). In this exemplary embodiment, when a virtualization platform, i.e., a storage service running in the virtualization platform, attempts to read from the collection of files, it can be configured to attempt to read from the user differencing virtual hard disk file first and if the blocks are not present, it can copy to the machine differencing virtual hard disk file. In the event that the blocks are not in either file, virtualization platform <NUM> can be configured to read the blocks from the master virtual hard disk file. For write operations, virtualization platform <NUM> can be configured to write to the first link in the chain, e.g., the user differencing VHD file, and mark the corresponding block in the file's bitmap as a <NUM>. Subsequent read IO jobs to this block of data can be directed to the user differencing VHD file.

Turning back to <FIG>, in an exemplary embodiment storage transfer engine <NUM> can be configured to selectively download VHD files to virtualization hosts local storage while the virtual machine is running. After the virtual hard disk files are downloaded, virtualization platform, e.g., microkernel hypervisor <NUM> of <FIG>, can reconfigure the parent location value in each VHD file and/or the configuration file to point to the local copies of the files using a "Setparent" command. By selectively downloading the VHD files, the number of disk operations happening on VHD storage server <NUM> is minimized and the stress of handling storage operations for M virtual machines is eliminated.

After the user logs off, writes made to a user differencing VHD file can be discarded (in a pooled deployment) or merged with, for example, the machine differencing VHD file (in a personal virtual machine deployment). The merge operation can occur at one of a plurality of locations in the datacenter. In a first embodiment, local copies of both files can be merged on a virtualization host. In a second embodiment, local copies of both files can be merged on VHD storage server <NUM>. In a third embodiment, storage transfer engine <NUM> running on a virtualization host merge a copy of user differencing VHD file in local storage <NUM> with a machine differencing VHD file stored in VHD storage server <NUM>. In a forth embodiment, storage transfer engine <NUM> running on VHD storage service <NUM> can merge a copy of user differencing VHD file in local storage <NUM> with a machine differencing VHD file stored in VHD storage server <NUM>. The location of the merge operation can be selected by a server administrator.

Regardless of where the copy operation occurs, storage transfer engine <NUM> can merge the differences stored in a user differencing VHD file with machine differencing VHD file by copying the blocks of data in a user differencing VHD file into the corresponding blocks on a machine differencing VHD file. VHD storage server <NUM> can receive a copy of the modified machine differencing VHD file and overwrite its copy of the file with the modified version. At this point, the virtualization host, e.g., virtualization host <NUM>, can delete its copy or continue to store it in local storage, e.g., local storage <NUM>. In the instance that it stored in local storage <NUM>, a signal can be sent to administrator server <NUM> that indicates the timestamp of its copy of the machine differencing VHD file. In the event that the user logs on again, connection broker <NUM> can compare the timestamp of the machine differencing VHD file stored in local storage <NUM> to the timestamp of the corresponding file in VHD storage <NUM>. In the event that the timestamps match, connection broker <NUM> can be configured to attempt to instantiate virtual machine <NUM> on virtualization host <NUM> instead of on a different host in the datacenter.

<FIG> illustrate different deployment configurations. The selection of a deployment configuration is left to an implemented; however, the selection can be made by taking the available bandwidth of the internal network and the available bandwidth of the internal buses that connect the processor of VHD storage service <NUM> to the physical storage devices, e.g., the internal SATA bus bandwidth into account. For example, a network administrator can test his or her datacenter to see how long it takes to boot an operating system from VHD storage server <NUM> with all the VHD files stored on VHD storage server <NUM>. If it takes too long (based on preference), the administrator can use one of the different deployment configurations described herein. In the instance that the administrator wants to maximize performance, he or she can use a deployment that minimizes the amount of data that has to be sent over the internal network.

In the same or another embodiment, storage transfer engine <NUM> can be configured to selectively copy certain files based on an algorithm that minimizes the amount of the available bandwidth used to copy VHD files. In the same or another embodiment, the algorithm can be configured to detect which file handles the most IO jobs and copy that file.

Turning to <FIG>, it illustrates an exemplary deployment. In the illustrated embodiment, storage transfer engine <NUM> has been configured to copy master VHD file <NUM>, machine differencing VHD file <NUM>, and user differencing VHD file <NUM> to local storage <NUM> after a determination is made by connection broker <NUM> of <FIG> to instantiate virtual machine <NUM> on virtualization host <NUM>. The dashed lines in this figure and the following figures illustrate that copies of master VHD file <NUM>, machine differencing VHD file <NUM>, and user differencing VHD file <NUM> can be copied from VHD storage server <NUM> to virtualization host <NUM>.

In an exemplary embodiment, a copy operation can begin prior to booting. For example, the operation can begin as soon as virtualization platform <NUM> determines the location of the collection of files. In another embodiment, the copy operation can begin when storage transfer engine <NUM> on VHD storage server <NUM> receives a request to open the collection of files from virtualization platform <NUM>.

In both cases, virtualization platform <NUM> can start the process in response to receiving a configuration file. Virtualization platform <NUM> can open the file and read a VHD location field that could include, for example, the network path of user differencing file <NUM>, which could be \\VHDstorageserver\share\. \userXXXuserdiff. Virtualization platform <NUM> can send a request to VHD storage server <NUM> to open up this file and VHD storage server <NUM> can handle the request. Virtualization platform <NUM> can then read a value that indicates the location of user differencing VHD file's parent, which could be \\VHDstorageserver\share\. \ userXXXmachinediff. Similarly, virtualization platform <NUM> could then discover that that machine differencing VHD file's parent is located at \\VHDstorageserver\share\. Each of these links is illustrated in the figure as arrows.

In an alternative embodiment, the configuration file could include a VHD location value for machine differencing VHD file <NUM>, i.e., \\VHDstorageserver\share\. \ userXXXmachinediff. In this example, virtualization platform <NUM> can determine that machine differencing VHD file <NUM> is read-only and generate user differencing VHD file <NUM>. Virtualization platform <NUM> can set the parent location for the newly generated user differencing file to point to machine differencing VHD file <NUM> and change the configuration file to point to the location of the newly generated user differencing file.

After the files are opened, virtualization platform can read the bitmaps and enable a virtual processor in virtual machine <NUM>. An OS boot loader program in virtual machine <NUM> can issue IO jobs for the first blocks that need to be read in order to boot a guest operating system. Virtualization platform <NUM> can use the bitmaps to determine which disk includes requested bytes; fetch the bytes from the files opened on VHD storage server <NUM>; and return the bytes to the boot loader.

After the VHD chain is stored in local storage <NUM>, a signal can be sent to virtualization platform <NUM> to reset the links stored in the VHD files and the configuration file. While virtual machine <NUM> is running, virtualization platform <NUM> can change parent location in the configuration file to point to the downloaded copies, e.g., local user differencing VHD file <NUM> and the parent location information stored in the local copy of machine differencing VHD file <NUM> can be reset to point to local master VHD file <NUM>. For example, virtualization platform <NUM>, e.g., microkernel hypervisor <NUM>, can include an interface that storage transfer engine <NUM> can access in order to change the parent location information. In a specific example, the interface can be accessed and the parent location information in the configuration file can be changed from \\VHDstorageserver\share\. \ userXXXuserdiff. vhd to C:\ProgramData\. \Virtual Machines\userXXXuserdiff. At this point, storage transfer engine <NUM> can close the connection to VHD storage serve <NUM> and send subsequent IO jobs to the local copies of the VHD files instead of the copies stored on VHD storage server <NUM>. For example, when a read IO job is received by virtualization platform <NUM>, the updated location information can be read and cause virtualization platform <NUM> to send the job to local storage <NUM>.

Since the VHD files in the chain may be significantly large, e.g., master VHD file <NUM> alone could be <NUM> or <NUM> gigabytes, in an exemplary embodiment a fast file copy technique can be used to reduce the copy time. For example, a background intelligent transfer service (BITS) could be executed on virtualization host <NUM> and/or VHD storage server <NUM>. BITS can copy files using idle network bandwidth and copy data in the background. In operation, the BITS program can monitor network traffic on VHD storage server <NUM> and throttle its own copies to ensure that other downloads get the bandwidth they need.

In the same, or another embodiment, VHD storage server <NUM> can be configured to pre-cache specific blocks of bytes in RAM in order to speed up the copy operation. For example, boot loaders typically require the same blocks of data from master VHD file <NUM> to perform a logon operation, in an exemplary embodiment these blocks of data can be cached in RAM when VHD storage server <NUM> boots so that VHD storage server <NUM> does not have to first fetch the bytes from mass storage. In another example embodiment, in the instance where VHD storage server <NUM> has enough RAM, the entire master VHD file <NUM> could be pre-cached.

In an exemplary embodiment master VHD file <NUM> and machine differencing VHD file <NUM> can be marked read-only. Thus, these files can be copied to virtualization host <NUM> without issue. However, user differencing VHD file <NUM> is read/write and needs to be copied in a way that ensures that user data is lot lost. In an exemplary embodiment, user differencing VHD file <NUM> starts off with <NUM> bytes (at boot the file is empty) and quickly grows in size. In this example, when storage transfer engine <NUM> initiates a copy operation, local user differencing VHD file <NUM> can be created and virtualization platform <NUM> can be configured to send write IO jobs to both user differencing VHD file <NUM> and local user differencing VHD file <NUM>. Storage transfer engine <NUM> can store a value indicative of a block copy line and can serially start copying blocks to local user differencing VHD file <NUM> from the beginning of user differencing VHD file <NUM> to the end while the guest operating system writes to both copies. After a block is copied to local storage <NUM> the value can be incremented. When the value reaches the end of user differencing VHD file <NUM> both files are synchronized and storage transfer engine <NUM> can stop mirroring the writes to user differencing VHD file <NUM>.

Turning to <FIG>, it illustrates an alternative implementation where a copy of master VHD file is pre-cached on virtualization host <NUM>. In this deployment, each virtualization host in the datacenter can have local master VHD file <NUM> pre-cached so that it does not have to be copied from VHD storage server <NUM>. In this deployment, VHD storage server <NUM> may or may not have a copy of master VHD file, however it can include a copy so that virtualization hosts that are added to the datacenter can download a copy. In this exemplary configuration, machine differencing VHD file <NUM> can include location information that points to the local copy of master VHD file thereby eliminating the situation where read operations to the master VHD file have to be sent over the internal network. Similar to above, after the VHD chain is stored in local storage <NUM>, a signal can be sent to virtualization platform <NUM> to adjust the parent location information stored in the VHD files and the configuration file.

Turning to <FIG>, it illustrates another alternative deployment. In this exemplary embodiment, the configuration file can point to machine differencing VHD file <NUM> and master VHD file <NUM>. In another configuration, the configuration file can point to local user differencing VHD file <NUM>. During boot, writes can be immediately send to local user differencing VHD file <NUM> as copies of master VHD file <NUM> and machine differencing VHD file <NUM> are downloaded. Similar to above, after the VHD chain is stored in local storage <NUM>, a signal can be sent to virtualization platform <NUM> to adjust the parent location information stored in the VHD files and the configuration file.

<FIG> illustrates another alternative deployment. According to this exemplary embodiment, local storage <NUM> can include local user differencing VHD file <NUM> and local master VHD file <NUM> and VHD storage server <NUM> can include machine differencing VHD file <NUM>. In this example, a configuration file for virtual machine <NUM> can include the location of local copy of user differencing VHD file <NUM>. Local user differencing VHD file <NUM> can point to machine differencing VHD file <NUM> on VHD storage server <NUM>, which can point to local master VHD file <NUM>. Similar to the operations described above, while virtual machine <NUM> is running, a copy of machine differencing VHD file <NUM> can be downloaded to virtualization host <NUM> and stored as local machine differencing VHD file <NUM>. Similar to above, after local machine differencing VHD file <NUM> is stored in local storage <NUM>, a signal can be sent to virtualization platform <NUM> to adjust the link stored in local user differencing VHD file to point to the file system location of local machine differencing VHD file <NUM>.

Turning now to <FIG>, it illustrates an operational environment for migrating virtual machine <NUM> from virtualization host <NUM> to virtualization host <NUM>. In the illustrated embodiment, it is assumed that the chain of VHD files for virtual hard disk A has been downloaded to virtualization host <NUM> when the copy operation starts. However, this may not be the case and virtualization host <NUM> may have any combination of VHD files when a live- migration operation is initiated. When initiated, storage transfer engine <NUM> on, for example, virtualization host <NUM> can start copying the VHD files that are necessary to ensure that VHD A is copied to virtualization host <NUM>. In a specific example, this may only include copying local user differencing VHD <NUM> to VHD storage server <NUM> and the file can be copied using the mirroring technique described above. After the files that need to be copied are uploaded to VHD storage server <NUM>, control of VHD A can be switched from virtualization host <NUM> to virtualization host <NUM> and virtualization platform <NUM> can begin to download the files it needs to local storage <NUM>. For example, virtualization host <NUM> may already include local master VHD file <NUM> and/or local machine differencing VHD file <NUM>. Thus, in this example user differencing VHD file <NUM> can be copied to virtualization host <NUM> and stored as local user differencing VHD file <NUM>. Similarly, virtualization host <NUM> can be configured to reset any links after the download is complete so that reads and writes are directed to local copies of the VHD files instead of the copies on VHD storage server <NUM>.

The following are a series of flowcharts depicting operational procedures. For ease of understanding, the flowcharts are organized such that the initial flowcharts present implementations via an overall "big picture" viewpoint and subsequent flowcharts provide further additions and/or details that are illustrated in dashed lines. Furthermore, one of skill in the art can appreciate that the operational procedure depicted by dashed lines are considered optional.

Turning now to <FIG>, it shows an operational procedure which begins with operation <NUM> and operation <NUM> illustrates virtualization host <NUM> including circuitry for executing a guest operating system off of a collection of virtual hard disk files stored on a second server. For example, virtualization platform <NUM> could have previously opened up a collection, e.g. one or more VHD files, stored on a second server, e.g., stored in file system <NUM> of VHD storage server <NUM>. Virtualization platform <NUM>, e.g., executable instructions, can schedule a thread indicative of a virtual processor on a processor and the processor can execute a guest operating system that can issue IO jobs to the collection of VHD files stored in file system <NUM>. An example IO job can be a read. In this example, virtualization platform <NUM> can receive the IO job and read the requested blocks of data from a VHD file over the internal network and send the bytes back to the guest OS.

Continuing with the description of <FIG>, operation <NUM> illustrates that in an embodiment the virtualization host can include circuitry for storing, while simultaneously executing a guest operating system off the collection of virtual hard disk files, a received copy of the collection of virtual hard disk files in a storage device attached to the first server. For example, and turning back to <FIG>, virtualization host <NUM> can receive one or more packets of information indicative of a copy of a collection of virtual hard disk files from VHD storage server <NUM>. The collection in this example could include, but is not limited to, a user differencing virtual hard disk file, a machine differencing virtual hard disk file, and/or a master virtual hard disk file. In this example, VHD storage server <NUM> can simultaneously copy the collection to local storage <NUM> while the guest operating system is running. That is, virtual machine <NUM> can execute the guest operating system off the collection stored in VHD storage service <NUM> while a copy of the collection is downloaded.

Turning back to <FIG>, operation <NUM> shows that in an embodiment, virtualization host can include circuitry for executing the guest operating system off the copy of the collection of the virtual hard disk files in response to determining that the copy of the collection of the virtual hard disk files was stored in the storage device attached to the first server. Turning back to <FIG>, in an exemplary embodiment the collection of virtual hard disk files can be successfully received by virtualization host <NUM> and stored in local storage <NUM>. In this example, virtualization platform <NUM> can receive a signal indicating that the storage operation is complete and set the parent location information in a configuration file and/or in the virtual hard disk files so that the location information points to the local copies of the collection. After the parent location information is changed, virtualization platform <NUM> can use the updated location information to issue IO jobs to the local copy of the collection. Accordingly, since virtualization platform <NUM> no longer needs to read data over the internal network from VHD storage service <NUM>, the processing stress on VHD storage service <NUM> is reduced and well as the demand on bandwidth.

Referring to <FIG>, it shows an alternative embodiment of the operational procedure of <FIG> including the operations <NUM>-<NUM>. Turning to operation <NUM>, it illustrates that in an embodiment virtualization host <NUM> can include circuitry for booting the guest operating system from the collection of virtual hard disk files, wherein the collection of virtual hard disk files includes a master virtual hard disk file, a machine differencing virtual hard disk file, and a user differencing virtual hard disk file. For example, and turning to <FIG>, in this exemplary embodiment, virtualization host <NUM> can boot the guest operating system from VHD storage server <NUM>. In this example, the collection of VHD files stored thereon can include master VHD file <NUM>, which can include a copy of an operating system, machine differencing VHD file <NUM>, which can include information for customizing the operating system for a specific user such as a machine identifier, etc., and a user differencing VHD file, which can include data that has been written to disk during the session.

In an exemplary embodiment including operation <NUM>, the copy operation for the collection of VHD files could have started prior to booting the guest operating system and may complete after guest operating system begins executing, i.e., after a boot loader exits and turns control of virtual machine <NUM> over to the guest OS. When virtualization platform <NUM> received a request to boot the guest OS, all of files for VHD A may have been stored in VHD storage server <NUM> and virtualization platform <NUM> could determine the location of user differencing VHD file <NUM> from a configuration file. Virtualization platform <NUM> could use information in user differencing VHD file <NUM> to determine the location of machine differencing VHD file <NUM> and the location information in machine differencing VHD file <NUM> to determine the location of master VHD file <NUM>. After the collection is downloaded, virtualization platform <NUM> can set the location in the configuration file to point to the location of local user differencing VHD file <NUM>, the parent location information in local user differencing VHD file <NUM> to point to local machine differencing VHD file <NUM> and the parent information in local machine differencing VHD file <NUM> to point to local master VHD file <NUM>. At this point, virtualization platform <NUM> will use the local copies of the VHD files for IO.

Continuing with the description of <FIG>, operation <NUM> shows that in an embodiment, virtualization host <NUM> can include circuitry for booting the guest operating system from the collection of virtual hard disk files and a pre-cached copy of a master virtual hard disk file stored in the storage device attached to the first server. For example, and turning to <FIG>, in an exemplary embodiment the collection can include machine differencing VHD file <NUM> and user differencing VHD file <NUM>. A copy of master VHD file <NUM> could be pre-cached in local storage <NUM> as local master VHD file <NUM>. In this example, virtualization host <NUM> could be deployed in the datacenter with local master VHD file <NUM> stored in local storage <NUM> or when virtualization host <NUM> is turned on it can pre-copy master VHD file <NUM>. In this configuration, network traffic caused by migrating master VHD file <NUM>, which could be <NUM> gigabytes, is eliminated. Moreover, any read IO jobs directed to blocks in a master VHD file can be handled locally.

Continuing with the description of <FIG>, operation <NUM> shows that in an embodiment, virtualization host <NUM> can include circuitry for booting the guest operating system from the collection of virtual hard disk files and a user differencing virtual hard disk file stored in the storage device attached to the first server. In this exemplary embodiment, and turning to <FIG>, the collection can include master VHD file <NUM> and machine differencing VHD file <NUM>. While guest operating system is booting, i.e. a boot loader is in control of virtual machine <NUM>, virtualization platform <NUM> can handle certain IO jobs by writing and reading from local user differencing VHD file <NUM> and handle others by reading from the collection stored in VHD storage server <NUM>. In this example, local user differencing VHD file <NUM> can be empty prior to boot or it could be created dynamically when virtualization platform <NUM> receives a request to instantiate virtual machine <NUM>. In the first scenario, a configuration file can include the location of the empty local user differencing VHD file <NUM>. In the second, the configuration file can include the location of machine differencing VHD file <NUM> and virtualization platform <NUM> can dynamically generate local user differencing VHD file <NUM> and link it to machine differencing VHD file <NUM>.

In either case, the location of machine differencing VHD file <NUM> and master VHD file <NUM> can be determined and storage transfer engine <NUM> can begin to copy them to local storage <NUM> thereby storing local machine differencing VHD file <NUM> and local master VHD file <NUM>. After the collection is downloaded, virtualization platform <NUM> can change the parent location field in local user differencing VHD file <NUM> to point to the location of local machine differencing VHD file <NUM> and change the parent location field in local machine differencing VHD file <NUM> to point to the location of local master VHD file <NUM>. At this point, virtualization platform <NUM> will use the local copies of the VHD files for IO.

Continuing with the description of <FIG>, operation <NUM> shows that in an embodiment, virtualization host <NUM> can include circuitry configured to merge a user differencing virtual hard disk file into a machine differencing virtual hard disk file and send the machine differencing virtual hard disk file to the second server. In a deployment where user data is persisted after a logoff, virtualization platform <NUM> can be configured to merge the data in local user differencing file <NUM> with the data in local machine differencing VHD file <NUM> and send the modified machine differencing VHD file back to VHD storage server <NUM>. For example, Virtualization platform <NUM> can merge the two files by copying each block of data in local user differencing file <NUM> into the corresponding block in local machine differencing VHD file <NUM>. After VHD storage server <NUM> receives the modified copy of local machine differencing VHD file <NUM>, it can store it as machine differencing VHD file <NUM>.

After the modified version is set as machine differencing VHD file <NUM>, virtualization platform <NUM> can optionally delete local user differencing VHD file <NUM> and local machine differencing VHD file <NUM>. For example, virtualization platform <NUM> can be configured to delete these files in the instance that storage capacity on local storage <NUM> is limited. In the instance that virtualization host <NUM> persists the merged copy of machine differencing VHD file in local storage <NUM> as local machine differencing VHD file <NUM>, virtualization host <NUM> can send a signal to administrator server <NUM> to notify it that the next time client <NUM> connects, virtualization host <NUM> should host virtual machine <NUM>.

Continuing with the description of <FIG>, operation <NUM> shows that in an embodiment, storage server <NUM> can include circuitry for merging a user differencing virtual hard disk file received from the first server into a machine differencing virtual hard disk file stored on the second server. In this exemplary embodiment, after a user logs off virtualization platform <NUM> can send local user differencing file <NUM> back to VHD storage server <NUM> and instruct storage transfer engine <NUM> to merge local user differencing file <NUM> with machine differencing VHD file <NUM>. VHD storage server <NUM> can then store the modified machine differencing VHD file as machine differencing VHD file <NUM>.

Continuing with the description of <FIG>, operation <NUM> shows that in an embodiment, the storage server can be configured to receive at least a user differencing virtual hard disk file from the first server; and send at least the user differencing virtual hard disk file to a third server. For example, and turning to <FIG>, in an exemplary embodiment a live-migration operation can be used to migrate virtual machine <NUM> from virtualization host <NUM> to virtualization host <NUM> while virtual machine <NUM> is running. For example, storage transfer engine <NUM> can receive a signal indicating that virtual machine <NUM> is to be migrated from virtualization host <NUM> to virtualization host <NUM>. In response, storage transfer engine <NUM> can determine which virtual hard disk files need to be copied in order to run virtual machine <NUM> on virtualization host <NUM>. In this example, storage transfer engine <NUM> can determine that at least local user differencing VHD file <NUM> need to be copied. In this example, local user differencing VHD file <NUM> can be sent to VHD storage service <NUM> using the mirroring technique described above.

The operation to send at least the information stored in user differencing VHD file <NUM> can occur in parallel with an operation that copies the state of virtual machine <NUM>, e.g., the contents of RAM and the state for virtual devices, from virtualization host <NUM> to virtualization host <NUM>. In another configuration, the storage copy operations can occur before the live-migration operations begin. In either case, read-only files can be copied to VHD storage server <NUM> and read/write files can be mirrored. For example, storage transfer engine <NUM> running on virtualization host <NUM> can sequentially copy blocks of data from local user differencing VHD file <NUM> to VHD storage server <NUM> while sending writes to both local user differencing VHD file <NUM> and user differencing VHD file <NUM>. When the copy operation is complete, virtualization platform <NUM> can modify the configuration file to set the location information to point at the location of user differencing VHD file <NUM> so that writes get send to VHD storage server <NUM>. After control of virtual machine <NUM> is switched from virtualization platform <NUM> to virtualization platform <NUM>, virtualization platform <NUM> can read blocks of data from VHD storage server <NUM> over the internal network. At this point, storage transfer engine <NUM> can be configured to copy at least user differencing VHD file <NUM> to virtualization host <NUM>.

Continuing with the description of <FIG>, operation <NUM> shows that in an embodiment, storage server <NUM> can include circuitry for pre-caching at least a portion of the collection of the virtual hard disk files in random access memory of the second server. For example, and turning back to <FIG>, in an exemplary embodiment a determination can be made as to what bytes are typically read during a boot operation for a type of operating system. For example, read IO jobs issued by virtualization platform <NUM> can be tracked over successive boot operations and a group of bytes that are typically read can be determined. In this example, VHD storage server <NUM> can be configured to pre-cache these bytes in RAM when it boots in order to have available for booting virtual machines. This can speed up the boot operations for virtual machines. For example, the persistent storage used to store virtual hard drives can be commodity hardware, e.g., off the shelf SATA drives, and having VHD storage server <NUM> read the bytes off this type of hardware introduces another layer of latency that is eliminated by pre-caching these bytes in RAM.

Continuing with the description of <FIG>, operation <NUM> shows that in an embodiment, the administrator server can include circuitry for directing a client computer system to connect to the first server in response to determining that the first server includes a current copy of a machine differencing virtual hard disk file. For example, and turning back to <FIG>, in an embodiment administrator server <NUM> can include circuitry, e.g., a processor configured by executable instructions indicative of connection broker <NUM>. In this example, the instructions can configure the processor to manage a table of information that identifies which virtualization host has VHD files along with timestamps indicating when they were last modified. In response to receiving a connection request from client <NUM> to connect to virtual machine <NUM>, administrator server <NUM> can execute a program that checks the timestamps for the collection of VHD files for virtual hard disk A in VHD storage server <NUM> and compares the timestamps to the timestamps in the table. In the instance that there is a match, e.g., virtualization host <NUM> includes a machine differencing virtual hard disk file that has a timestamp that is equal to the timestamp associated with a machine differencing virtual hard disk file stored in VHD storage server <NUM>, administrator server <NUM> can attempt to have virtual machine <NUM> loaded on virtualization host <NUM>. This would eliminate having to copy at least some of the VHD files to virtualization host <NUM>. In most cases, if virtualization host <NUM> includes a current copy of machine differencing VHD file it also includes a current copy of master VHD file. If this is the case, no files would have to be downloaded from VHD storage server <NUM>.

Turning to operation <NUM>, it shows directing a client computer system to connect to the first server in response to determining that a load on the first server is low. For example, in an embodiment administrator server <NUM> can include circuitry, e.g., a processor configured by executable instructions indicative of connection broker <NUM>. In this example, the instructions can configure the processor to manage a table of information that identifies which the current load each virtualization server is currently under. For example, the load information could indicate the amount of RAM allocated to virtual machines and how much total RAM each virtualization server has. In response to receiving a connection request from client <NUM> to connect to a virtual desktop session, administrator server <NUM> can execute a program that checks the load on each server and selects a server the least loaded server to host the virtual desktop session.

In an example embodiment where both operations <NUM> and <NUM> are executed, administrator server <NUM> can be configured to identify servers that have low loads thereon and then check the timestamps for the collection of VHD files for virtual hard disk A in VHD storage server <NUM> and compare the timestamps to the timestamps in the table. In the instance that there is a match, e.g., virtualization host <NUM> includes a machine differencing virtual hard disk file that has a timestamp that is equal to the timestamp associated with a machine differencing virtual hard disk file stored in VHD storage server <NUM>, administrator server <NUM> can attempt to have virtual machine <NUM> loaded on virtualization host <NUM>.

Turning now to <FIG>, it illustrates an exemplary embodiment for describing operations related to executing a virtual machine from networked storage. Operation <NUM> begins the operational procedure and operation <NUM> illustrates the operation booting a guest operating system from a machine differencing virtual hard disk file stored in a second server and a master virtual hard disk file stored in a storage device attached to the first server, wherein the master virtual hard disk file includes a copy of an operating system and the machine differencing virtual hard disk file includes machine identification information for customizing the copy of the operating system for a user. For example, and referring to <FIG> or <FIG>, in an exemplary embodiment, virtualization host <NUM> can include local master VHD file <NUM>. For example, local master VHD file <NUM> could have been previously downloaded or virtualization host <NUM> could be deployed with a copy. In any event, virtualization platform <NUM> can boot a guest operating system from the combination of information in local master VHD file <NUM> and machine differencing VHD file <NUM>.

Virtualization platform <NUM> can initialize a boot operation in response to a request received from administrator server <NUM> of <FIG>. Virtualization platform <NUM> can receive a configuration file associated with the user account of a user logging on via client <NUM> of <FIG>. Virtualization platform <NUM> can access the configuration file and a field stored therein can include the location of, for example, a user differencing VHD disk file, which could be stored in local storage <NUM> or on VHD storage server <NUM>. From the user differencing VHD disk file, the location of its parent, machine differencing VHD file <NUM> can be discovered. In this example, machine differencing VHD file <NUM> can reside in storage of VHD storage server <NUM> and its parent can be local master VHD file <NUM>. After the VHD files that form VHD A are opened virtualization platform <NUM> can being booting a guest operating system off of it by sending read IO requests that are handled by machine differencing VHD file <NUM> to VHD storage server <NUM> and read IO requests that are handled by local master VHD file <NUM> to local storage <NUM>.

Continuing with the description of <FIG>, operation <NUM> shows an operation for downloading, while simultaneously booting the guest operating system, a copy of the machine differencing virtual hard disk file from the second server. For example, and turning to <FIG> or <FIG>, virtualization host <NUM> can receive one or more packets of information indicative of a copy of machine differencing VHD file <NUM> from VHD storage server <NUM> and store the copy as local machine differencing VHD file <NUM>. In this example VHD storage server <NUM> may be simultaneously copying the machine differencing VHD file <NUM> to local storage <NUM> during the boot operation. That is, while virtual machine <NUM> is booting from the combination while a copy is simultaneously being downloaded.

Turning again back to <FIG>, operation <NUM> illustrates an operation for executing the guest operating system from the copy of the machine differencing virtual hard disk and the master virtual hard disk file in response to determining that the copy of the machine differencing virtual hard disk file was downloaded. Turning back to <FIG> or <FIG>, in an exemplary embodiment local machine differencing VHD file <NUM> can be successfully stored in the file system of virtualization host <NUM>. In this example, virtualization platform <NUM> can receive a signal indicating that the storage operation is complete and set the parent location information in a user differencing VHD file's parent location field to point to the location of local machine differencing VHD file <NUM>. After the location is changed, virtualization platform <NUM> can use the updated location information to perform IO operations on the local copy.

Turning now to <FIG>, it illustrates an alternative embodiment of the operational procedure depicted by <FIG> including operations <NUM>-<NUM>. As shown by operation <NUM>, in an embodiment virtualization host <NUM> can include circuitry for downloading a user differencing virtual hard disk file from the second server, the user differencing virtual hard disk file storing blocks of data written to the virtual hard disk during a session. Turning to <FIG>, in this embodiment user differencing VHD disk <NUM> can be copied from VHD storage server <NUM> to virtualization host <NUM> and stored as local user differencing VHD disk <NUM>. As shown by the figure, in this example virtualization platform <NUM> could receive a configuration file that includes a parent location field including the location of user differencing VHD file <NUM>. A parent location field in user differencing VHD file <NUM> can include the location for machine differencing VHD file <NUM> and its parent field can include the location of local master VHD file <NUM>. Storage transfer engine <NUM> can sequentially copy blocks of data from user differencing VHD file <NUM> to local user differencing VHD file <NUM>. While it is being copied, virtualization platform <NUM> can send writes to both local user differencing VHD file <NUM> and user differencing VHD file <NUM> until the last block of user differencing VHD file <NUM> is copied. At that point, virtualization platform <NUM> can be configured to stop writing to user differencing VHD file <NUM> and can change the location field in the configuration file to point to the location of local user differencing VHD file <NUM> instead of user differencing VHD file <NUM>. At this point, virtualization platform <NUM> will use the local copy of user differencing VHD file <NUM> for associated IO operations.

Continuing with the description of <FIG>, it illustrates operation <NUM>, which is an operation for writing blocks of data to a user differencing virtual hard disk file that is pre-cached in the storage device attached to the first server. For example, and turning to <FIG>, in this exemplary embodiment, local storage <NUM> can include local user differencing VHD file <NUM>. In this exemplary embodiment, local user differencing VHD file <NUM> can be pre-cached in local storage <NUM> so that it does not have to be copied across the network. For example, when virtualization platform <NUM> boots virtual machine <NUM>, it can be configured to generate an empty local user differencing VHD file <NUM>. As a virtual processor writes to VHD A, the writes can be stored in the blocks of local user differencing VHD file <NUM> and it can grow from <NUM> bytes. In this exemplary embodiment, each time virtualization platform <NUM> writes to virtualization platform <NUM> it can set a bit in a bitmap. When a read IO job is received by virtualization platform <NUM>, it can be configured to check the bitmap to see if a bit is set for the block. If it is, virtualization platform <NUM> can read the bytes stored in the block from local user differencing VHD file <NUM>. In the event that the bit is not set, virtualization platform <NUM> can be configured to check a bitmap for local machine differencing VHD file <NUM>. If the bitmap for local machine differencing VHD file <NUM> is not set, virtualization platform <NUM> can read the blocks from local master VHD file <NUM>.

Operation <NUM> shows that in an embodiment, virtualization host <NUM> can include circuitry for merging a user differencing virtual hard disk file with the copy of the machine differencing virtual hard disk file and sending the copy of the machine differencing virtual hard disk file to the second server. In a deployment where user data is persisted, virtualization platform <NUM> can be configured to merge the data in local user differencing file <NUM> with the data in local machine differencing VHD file <NUM> and send the modified machine differencing VHD file back to VHD storage server <NUM>. For example, virtualization platform <NUM> can merge the two files by copying each block of data in local user differencing file <NUM> into the corresponding block in local machine differencing VHD file <NUM>. After VHD storage server <NUM> receives the modified copy of local machine differencing VHD file <NUM>, it can store it as machine differencing VHD file <NUM>.

Operation <NUM> shows that in an embodiment, virtualization host <NUM> can include circuitry for sending a user differencing virtual hard disk file to the second server. In this exemplary embodiment, after a user logs off virtualization platform <NUM> can send local user differencing file <NUM> back to VHD storage server <NUM> and instruct storage transfer engine <NUM> to merge local user differencing file <NUM> with machine differencing VHD file <NUM>. VHD storage server <NUM> can then store the modified machine differencing VHD file as machine differencing VHD file <NUM>.

Operation <NUM> shows that in an embodiment, virtualization host <NUM> can include circuitry for writing data stored in a user differencing virtual hard disk file into the machine differencing virtual hard disk file stored in a second server. In this exemplary embodiment, storage transfer engine <NUM> executing in virtualization host <NUM> can be configured to merge the differences in local user differencing VHD file <NUM> into machine differencing VHD file <NUM>. For example, storage transfer engine <NUM> can open up machine differencing VHD file <NUM> and write blocks of data from user differencing VHD file <NUM> across the internal network into corresponding blocks in machine differencing VHD file <NUM>.

Turning to operation <NUM>, it shows that virtualization <NUM> host can include circuitry for sending a user differencing virtual hard disk file to the second server during a migration operation. For example, and turning to <FIG>, in an exemplary embodiment a live-migration operation can be used to migrate virtual machine <NUM> from virtualization host <NUM> to virtualization host <NUM> while it is running. For example, storage transfer engine <NUM> can receive a signal indicating that virtual machine <NUM> is to be migrated from virtualization host <NUM> to virtualization host <NUM>. In response, storage transfer engine <NUM> can determine which virtual hard disk files need to be copied in order to run virtual machine <NUM> on virtualization host <NUM>. In this example, storage transfer engine <NUM> can determine that at least local user differencing VHD file <NUM> need to be migrated. In this example, local user differencing VHD file <NUM> can be sent to VHD storage service <NUM> using the mirroring technique described above. Moreover, this operation can occur in parallel with an operation that copies the state of virtual machine <NUM> from virtualization host <NUM> to virtualization host <NUM>.

Referring back to <FIG>, operation <NUM> shows downloading, using idle bandwidth, the copy of the machine differencing virtual hard disk file from the second server. For example, in an embodiment storage transfer engine <NUM> executing on, for example virtualization host <NUM> and/or VHD storage server <NUM> can determine to download machine differencing VHD file <NUM> using the idle bandwidth of the internal network. In this example, the system is optimized for executing virtual machine <NUM> and copies occur when the network is otherwise idle. Or put another way, if <NUM>% of the bandwidth is being used, storage transfer engine <NUM> may use up to <NUM>% of the remaining bandwidth to send machine differencing VHD file <NUM> to virtualization host <NUM>.

Turning now to <FIG>, it illustrates an operational procedure. Operation <NUM> begins the process, and operation <NUM> illustrates an operation for booting a guest operating system from a collection of virtual hard disk files into a virtual machine, wherein a first portion of the collection is stored on a storage device attached to the first server and a second portion is stored on a second server. For example, a processor in virtualization host <NUM> can receive a thread indicative of a virtual processor running a boot loader. The processor can run virtualization platform <NUM> and determine that the boot loader is requesting bytes that are stored in collection of VHD files. Some of the collection of VHD files can be stored in local storage <NUM> and others can be stored on VHD storage server <NUM>. In this example, virtualization platform <NUM> can fetch the bytes and return them to the boot loader, which can then continue to boot the guest OS.

Continuing with the description of <FIG>, operation <NUM> shows downloading, while booting the guest operating system, at least a sub-portion of the second portion of the collection. For example, while the boot loader is running and in control of virtual machine <NUM>, virtualization host <NUM> can download one or more packets of information indicative of a copy of at least a sub-portion of the first portion. For example, in an embodiment storage transfer engine <NUM> executing on, for example VHD storage server <NUM> can be configured to send at least some of the virtual hard disk files it is storing to virtualization host <NUM>. In a specific example, and turning to <FIG>, storage transfer engine <NUM> can be configured to send machine differencing VHD file <NUM> and/or user differencing VHD file <NUM> to virtualization host <NUM>.

The determination as to whether or not to send one or both can be made based on the available bandwidth in internal network and the load that VHD storage server <NUM> is under. For example, if VHD storage server <NUM> is handing multiple requests from multiple virtual machines, it can be configured to delay migrating some or all of the VHD files until idle processor cycles are available. In the same or another embodiment, if the available bandwidth is low, storage transfer engine <NUM> can be configured to delay migrating some or all of the VHD files until bandwidth is available.

Turning to operation <NUM>, it shows executing the guest operating system off the storage device attached to the first server in response to determining that at least the sub-portion of the second portion of the collection was downloaded to the storage device attached to the first server. In an exemplary embodiment, sometime after the boot loader has exited and the guest OS is in control of virtual machine <NUM> the first portion can be successfully downloaded to local storage <NUM>. Virtualization platform <NUM> can receive a signal indicating that the storage operation is complete and modify the parent location fields in any downloaded VHD files to point to downloaded copies. At this point, virtualization platform <NUM> can use the updated location information to perform IO operations on the local copy of the VHD files. Accordingly, since virtualization platform <NUM> no longer needs to send read/write operations over the internal network to VHD storage service <NUM>, the stress on VHD storage service <NUM> is reduced and well as the demand on bandwidth.

Referring now to <FIG>, it illustrates an alternative operational procedure for the operational procedure illustrated in <FIG> including refinement <NUM>. As shown by the figure, refinement <NUM> shows that in an embodiment the second portion of the collection includes a master virtual hard disk file and a machine differencing virtual hard disk file and the first portion of the collection includes a user differencing virtual hard disk file. In this exemplary embodiment, and turning to <FIG>, the collection can include master VHD file <NUM> and machine differencing VHD file <NUM>. While guest operating system is booting, virtualization platform <NUM> can send write IO jobs and certain read IO jobs to local user differencing VHD file <NUM> and send read IO jobs for the collection to VHD storage server <NUM>. In this example, local user differencing VHD file <NUM> can be empty prior to boot or it could be created dynamically when virtualization platform <NUM> receives a request to instantiate virtual machine <NUM>. In the first scenario, a configuration file can include the location of the empty local user differencing VHD file <NUM>. In the second, the configuration file can include the location of machine differencing VHD file <NUM> and information that directs virtualization platform <NUM> to create local user differencing VHD file <NUM> and link it to machine differencing VHD file <NUM>.

The foregoing detailed description has set forth various embodiments of the systems and/or processes via examples and/or operational diagrams. Insofar as such block diagrams, and/or examples contain one or more functions and/or operations, it will be understood by those within the art that each function and/or operation within such block diagrams, or examples can be implemented, individually and/or collectively, by a wide range of hardware, software, firmware, or virtually any combination thereof.

Claim 1:
A system for streaming a virtual hard disk, comprising:
a first server, comprising:
a first processor; and
a first memory coupled to the first processor, the first memory including instructions that upon execution cause the first server to:
boot a guest operating system from a machine differencing virtual hard disk file (<NUM>) stored in a second server (<NUM>) and a master virtual hard disk file (<NUM>) stored in a storage device attached to the first server, wherein the master virtual hard disk file includes a copy of an operating system and the machine differencing virtual hard disk file includes data that separates a specific user's computing environment from that of other users for customizing the copy of the operating system for the specific user;
download, while simultaneously booting the guest operating system, a copy of the machine differencing virtual hard disk file from the second server;
execute the guest operating system from the copy of the machine differencing virtual hard disk file and the master virtual hard disk file after the copy of the machine differencing virtual hard disk file is stored in the storage device attached to the first server;
store blocks of data in a user differencing virtual hard disk file, the blocks of data being written to the virtual hard disk during a session;
merge the user differencing virtual hard disk file with the copy of the machine differencing virtual hard disk file after the user logs off, by copying the blocks of data in the user differencing virtual hard disk file into the corresponding blocks on the copy of the machine differencing virtual hard disk file; and
send the copy of the machine differencing virtual hard disk file to the second server for being stored as machine differencing virtual hard disk file (<NUM>).