Patent Publication Number: US-9841988-B1

Title: Updating service virtual machines using a new image that is certified

Description:
TECHNICAL FIELD 
     The present disclosure is generally related to management of service virtual machines by computer systems. 
     BACKGROUND 
     Virtualization may be viewed as abstraction of some physical components into logical objects in order to allow running, for example, various operating systems concurrently and in isolation from other operating systems on one or more interconnected physical computer systems. Virtualization allows, for example, consolidating multiple physical servers into one physical server running multiple virtual machines in order to improve the hardware utilization rate. Virtualization may be achieved by running a layer, often referred to as “hypervisor,” above the hardware and below the virtual machines. A hypervisor may run directly on the server hardware without an operating system beneath it or as an application running under a traditional operating system. A hypervisor may abstract the physical layer and present this abstraction to virtual machines to use, by providing interfaces between the underlying hardware and virtual devices of virtual machines. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
       The present disclosure is illustrated by way of examples, and not by way of limitation, and may be more fully understood with references to the following detailed description when considered in connection with the figures, in which: 
         FIG. 1  depicts a block diagram of a system for updating service virtual machines, according to one or more aspects of the present disclosure. 
         FIG. 2  depicts a block diagram of a system for updating service virtual machines, according to one or more aspects of the present disclosure. 
         FIG. 3  depicts a block diagram of a system for updating service virtual machines, according to one or more aspects of the present disclosure. 
         FIG. 4  is a flow diagram of a method for updating service virtual machine, according to one or more aspects of the present disclosure. 
         FIG. 5  is a flow diagram of a method for updating service virtual machines, according to one or more aspects of the present disclosure. 
         FIG. 6  is a block diagram of an example computer system operating in accordance with one or more aspects of the present disclosure. 
     
    
    
     DETAILED DESCRIPTION 
     Described herein are methods and systems for updating service virtual machines in a virtualized environment. The virtualized environment refers to a distributed computer system (e.g., a computer cluster, a data center, a cloud-based computer network, etc.) which includes host machines that each run one or more virtual machines by executing a hypervisor to abstract the physical layer, including processors, memory, and I/O devices, and present this abstraction to the virtual machines as virtual devices. The virtualized environment can be centrally managed by a virtualization manager that is coupled to the host machines over a network. 
     A service virtual machine refers herein to a virtual machine that provides a service to other virtual machines, applications, host computing systems, client devices, etc. For example, a service virtual machine may include one or more guest applications that are dedicated to performing a specific functionality within the virtualization environment. A service virtual machine may be instantiated from an image that includes components (e.g., guest applications, a guest operating system, etc.) that are needed to perform the specific functionality. The image may be “certified” (i.e., include an indicator verifying that the components of the image have been tested and are confirmed to operate properly). Multiple service virtual machines created from the same image can be running in the virtualized environment. 
     Service virtual machines may need to be periodically upgraded to provide improved or different performance (e.g., improved speed or security of the service virtual machines or additional features for the service virtual machines). Conventionally, such upgrades are done manually by a system administrator who can terminate one or more service virtual machines that were created from the original certified image, and instantiate one or more new service virtual machines from a new image that includes upgraded components. However, the new image may include untested components that can contain functional and configuration errors, and as such can result in improper operation of the newly created service virtual machines. In addition, conventional upgrade procedures do not keep track of upgrades and their timing. Furthermore, upgrading currently running service virtual machines in a manner discussed above may result in undesired termination of active sessions and loss of data. 
     Aspects of the present disclosure address the above and other deficiencies by providing a reliable upgrade mechanism for service virtual machines in a virtualized environment. In particular, a virtualization manager may include an update manager responsible for automatically upgrading service virtual machines that were created from an originally certified image to perform a certain service in the virtualized environment. For each service virtual machine, the update manager can create an additional service virtual machine from a new image that includes an update for the originally certified image. The additional service virtual machine can have a configuration similar to the original service virtual machine. The update manager may then verify that the new image can pass a certification test (e.g., by initiating a communication with the additional service virtual machine and determining whether the additional service virtual machine responds in an expected manner). If the new image passes the certification test, the update manager may then transfer active sessions from the original service virtual machine to the additional service virtual machine. The update manager may also transfer a floating IP address from the original service virtual machine to the additional service virtual machine such that the additional service virtual machine replaces the original service virtual machine. 
     Accordingly, aspects of the present disclosure improve the performance of service virtual machines in the virtualized environment by allowing an update manager to quickly and accurately update service virtual machines using a new image that passes a certification test. As a result, potential for errors is reduced, and a record of updates is maintained. In addition, active sessions are transferred to the updated version of the service virtual machine, preventing loss of data and ensuring that the service is provided in uninterrupted manner. Furthermore, aspects of the present disclosure may improve operation of computers in general by no longer wasting computing (processing) resources for creating service virtual machines based on uncertified images that do no operate correctly. 
       FIG. 1  is a block diagram of one illustrative example of a distributed computer system  100  that updates service virtual machines in a virtualized environment  100 . The virtualized environment  100  may be a data center, a cluster of computers, a cloud network or any other group of nodes, including a plurality of host computing systems  120 A- 120 C and a virtualization manager  112 . The host computing systems  120 A- 120 C may communicate to one another and to the virtualization manager  112  through a network  140 . The network  140  may be, for example, a public network (e.g., the Internet), a private network (e.g., a local area network (LAN) or wide area network (WAN)), a wired network (e.g., Ethernet network), a wireless network (e.g., an 802.11 network or a Wi-Fi network), a cellular network (e.g., a Long Term Evolution (LTE) network), routers, hubs, switches, server computers, and/or a combination thereof. 
     Host computing system  120 A may be a server, a mainframe, a workstation, a personal computer (PC), a mobile phone, a portable computing device, etc. Host computing system  120 A may run a host operating system that manages the hardware resources of the computer system  120 A and that provides functions such as inter-process communication, scheduling, memory management, and so forth. In some implementations, the host computing system  120 A may also include a hypervisor  124 A, which may be a computer program that provides a virtual operating platform for one or more virtual machines  122 A,  126 A, and manages the execution of the virtual machines  122 A,  126 A. In some implementations, one or more of host computing systems  120 A- 120 C may execute fewer or additional virtual machines. In addition, one or more of host computing systems  120 A- 120 C may execute additional applications directly by a host operating system. Service virtual machine  126  may provide a service such as load balancing service within the virtualization environment  100 . Load balancing may refer to distributing workloads (e.g., tasks, traffic, etc.) across multiple computing resources (e.g., virtual machines  122  and  126 , host computing systems  120 , virtual devices, physical devices, disk drives, etc.) to optimize resource use, maximize throughput, minimize response time and avoid overload of resources within the virtualization environment  100 . Alternatively, service virtual machine  126  may provide a domain name system (DNS) service or any other service within the virtualized environment  100 . 
     The hypervisor  124 A may take various forms. For example, the hypervisor  124 A may be part of or incorporated in the operating system of computer system  120 A, or the hypervisor  124 A may be running on top of a host operating system. Alternatively, the hypervisor  124 A may be a “bare metal” hypervisor that runs on hardware of the host computing system  120 A without an intervening operating system. The hypervisor  124 A manages system resources, including access to I/O devices, memory devices, processing devices, and the like of the host computing system  120 A. The hypervisor  124 A can present to virtual machines  122 A an abstraction of the physical layer that may provide the same or different abstractions to various guest programs, such as guest operating system, guest applications, etc. Some examples of hypervisors include quick emulator (QEMU®), kernel mode virtual machine (KVM®), virtual machine monitor (VMM), etc. 
     The hypervisor  124 A may support virtual machines  122 A,  126 A residing on the host computing system  120 A. In some implementations, one or more virtual machines may reside on the host computing system  120 A. The virtual machine  122 A,  126 A may execute programs as though the virtual machine  122 A,  126 A was a physical machine. In some implementations, there may be fewer or additional host computing systems  120 A- 120 C than shown in  FIG. 1 . 
     The virtualization manager  112  may monitor and manage virtual machines  122  and  126  that are running on the host computing systems  120  and may receive information about the operation of each hypervisor  124 A- 124 C managed by the server. The information received by virtualization manager  112  may include data describing the host computing system&#39;s storage, memory and networks as well as virtual machine creation, other host administration tasks, statistics gathering, and log collection. In some implementations, the virtualization manager  112  may assign a floating internet protocol (IP) address to a node (e.g., virtual machine  122 ,  126  or host computing system  120 ) in the virtualized environment. A floating IP address refers herein to an IP address that can be allocated to a currently running node. 
     The virtualization manager  112  may include an update manager  110 . The update manager  110  may manage updates (e.g., upgrades or other changes) to service virtual machines  126 . For example, the update manager  110  may manage updates in response to determining that a new service virtual machine image is available. A new service virtual machine image may be an update to a current service virtual machine image that was used to create one or more currently running service virtual machines such as service virtual machines  126 A- 126 C. The update manager  110  may store service virtual machine information identifying service virtual machines that were created from the current service virtual machine image. This service virtual machine information may be stored in a virtual machine image data store  115  or a different data store. 
     The update manager  110  may determine that there is a new service virtual machine image based on a notification that a new service virtual machine image was uploaded, downloaded, or otherwise provided to the virtual machine image data store  115 . The virtual machine image data store  115  may store images for various service virtual machines. The virtualization manager  112  or hypervisors  124 A may use the images stored in the virtual machine image data store  115  to create new instances of service virtual machines. In various implementations, the virtual machine image data store  115  may be local to the update manager  110  or stored at a remote network location. 
     When a new service virtual machine image is available in the virtual machine image data store  115  as an update for the current service virtual machine image, it may be stored with an associated universal unique identification (UUID) for the new service virtual machine image at the virtual machine image data store  115 . The update manager  110  may then use the service virtual machine information discussed above to determine which service virtual machines were created from the current service virtual machine image for which the new service virtual machine image has become available. In some implementations, the update manager  110  may determine which service virtual machines  126 A- 126 C provide the same or similar service as the one associated with the new service virtual machine image based on an indicator associated with the new service virtual machine image. If the new service virtual machine image is for a load balancer, the update manager may identify the service virtual machines  126 A- 126 C that provide a load balancing service, for instance. The update manager  110  may then update the identified running service virtual machines  126 A- 126 C. To update a running service virtual machine  126 A, the update manager  110  may create a new instance of the service virtual machine  126 A using the new image. The update manager  110  may create the new instance using the same configuration as the original instance of the service virtual machine  126 A. For example, the settings, connections, destination addresses, and the like may be setup the same on the new instance of the service virtual machine  126 A. The update manager  110  may then determine whether the new image is certified (e.g., has an indicator verifying that the new image has passed a certification test). If not, the update manager  110  may perform a certification test as described herein. In some implementations, the update manager  110  may also test the new instance of the service virtual machine  126 A (e.g., using the above certification test) to confirm that the new instance of the service virtual machine  126 A is setup correctly. If the certification test is passed, the update manager  110  may transfer active sessions (sessions with clients at one or more nodes in the virtualized environment  100  and/or user devices), from the original service virtual machine  126 A to the new instance of the service virtual machine and transfer a floating IP address from the original service virtual machine  126 A to the new instance of the service virtual machine. Finally, the update manager  110  may terminate the original service virtual machine  126 A. 
       FIG. 2  is a block diagram showing additional details of an example implementation of an update manager  210 . For example, the update manager  210  may be the same or similar to update manager  110  described with reference to  FIG. 1 . In  FIG. 2 , a load balancer is provided as an example of a service virtual machine. However, an update manager  210  may manage updates of other types of service virtual machines as well. In such examples, the update manger  210  and other components may operate similarly to update other types of service virtual machines. In some implementations, other update managers  210  may be provided to handle different types of service virtual machines. 
     The update manager  210  may include a load balancer identifier  212 , an image certification service  214 , a transfer service  216 , and a load balancer image data store  218 . In some implementations, the load balancer image data store  218  may be in a location separate from the update manager  210 . The update manager  210  may determine that a load balancer image data store  218  includes a new image for a load balancer. The update manager  210  may determine that there is a new load balancer image in response to receiving a notification that the new image has been uploaded or downloaded to the load balancer image data store  218  as an update for an existing load balancer image. The new image may have (include or be otherwise associated with) an identifier of the existing load balancer image. In some implementations, the update manager  210  may instead determine that there is a new load balancer image based on a new UUID for the image stored in the load balancer image data store  218  or in another manner. 
     After determining that there is a new load balancer image, a load balancer identifier  212  may identify one or more load balancers in a network that are to be updated with the new load balancer image. The load balancer identifier  212  may identify load balancers to update based on the UUID of the image of running load balancers, based on the stored information identifying load balancers created from the existing load balancer image, or based on other information. 
     In  FIG. 2 , the initial load balancer  220  may be identified by the load balancer identifier  212  as a load balancer that is to be updated. The initial load balancer  220  may be executed as a service virtual machine on a host computing system managed by a hypervisor. 
     The initial load balancer  220  includes an active sessions data store  222 , a configuration data store  224 , an update agent  226 , and a virtual network interface card (VNIC)  228  having a floating IP address  229 . The active sessions data store  222  may include data indicating the state of one or more active sessions. For example, the active sessions data store  222  may include a table indicating active connections of the initial load balancer  220 . The configuration data store  224  may include data indicating a configuration of the initial load balancer  220 . For example, a load balancer may be configured with one or more listener objects, one or more pool objects, and one or more member objects. The listener objects may determine which traffic the initial load balancer  220  uses. For example, a listener object may identify particular ports of a VNIC  228  to listen to for traffic. In some implementations, a load balancer may have more than one listener object. For example, A website load balancer may have a listener object that listens to http traffic with port 80 and a listener object that listens to https traffic with port 443. These listeners may point to the same pool object or to different pool objects. A pool object may identify a pool of resources to which the initial load balancer  220  may direct traffic. For example, the pool object may identify member objects that the initial load balancer  220  can use to direct traffic. In some implementations, a load balancer may have more than one pool object. For example, a file transfer protocol (FTP) load balancer may have different pool objects for different file types. A listener may determine which pool object to use based on the file type. The member objects then may identify a particular resource that the initial load balancer  220  may use. For example, the initial load balancer  220  can direct traffic to one of node A, node B, or node C. Node A, node B, and node C may be servers, network resources, cloud computing locations, or the like. In other examples, a load balancer may map traffic to fewer or additional nodes than shown in  FIG. 2 . 
     After the load balancer identifier  212  identifies the initial load balancer  220  as a load balancer to update, the update manager  210  may create a new instance of the load balancer, updated load balancer  230 . In order to create the instance of the updated load balancer  230 , the update manager may use the new load balancer image from the load balancer image data store  218 . The updated load balancer  230  may be created as a new virtual machine, as a new application on an existing virtual machine, or as a new application on a new virtual machine. The update manager  210  may also create the instance of the updated load balancer  230  to have a configuration similar to that in the initial load balancer  220 . To create the similar load balancer, the update manager  210  may receive data from the configuration data store  224 . In order to provide a similar configuration, the initial load balancer  220  may also include an update agent  226 . The update agent  226  may provide information to the update manager  210  or perform operations directed by update manager  210 . For example, the update agent  226  may provide data from configuration data store  224 . The update manager  210  may then use this data to create the instance of the updated load balancer  230  with the same configuration as the initial load balancer  220 . For instance, if the initial load balancer  220  have member objects of node A, node B, and node C, the update manager  210  may create the updated load balancer  230  to have the same member objects. 
     In addition to creating the updated load balancer  230 , the update manager  210  may include an image certification service  214  to determine that the update load balancer  230  passes a certification test. In order to test the updated load balancer  230 , the image certification service  214  may provide a test input to the updated load balancer  230  and determine whether the response from the updated load balancer  230  is as expected. For example, the image certification service may provide a test URL to the updated load balancer  230  and determine whether the received response is the expected response to the test URL. 
     In response to determining that the updated load balancer image or the instance of the updated load balancer  230  passes a certification test, the image certification service  214  certifies the new load balancer image (e.g., by adding a certification indicator to the new load balancer image). Subsequently, when this certified load balancer image is used to create an additional instance of the load balancer, the above certification test may not be performed. Alternatively, this test may still be performed to verify that the additional instance of the load balancer has been set up correctly. 
     Further, a transfer service  216  of the update manager  210  may transfer active sessions from the initial load balancer  220  to the updated load balancer  230 . In order to transfer active sessions, the transfer service  216  may receive data from active sessions data store  222 . The transfer service  216  may then provide the data to update agent  236  so that the update agent  236  can store the data in active sessions data store  232 . Depending on the updated load balancing image, the active sessions data may need to be translated to a different format for use by the updated load balancer  230 . The translation may be performed by the update manager  210  (e.g., by the transfer service  216  or another module) or by the update agent  236  on the updated load balancer  230 . 
     When the active sessions have been transferred to the updated load balancer, the transfer service  216  may transfer a floating IP address  229  to the updated load balancer. For example, the floating IP address  229  may be removed from the VNIC  228  and reassigned by the update manager  210  to the VNIC  238  on the updated load balancer  230 . The update manager  210  may then terminate the initial load balancer  220  as the updated load balancer  230  will provide the load balancing service. 
       FIG. 3  depicts a block diagram of a system for updating service virtual machines, according to one or more aspects of the present disclosure. The system in  FIG. 3  may include a processing device  302  coupled to a memory device  304 . The processing device  302  may execute a load balancer image identifier  312 , a running load balancer identifier  314 , an active sessions transfer service  316  and a transfer service  316 , a load balancer instance creator  318 , and an IP address assigner  319 . 
     The load balancer image identifier  312  may determine that a new load balancer image is available. For example, the load balancer image identifier  312  may determine that a new load balancer image is available based on an updated load balancer image  315  stored in memory device  304 . 
     The running load balancer identifier  314  may identify a load balancer that is provided by a presently running virtual machine. The load balancer may be identified based on a version number or other identification of a load balancer image associated with the presently running virtual machine. In some implementations, the running load balancer identifier  314  may identify a load balancer to update based on a stored list of load balancers in a network environment. For example, the running load balancer identifier  314  may identify running load balancers as those that are listed as running by a virtualization manager. The initial load balancer  320  may be identified as a presently running load balancer. The initial load balancer  320  may be a virtual machine or an application executed by a virtual machine. 
     The load balancer instance creator  318  may create a new instance of an identified load balancer based on the updated load balancer image  315 . For example, the updated load balancer  330  may be created with a configuration matching the identified running load balancer. The load balancer instance creator  318  may create the updated load balancer  330  on a virtual machine or as an application executed by a virtual machine. In some implementations, the load balancer instance creator  318  may be created as a new application on a previously executing virtual machine. 
     The active sessions transfer service  316  may transfer active sessions from the initial load balancer  320  to the updated load balancer  330 . Data representing the active sessions of the initial load balancer  320  may be stored in an active sessions data store  322 . The active sessions transfer service  316  may receive the active sessions from the initial load balancer  320  provide the active sessions to the updated load balancer  330 . The updated load balancer  330  may then store data associated with the active sessions in active sessions data store  332 . 
     The IP address assigner  319  may reassign a floating IP address  329  from the initial load balancer  320  to the updated load balancer  330 . After the floating IP address  329  is transferred to the updated load balancer  330 , the updated load balancer  330  may operate to perform the service of a load balancer in place of the initial load balancer  320 . In some implementations, the initial load balancer  320  may then be terminated. 
       FIG. 4  is a flow chart depicting an example method  400  performed by an update manager to update a service virtual machine. Beginning in block  410 , the update manager determines that a new service virtual machine image is available. The new service virtual machine image may include an update for a current service virtual machine image. In some implementations, the update manager may determine that a new service virtual machine image is available based on receiving a notification that a new image is available. 
     In block  420 , the update manager identifies an instance of a first service VM that is presently running. The instance of the first service virtual machine that is running may have been created from a current service virtual machine image. Accordingly, the first service virtual machine may need to be updated to the new service virtual machine image. The instance of the first service virtual machine may have a floating IP address assigned to it. 
     In block  430 , the update manager may create a new instance of the service virtual machine using the new service virtual machine image. For example, the update manager may provide a command to a hypervisor to create a new service virtual machine with the new service virtual machine image. 
     In block  440 , the update manager transfers active session from the identified instance of the service virtual machine to the new instance of the service virtual machine. In some implementations, the active sessions may be represented by a session table that can be transferred to the new instance of the service virtual machine. In some implementations, the update manager may transfer the active sessions by instructing the identified instance of the service virtual machine to send data representing the active sessions to the new instance of the service virtual machine. In some implementations, the active sessions may be transferred in response to determining that the new service virtual machine image or the new instance of the service virtual machine is certified. 
     In block  450 , the update manager may reassign a floating IP address associated with the identified instance of the service virtual machine to the new instance of the service virtual machine. After the floating IP address is transferred, the new instance of the service virtual machine may interact with various nodes when performing the designated service. The update manager may then terminate the identified instance of the service virtual machine. 
     The update manager may continue to identify and update service virtual machines. For example, for each identified instance of a service virtual machine, the update manager may create a new instance of the service virtual machine with a similar configuration. The update manager may then transfer active sessions to the new instance and reassign a floating IP address to the new instance. 
       FIG. 5  is a flow chart depicting an example method  500  performed by an update manager to update service virtual machines. Beginning in block  510 , the update manager determines that a new service virtual machine image is available. The new service virtual machine image may include an update for a current service virtual machine image. In some implementations, the update manager may determine that a new service virtual machine image is available based on receiving a notification that a new image is available. 
     In block  520 , the update manager identifies a plurality of service virtual machines that are presently running. The identified instances of service virtual machines that are running may have been created from a current service virtual machine image. Accordingly, the identified service virtual machines may need to be updated to the new service virtual machine image. Each identified service virtual machine may have a floating virtual machine assigned to it. 
     In block  530 , the update manager may create a new instance of a respective identified service virtual machine using the new service virtual machine image. For example, the update manager may provide a command to a hypervisor to create a new service virtual machine with the new service virtual machine image. 
     In block  540 , the update manager transfers active sessions from the respective identified instance of the service virtual machine to the new instance of the service virtual machine. In some implementations, the active sessions may be represented by a session table that can be transferred to the new instance of the service virtual machine. In some implementations, the update manager may transfer the active sessions by instructing the identified instance of the service virtual machine to send data representing the active sessions to the new instance of the service virtual machine. In some implementations, the active sessions may be transferred in response to determining that the new service virtual machine image or the new instance of the service virtual machine is certified. 
     In block  550 , the update manager may reassign a floating IP address associated with the respective identified instance of the service virtual machine to the new instance of the service virtual machine. After the floating IP address is transferred, the new instance of the service virtual machine may perform the service based on the new image. As the floating IP address no longer directs traffic to the identified instance of the load balancer, the update manager may terminate the identified instance of the load balancer. 
     In block  560 , the update manager may determine whether there are additional identified service virtual machine remaining to update. If additional service virtual machines to update, the update manager may return to block  530  to update an additional respective identified service virtual machine. For example, the update manager may repeat the processes described with reference to blocks  530 ,  540 , and  550  to each identified service virtual machine. If all of the identified service virtual machines have been updated, the update manager may finish the process described in reference to  FIG. 5 . 
       FIG. 6  depicts an example computer system  600  which can perform any one or more of the methods described herein for updating service virtual machines. In one example, computer system  600  may correspond to virtualization manager  112  or update manager  110  of  FIG. 1 . The computer system may be connected (e.g., networked) to other computer systems in a LAN, an intranet, an extranet, or the Internet. The computer system  600  may operate in the capacity of a server in a client-server network environment. The computer system  600  may be a personal computer (PC), a set-top box (STB), a server, a network router, switch or bridge, or any device capable of executing a set of instructions (sequential or otherwise) that specify actions to be taken by that device. Further, while only a single computer system is illustrated, the term “computer” shall also be taken to include any collection of computers that individually or jointly execute a set (or multiple sets) of instructions to perform any one or more of the methods discussed herein. 
     The exemplary computer system  600  includes a processing device  602 , a main memory  604  (e.g., read-only memory (ROM), flash memory, dynamic random access memory (DRAM) such as synchronous DRAM (SDRAM)), a static memory  606  (e.g., flash memory, static random access memory (SRAM)), and a secondary memory  616  (e.g., a data storage device), which communicate with each other via a bus  608 . 
     The processing device  602  represents one or more general-purpose processors such as a microprocessor, central processing unit, or the like. The term “processing device” is used herein to refer to any combination of one or more integrated circuits and/or packages that include one or more processors (e.g., one or more processor cores). Therefore, the term processing device encompasses a single core CPU (computer processing unit), a multi-core CPU and a massively multi-core system that includes many interconnected integrated circuits, each of which may include multiple processor cores. The processing device  602  may therefore include multiple processors. The processing device  602  may include a complex instruction set computing (CISC) microprocessor, reduced instruction set computing (RISC) microprocessor, very long instruction word (VLIW) microprocessor, processor implementing other instruction sets, or processors implementing a combination of instruction sets. The processing device  602  may also be one or more special-purpose processing devices such as an application specific integrated circuit (ASIC), a field programmable gate array (FPGA), a digital signal processor (DSP), network processor, system on chip (SoC), or the like. The computer system  600  may include a graphics processing unit  622 , a video processing unit  628 , and an audio processing unit  632 . 
     The computer system  600  may further include a network interface device  608 . The computer system  600  also may include a video display unit  610  (e.g., a liquid crystal display (LCD) or a cathode ray tube (CRT)), an alphanumeric input device  612  (e.g., a keyboard), a cursor control device  614  (e.g., a mouse), and a signal generation device  620  (e.g., a speaker). 
     The secondary memory  616  may include a machine-readable storage medium (or more specifically a computer-readable storage medium (CRM))  624  on which is stored one or more sets of instructions embodying any one or more of the methodologies or functions described herein (e.g., update manager  110 ). The main memory  604  may also store, completely or partially, instructions  654  embodying any one or more of the methodologies or functions described herein (e.g., update manager  110 ). Furthermore, the processing device  602  may include instructions to implement update manager  110  during execution thereof by the computer system  600 . The main memory  604  and the processing device  602  may also include machine-readable storage media. 
     While the computer-readable storage medium  624  is shown in an exemplary implementation to be a single medium, the term “computer-readable storage medium” (or “computer-readable medium”) should be taken to include a single medium or multiple media (e.g., a centralized or distributed database, and/or associated caches and servers) that store the one or more sets of instructions. The term “computer-readable storage medium” shall also be taken to include any medium other than a carrier wave that is capable of storing or encoding a set of instructions for execution by the machine that cause the machine to perform any one or more of the methodologies of the present disclosure. The term “computer-readable storage medium” shall accordingly be taken to include, but not be limited to, non-transitory media such as solid-state memories, and optical and magnetic media. 
     The modules, components and other features described herein (for example in relation to  FIG. 1, 2 or 2 ) can be implemented as discrete hardware components or integrated in the functionality of hardware components such as ASICS, FPGAs, DSPs, SoCs, or similar devices. In addition, the modules can be implemented as firmware or functional circuitry within hardware devices. Further, the modules can be implemented in any combination of hardware devices and software components, or only in software. 
     Some portions of the detailed descriptions which follow are presented in terms of algorithms and symbolic representations of operations on data bits within a computer memory. These algorithmic descriptions and representations are the means used by those skilled in the data processing arts to most effectively convey the substance of their work to others skilled in the art. An algorithm is here, and generally, conceived to be a self-consistent sequence of steps leading to a desired result. The steps are those requiring physical manipulations of physical quantities. Usually, though not necessarily, these quantities take the form of electrical or magnetic signals capable of being stored, transferred, combined, compared, and otherwise manipulated. It has proven convenient at times, principally for reasons of common usage, to refer to these signals as bits, values, elements, symbols, characters, terms, numbers, or the like. 
     It should be borne in mind, however, that all of these and similar terms are to be associated with the appropriate physical quantities and are merely convenient labels applied to these quantities. Unless specifically stated otherwise, as apparent from the following discussion, it is appreciated that throughout the description, discussions utilizing terms such as “creating”, “receiving”, “determining”, “executing”, “performing”, “transferring,” “translating,” “assigning,” “reassigning,” “identifying,” “providing,” “associating,” “retrieving,” or the like, refer to the action and processes of a computer system, or similar electronic computing device, that manipulates and transforms data represented as physical (electronic) quantities within the computer system&#39;s registers and memories into other data similarly represented as physical quantities within the computer system memories or registers or other such information storage, transmission or display devices. 
     The terms “first”, “second”, “third”, “fourth”, etc. as used herein are meant as labels to distinguish among different elements and may not necessarily have an ordinal meaning according to their numerical designation. 
     Implementations of the present disclosure also relate to an apparatus for performing the operations herein. This apparatus may be specially constructed for the required purposes, or it may comprise a general purpose computer system selectively programmed by a computer program stored in the computer system. Such a computer program may be stored in a computer readable storage medium, such as, but not limited to, any type of disk including floppy disks, optical disks, CD-ROMs, and magnetic-optical disks, read-only memories (ROMs), random access memories (RAMs), EPROMs, EEPROMs, magnetic disk storage media, optical storage media, flash memory devices, other type of machine-accessible storage media, or any type of media suitable for storing electronic instructions, each coupled to a computer system bus. 
     The algorithms and displays presented herein are not inherently related to any particular computer or other apparatus. Various general purpose systems may be used with programs in accordance with the teachings herein, or it may prove convenient to construct more specialized apparatus to perform the required method steps. The required structure for a variety of these systems will appear as set forth in the description above. In addition, the present disclosure is not described with reference to any particular programming language. It will be appreciated that a variety of programming languages may be used to implement the teachings of the disclosure as described herein. 
     It is to be understood that the above description is intended to be illustrative, and not restrictive. Many other implementations will be apparent to those of skill in the art upon reading and understanding the above description. Although the present disclosure has been described with reference to specific exemplary implementations, it will be recognized that the disclosure is not limited to the implementations described, but can be practiced with modification and alteration within the spirit and scope of the appended claims. Accordingly, the specification and drawings are to be regarded in an illustrative sense rather than a restrictive sense. The scope of the disclosure should, therefore, be determined with reference to the appended claims, along with the full scope of equivalents to which such claims are entitled. 
     In the above description, numerous details are set forth. It will be apparent, however, to one skilled in the art, that the present disclosure may be practiced without these specific details. In some instances, well-known structures and devices are shown in block diagram form, rather than in detail, in order to avoid obscuring the present disclosure.