Performace data when running Windows VMs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I recently gathered some performance data when running Windows Server
2008 VMs, and I wanted to share it here.  There are 12 Windows
Server2008 64-bit VMs (1 vcpu, 2 GB) running which handle the concurrent
execution of 6 J2EE type benchmarks.  Each benchmark needs a App VM and
a Database VM.  The benchmark clients inject a fixed rate of requests
which yields X% CPU utilization on the host.  A different hypervisor was
compared; KVM used about 60% more CPU cycles to complete the same amount
of work.  Both had their hypervisor specific paravirt IO drivers in the
VMs.

Server is a 2 socket Core/i7, SMT off, with 72 GB memory

Host kernel used was kvm.git v2.6.31-rc3-3419-g6df4865
Qemu was kvm-87.  I tried a few newer versions of Qemu; none of them
worked with the RedHat virtIO Windows drivers.  I tried:

f3600c589a9ee5ea4c0fec74ed4e06a15b461d52
0.11.0-rc1
0.10.6
kvm-88

All but 0.10.6 had "Problem code 10" driver error in the VM.  0.10.6 had
"a disk read error occurred" very early in the booting of the VM.

I/O on the host was not what I would call very high:  outbound network
averaged at 163 Mbit/s inbound was 8 Mbit/s, while disk read ops was
243/sec and write ops was 561/sec

Host CPU breakdown was the following:

user  nice  system irq  softirq guest  idle  iowait
5.67  0.00  11.64  0.09 1.05    31.90  46.06 3.59


The amount of kernel time had me concerned.  Here is oprofile:


> samples  %        app name                 symbol name
> 1163422  52.3744  kvm-intel.ko             vmx_vcpu_run
> 103996    4.6816  vmlinux-2.6.31-rc5-v2.6.31-rc3-3419-g6df4865-autokern1 native_set_debugreg
> 81036     3.6480  kvm.ko                   kvm_arch_vcpu_ioctl_run
> 37913     1.7068  qemu-system-x86_64       cpu_physical_memory_rw
> 34720     1.5630  qemu-system-x86_64       phys_page_find_alloc
> 23234     1.0459  vmlinux-2.6.31-rc5-v2.6.31-rc3-3419-g6df4865-autokern1 native_write_msr_safe
> 20964     0.9437  vmlinux-2.6.31-rc5-v2.6.31-rc3-3419-g6df4865-autokern1 native_get_debugreg
> 17628     0.7936  libc-2.5.so              memcpy
> 16587     0.7467  vmlinux-2.6.31-rc5-v2.6.31-rc3-3419-g6df4865-autokern1 __down_read
> 15681     0.7059  vmlinux-2.6.31-rc5-v2.6.31-rc3-3419-g6df4865-autokern1 __up_read
> 15466     0.6962  kvm.ko                   find_highest_vector
> 14611     0.6578  qemu-system-x86_64       qemu_get_ram_ptr
> 11254     0.5066  kvm-intel.ko             vmcs_writel
> 11133     0.5012  vmlinux-2.6.31-rc5-v2.6.31-rc3-3419-g6df4865-autokern1 copy_user_generic_string
> 10917     0.4915  vmlinux-2.6.31-rc5-v2.6.31-rc3-3419-g6df4865-autokern1 native_read_msr_safe
> 10760     0.4844  qemu-system-x86_64       virtqueue_get_head
> 9025      0.4063  kvm-intel.ko             vmx_handle_exit
> 8953      0.4030  vmlinux-2.6.31-rc5-v2.6.31-rc3-3419-g6df4865-autokern1 schedule
> 8753      0.3940  vmlinux-2.6.31-rc5-v2.6.31-rc3-3419-g6df4865-autokern1 fget_light
> 8465      0.3811  qemu-system-x86_64       virtqueue_avail_bytes
> 8185      0.3685  kvm-intel.ko             handle_cr
> 8069      0.3632  kvm.ko                   kvm_set_irq
> 7697      0.3465  kvm.ko                   kvm_lapic_sync_from_vapic
> 7586      0.3415  qemu-system-x86_64       main_loop_wait
> 7480      0.3367  vmlinux-2.6.31-rc5-v2.6.31-rc3-3419-g6df4865-autokern1 do_select
> 7121      0.3206  qemu-system-x86_64       lduw_phys
> 7003      0.3153  vmlinux-2.6.31-rc5-v2.6.31-rc3-3419-g6df4865-autokern1 audit_syscall_exit
> 6062      0.2729  vmlinux-2.6.31-rc5-v2.6.31-rc3-3419-g6df4865-autokern1 kfree
> 5477      0.2466  vmlinux-2.6.31-rc5-v2.6.31-rc3-3419-g6df4865-autokern1 fput
> 5454      0.2455  kvm.ko                   kvm_lapic_get_cr8
> 5096      0.2294  kvm.ko                   kvm_load_guest_fpu
> 5057      0.2277  kvm.ko                   apic_update_ppr
> 4929      0.2219  vmlinux-2.6.31-rc5-v2.6.31-rc3-3419-g6df4865-autokern1 up_read
> 4900      0.2206  vmlinux-2.6.31-rc5-v2.6.31-rc3-3419-g6df4865-autokern1 audit_syscall_entry
> 4866      0.2191  kvm.ko                   kvm_apic_has_interrupt
> 4670      0.2102  kvm-intel.ko             skip_emulated_instruction
> 4644      0.2091  kvm.ko                   kvm_cpu_has_interrupt
> 4548      0.2047  vmlinux-2.6.31-rc5-v2.6.31-rc3-3419-g6df4865-autokern1 __switch_to
> 4328      0.1948  kvm.ko                   kvm_apic_accept_pic_intr
> 4303      0.1937  libpthread-2.5.so        pthread_mutex_lock
> 4235      0.1906  vmlinux-2.6.31-rc5-v2.6.31-rc3-3419-g6df4865-autokern1 system_call
> 4175      0.1879  kvm.ko                   kvm_put_guest_fpu
> 4170      0.1877  qemu-system-x86_64       ldl_phys
> 4098      0.1845  kvm-intel.ko             vmx_set_interrupt_shadow
> 4003      0.1802  qemu-system-x86_64       kvm_run

I was wondering why the get/set debugreg was so high.  I don't recall
seeing this much with Linux VMs.

Here is an average of kvm_stat:


> efer_relo  0
> exits      1262814
> fpu_reloa  103842
> halt_exit  9918
> halt_wake  9763
> host_stat  103846
> hypercall  0
> insn_emul  23277
> insn_emul  23277
> invlpg     0
> io_exits   82717
> irq_exits  12797
> irq_injec  18806
> irq_windo  1194
> largepage  12
> mmio_exit  0
> mmu_cache  0
> mmu_flood  0
> mmu_pde_z  0
> mmu_pte_u  0
> mmu_pte_w  0
> mmu_recyc  0
> mmu_shado  0
> mmu_unsyn  0
> nmi_injec  0
> nmi_windo  0
> pf_fixed   12
> pf_guest   0
> remote_tl  0
> request_i  0
> signal_ex  0
> tlb_flush  0

For 12 VMs, do the number of exits/sec seem reasonable?

Comments?

Thanks,

-Andrew

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux