|
For batch-oriented tasks, provisioning VMs and getting predictable performance appears to be relatively straightforward.
This seemly simple task can be difficult if VMs interfere significantly with each other. When we introduce
virtualization with enterprise services like the Domain Name System (DNS) [4], VM provisioning becomes more complex,
especially as the location of the physical machine hosting the VM becomes important. In this section, we describe the
challenges of server virtualization in an enterprise context.
Studying the Issues of Virtualization in the Enterprise
Our approach to studying the issues of virtualization in the enterprise had two parts. First, we looked at how VMs
running on the same physical host could affect each other, particularly when different applications were running on the
VMs. Second, we looked at key enterprise services and investigated how these services would fare in a virtual
environment.
This is how we studied virtual machine interference:
-
We obtained baseline performance (a control) of an application running on one VM.
-
We attempted to optimally degrade the performance of one of two VMs running on the host, typically by attempting to
use some shared resource.
-
We documented and analyzed the results.
Once we had studied how individual VMs interact on one physical host, we looked at how VMs would interact in an
enterprise. We first looked at the services that are the most critical and generate the most volume on the Intel Wide
Area Network (WAN). Our goal was to examine those applications for performance bottlenecks and platform dependencies
that would be problematic when servers for those applications and services would be virtualized. In addition, we also
looked for five additional applications commonly used within Intel. For all of these services and applications, we
searched for information on the Web and talked to IT personnel who are expert at running them in Intel's IT environment,
looking for the issues mentioned previously.
VM Interference
VMs, as a technology, offer many advantages to users and administrators. Security isolation prevents a malicious
application from accessing data or altering running code. Fault isolation prevents one misbehaving application from
bringing down the whole systemrather than rebooting the box, one can simply reboot the VM. Environment isolation allows
multiple OSs to run on the same machine, accommodating legacy applications and cutting-edge software alike.
While VMs offer these forms of isolation, we have observed that modern VM environments [4, 5] do not really provide
performance isolation. While in theory, the virtual machine manager (VMM, also known as the hypervisor) "slices"
resources and allocates shares to different VMs, there are still ways in which the behavior of one VM can adversely
affect the performance of another. Furthermore, the isolation that VMs provide limits visibility of an application in a
VM into the cause(s) of performance anomalies that occur in a virtualized environment. Contemporary platforms with Intel®
VT, however, provide mechanisms that we can use to detect and classify performance interference, which can then be used
for a number of purposes:
-
As input to the local scheduler, which can alter its behavior (e.g., change quanta or ordering) to ameliorate the
effects of the interference.
-
As input to a global scheduler, or orchestration engine, which uses the information to rearrange the placement of
VMs to minimize interference and improve performance.
-
As "metering" data, so that systems that charge for usage (e.g., free-market allocation systems such as HP Labs'
Tycoon* [6], grid computing pay-per-cycle or "cycle-rental" schemes, etc.) can more accurately charge/credit users for
the resources they consume/provide.
Our research to date has shown that shared state in resources under contention can indeed dramatically affect the
performance of a VM, beyond the expected performance degradation that is due to simple time-slicing of the resource.
The first type of interference we studied was the interference within the processor's L2 cache and to server state (disk
head position, cache state, etc.). We designed experiments to quantify these types of interference by running
"benchmark" workloads against other VMs with code designed to be explicitly pessimistic in terms of interference to that
particular benchmark. Our results show that in each case, there can be a non-negligible effect on the benchmark's
performance.
For the cache experiment, we wrote code to continuously write to a large (bigger than the L2 cache) array in one VM to
show how this would interfere with a memory-intensive application in another VM. We looked at the Freebench test suite
[7] because it was freely available and had been used in other VMM performance testing [8]. We selected Freebench's
analyzer benchmark as an application. The analyzer's performance is limited by the memory subsystem, making it a good
candidate for cache interference. It runs a deterministic computation, so we used time-to-completion as our measurement
of performance.
Our experiments compared the runtime of the program versus another VM executing a simple spinloop. Because of this, the
slowdown seen can be attributed directly to cache interference (i.e., its degradation is due to more than simply sharing
half the CPU with another VM). We ran our experiment on several types of Intel® platforms, with varying configurations.
A typical run is shown in Figure 1. As the amount of cache used by our interference-generating application increases,
the slowdown in application performance increases. That a dirty cache slows down an application's execution is not
surprising; however, the application and its OS are completely unaware that the cache is being dirtied, and because they
are running on a VM, typical techniques (e.g., OS task scheduling) are unavailable. With Intel VT features, we are able
to determine the interference and provide that information to higher-level constructs (e.g., the hypervisor scheduler,
or a global orchestration system) as mentioned above.

Figure 1: Performance degradation as cache is increasingly dirtied
click image for larger view
We also ran tests for storage interference. The simplest example entailed two VMs accessing the same disk device, to
most easily demonstrate head-position and disk-cache state (outside the VM). Our results (as in the CPU cache case that
we compared against a simple spinloop VM) showed similar amounts of additional degradationbetween 50% and 90% depending
on the nature of the disk access (sequential/random and character/block).
Virtualization and Service Dependencies
To get the list of critical network services, we consulted with Intel IT's WAN engineers. They reported the following
are the five most critical network services:
-
Exchange*
-
DNS
-
Active Directory*
-
Chip design associated file transfers
-
Web proxy traffic
In addition, we studied the following internal applications:
-
Internet Information Server (IIS*)
-
Apache Web server*
-
SQL server*
-
Oracle
-
Sendmail*
We looked at a number of service orchestrators also. We looked at how Oracle orchestrates its operations, as well as the
IBM/Auremia director*, the HP Workload Manager*, the 3-DNS* and Big IP* load balancers from F5, and Microsoft's Visual
Studio 2005*. To do this, we looked at documentation as well as talked to operational experts within Intel's IT
organization. In addition, we found that some services and applications like DNS, Sendmail, and Active Directory, have
some mechanisms that perform orchestration functions.
We found that service platform dependencies fall into the following categories:
-
Network
-
Host/System
-
Storage
-
Services
We next discuss these dependencies and emphasize the aspects that are typically not covered by service orchestrators. At
the end of each section, we describe constraints that need to be specified by orchestrators to deal with these
dependencies, since these would be additional concerns with provisioning VMs for those services.
Network
We found that services had a number of network dependencies that are not typically dealt with by service orchestrators.
Often these dependencies rely on network topology specifics. One example is the Web proxy service offered by Intel IT.
This service proxies Web traffic between systems on the internal Intel network and the Internet and reduces network
traffic by caching Web pages already fetched. The proxy service maintainers require that a directly connected proxy
(with direct access to the Internet) has a high bandwidth network path to the Internet. For fairly large Intel sites
with low bandwidth links to the Intel® WAN, Intel® IT deploys a proxy server locally and chains this proxy server to
another. While some orchestration specification languages like JSDL [9] allow conditions to be set on network bandwidth,
they do not address network topology.
Intel's DNS service relies on multiple network connections from a site for deployment. Intel sites with only one
connection to the Intel® internal WAN have DNS servers deployed to them. Multiple and reliable network connectivity is a
dependency for the DNS service.
DNS also monitors query latencies and uses them to generate basic orchestration functionality. It records the time it
takes to process queries for a domain and uses the name servers for that domain that respond the fastest. In this case,
network latency is a significant contributor to how the DNS service behaves and partitions work.
Some services want to see a specific number of network interfaces on the platform. Some deployments of the Oracle
database system require three network interfaces. One of the network interfaces is used for heartbeat information
between servers and requires low latency. Other services assume that they have a network interface (or at a minimum, an
IP address on an interface) that can be directly reached at a particular port. This applies to services that use well
known ports, such as Web servers like Apache or Microsoft IIS. While Web servers can do virtual hosting, they assume
that a standard HTTP port is directly reachable, and in a virtualized environment, this implies that there is an IP
address per each VM that runs a Web server. For each IP address, it is assumed that there is a MAC address associated
with that interface, and that there is a way to route packets to each VM.
We define network constraints that we need to manage as follows:
-
Minimum bandwidth between server hosting service and particular points.
-
Topology and availability requirements, in particular minimum availability and/or a minimum number of paths from a
server's location to other locations.
-
Minimum or a specific number of network interfaces.
-
Maximum latency between server and other servers.
Host
We found two notable host dependencies that are not covered by orchestration service specifications. The first is a
dependency on a fixed amount of CPU resources. A commonly used mail forwarding program called Sendmail depends on the
notion of load average to decide whether to queue up mail or whether to reject mail connections. In a virtual
environment where resources are shared equally among VMs, an application cannot be certain whether it will receive the
same amount of CPU resources since other VMs may be assigned to the same physical host it runs on. Thus, using load
average is not an accurate indicator of the available resources.
The second host dependency is non-pageable memory. The Exchange mail service relies on having a significant amount of
memory that cannot be paged out for good performance. While orchestrators allow you to specify how much memory a job or
service may require, there do not seem to be options for non-pageable memory.
Service Affinity/Proximity Requirements
One key service dependency that is not always captured in orchestrators is affinity or proximity to other services. A
good example is Exchange and Active Directory. Exchange requires fast responses from Active Directory. Operationally, an
Active Directory server should be on the same segment as an Exchange server. Deviations from this configuration have
proven disastrous operationally.
An additional aspect of service dependency is the need for a maximum time to complete a service's basic transactions.
DNS operations personnel recommend that DNS queries must be resolved within one second in order to prevent applications
that rely on DNS from hanging.
Storage
Some applications rely on specific platform features. For example, some versions of Oracle require that Oracle write
directly to disk blocks. Other applications, such as Active Directory, require large disk-write caches.
|