Java Performance on vSphere 4

VMware ESX is an excellent platform for deploying Java applications. Many customers use it to support Java applications from the desktop to business-critical enterprise servers.  However, we haven’t published any results recently highlighting the excellent performance of Java applications on VMware ESX.  As a first step at remedying this situation, we compared native and virtualized
performance using SPECjvm2008.  This workload is a benchmark suite containing several real-life applications and benchmarks focusing on core java functionality. The results demonstrate that Java applications run on VMware vSphere at greater than 94% of native performance over a range of VM sizes.  This is up to a 9% improvement over VMware ESX 3.5, which already runs this workload at close to or better than 90% of native performance.

We ran SPECjvm2008 on Red Hat Enterprise Server 5 Update 3 using the latest JVM from Sun Microsystems, JRE 1.6 Update 13.  Tests were conducted with both 32-bit and 64-bit  versions of the OS and JVM.  An HP DL380G5 equipped with two quad-core Intel Xeon X5460 (Harpertown) processors running at 3.16GHz was used.  This server had 32GB of memory.  For native runs using less than the full number of available CPU cores, we used the kernel boot parameter maxcpus= to limit the OS to a given
number of cores.  We also used the kernel boot parameter mem= to limit the memory to 16GB in all 64-bit runs.  The
runs on VMware vSphere 4.0 and VMware ESX 3.5 Update 4 were done in virtual machines (VMs) using the stated number of virtual CPU s and 16GB of memory.

The runs of SPECjvm2008 were all base runs, meaning that no Java tuning parameters were used.   All SPECjvm2008 results are required to include a base run.  Unfortunately, the default heap size of the Sun JVM in the 1 CPU case is not large enough to run the SPECjvm2008 workload.  As a result, we were not able to generate 1 CPU results which would be compliant with the run-rules for SPECjvm2008.  We did generate native and vSphere 4.0 results for 2, 4, and 8 CPUs, and ESX 3.5 results for 2 and 4 CPUs.

Figure 1 shows the SPECjvm2008 results for the native, VMware vSphere 4.0, and VMware ESX 3.5 cases. Figure 2 presents the same results normalized to the native result for that server and CPU count.  These results show that VMs running on VMware vSphere 4.0 perform at greater than 95% of native on this benchmark at all VM sizes. Even with 8 vCPUs running on a server with only 8 physical cores, the vSphere 4.0 VM achieves 99% of native performance. The VMware ESX 3.5 VMs ran at close to or greater than 90% of native, which is still excellent for a virtualized environment. However, for 64-bit VMs, vSphere 4.0 gives a performance improvement over ESX 3.5U4 of 9% in the 4 vCPU case, and about 3% in the 2 vCPU case.

Figure 1 SPECjvm2008 on 8-Core Intel Harpertown Server



Figure 2 SPECjvm2008 performance relative to native



In order to check the native results, we compared the 8-Core Harpertown result using the 64-bit OS and JVM to the closest published result. There is no directly comparable result, but there is a result generated by Sun on a 16-Core Intel Tigerton Server.
The Tigerton is architecturally similar to the Harpertown, but the Harpertown has a larger L2 cache.  The Sun 16-core Tigerton result, using Solaris 10, a special performance build of the Sun JVM (1.6.0_06p), and 64GB of memory, achieved 260 SPECjvm2008
ops/m.   Our native result on the 8-core Harpertown  with 16GB of memory was  145 SPECjvm2008 ops/m.   A native run on the Harpertown with 32GB and using the Sun 1.6.0_06p JVM achieved 174 SPECjvm2008 ops/m.  This is well more than half of the Tigerton result, and indicates that our native configuration is producing reasonable results.

Figure 3 shows the scaling of the results as we move from 2 to 4 and 8 CPUs for the 64-bit case.  The scaling is essentially the same for 32-bit.  The results are normalized to the 2 CPU results on the same platform. These results show that VMware vSphere 4.0 scales as well as or better than native for this workload.  VMware ESX 3.5 scaling is just slightly below native.

Figure 3 SPECjvm2008 Scaling from 2 CPUs



The SPECjvm2008 results presented here show that core Java functionality runs extremely well on VMware vSphere 4.0 and VMware ESX 3.5.  No special tuning was required to get results that are remarkably close to native performance.  We hope to soon produce additional results to demonstrate that this excellent performance extends to multi-tier Java Enterprise Edition applications as well.  For comments or questions, please join us in the VMware Performance Community at this thread:  http://communities.vmware.com/message/1262696