When we talk about virtualization technologies, a main theme is always about efficiency. This efficiency is centered on utilization of compute and memory resources. With traditional deployments on physical servers, one server only processes a single workload. These workloads rarely utilize more than 10-20% of server’s capacity and most servers don’t even come close to that level. This leads to massive amounts of compute cycles left unused in our data centers.
In the past, we could tap into these unused resources by stacking multiple workloads on these servers. This could be multiple unrelated databases or application servers or both. This definitely improves the server usage and increases our efficiency, but comes with many pitfalls. The most obvious of these is shared maintenance windows. All workloads running on these multi-tenant servers now have to coordinate downtimes for patching and upgrades.
Another drawback to multi-tenancy is that resource utilization now has to be managed. Since there are multiple workloads running on a single operating system, we need to make sure utilization did not rise much past 60%. The reason for this has to do with how operating systems schedule process to run on a CPU. The busier a system gets, the harder it is to find an available thread to execute the request, for most operating systems this is around 60%. This means that if one workload started utilizing too much compute, then the other workloads would be impacted and performance would be degraded.
With virtualization, these multi-tenant servers can be run in different operating systems, on the same physical server. In this case, it is the virtualization layer than has to schedule the virtual CPU on a physical thread. VMware has focused very aggressively on making this process extremely efficient and lightweight and is likely the reason why vSphere has limitations on how many vCPUs can be allocated to a single VM. Due to this highly efficient virtual scheduling, vSphere is able to fully utilize all physical cores without any significant transaction degradation. Remember, from my last post, that if a particular ESX server does become loaded, vSphere will utilize vMotion to do a live migration of one or more VMs to another, lesser loaded, ESX host. This eliminates the manual process of managing utilization.
So, by virtualizing, we can now have the best of both worlds. We get maximum utilization of compute and memory resources, and at much higher levels than multi-tenancy and even other virtualization technologies. We also get back to maintenance windows that do not require negotiation and cooperation between different groups. This allows us to focus on other, more important, areas and less on capacity monitoring.