1. Technical Field
This invention generally relates to cloud computing systems, and more specifically relates to placing virtual machines in a cloud environment based on factors that include optimized processor-memory affinity.
2. Background Art
Cloud computing is a common expression for distributed computing over a network and can also be used with reference to network-based services such as Infrastructure as a Service (IaaS). IaaS is a cloud based service that provides physical processing resources to run virtual machines (VMs) as a guest for different customers. The virtual machine may host a user application or a server.
It is often necessary or desirable to migrate workload in one computer system (a source) to another computer system (a target). Often, workload migration takes the form of migrating one or more virtual machines (sometimes referred to as logical partitions) from the source to the target, the migrated virtual machine's workload previously being performed in the source being subsequently performed in the target. For example, each client of a server may have its own virtual machine within the server for one or more respective client processes, so the workload is migrated by moving the workload of one or more clients, and reconstructing the virtual machine parameters, on one or more other server systems. A virtual machine may be migrated to balance workload among multiple systems, but may also be migrated to perform maintenance on the source system or for some other reason.
Physically, many large server systems are designed as systems having a non-uniform memory access in which multiple processors and main memory are physically distributed, so that each processor has some portion of main memory which is in closer physical proximity (and is accessed faster) than other portions of main memory. In such a system, it is desirable, insofar as possible, to hold instructions and other data required for executing a process or thread in the main memory portion which is physically closest to the processor executing the process or thread, a characteristic referred to as “processor-memory affinity” or “affinity”.