We have an in-house app, written in c, that is not performing as well as we'd 
hoped it would when moving to a VM. We've tried all the common tuning 
recommendations (virtio, tap interface, cpu pining), without any change in 
performance. Even terminating all of the other VMs on the host doesn't make a 
difference. The VM doesn't appear to be CPU, memory or IO bound. We are trying 
to maximize UDP-based QPS against the in-house app.

I've been running strace against the app and "perf kvm" against the VM to try 
to identify any bottlenecks. I would say there are a lot of kvm_exits, but I'm 
not sure how to quantify what is acceptable and what is not.

We are trying to maximize UDP queries against the app. I've read a few times 
that the virtio network stack results in a lot of vm_exits. Unfortunately, we 
can't use the direct PCI access with our hardware.

Is there a good resource "inefficient" system calls? Things that result in 
higher than normal kvm_exits, or other performance killers?

Thanks for the help.

Our hypdervisor is running on
CentOS 6.3: 2.6.32-279.22.1.el6.x86_64
qemu-kvm 0.12.1.2  
libvirt 0.9.10

Our app is running on
Centos 6.1: 2.6.32-131.0.15.el6.x86_64

<domain type='kvm'>
  <name>thing1</name>
  <uuid>abe76ce9-60a0-4727-a7ae-cf572e5c3f21</uuid>
  <memory unit='KiB'>16384000</memory>
  <currentMemory unit='KiB'>16384000</currentMemory>
  <vcpu placement='static'>6</vcpu>
  <cputune>
    <vcpupin vcpu='0' cpuset='0'/>
    <vcpupin vcpu='1' cpuset='2'/>
    <vcpupin vcpu='2' cpuset='4'/>
    <vcpupin vcpu='3' cpuset='6'/>
    <vcpupin vcpu='4' cpuset='8'/>
    <vcpupin vcpu='5' cpuset='10'/>
  </cputune>
  <numatune>
    <memory mode='interleave' nodeset='0,2,4,6,8,10'/>
  </numatune>
  <os>
    <type arch='x86_64' machine='rhel6.0.0'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw' cache='none'/>
      <source file='/var/lib/libvirt/images/thing1-disk0'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' 
function='0x0'/>
    </disk>
    <controller type='usb' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' 
function='0x2'/>
    </controller>
    <interface type='bridge'>
      <mac address='00:5e:e3:e1:8a:aa'/>
      <source bridge='virbr0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' 
function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <input type='tablet' bus='usb'/>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport='yes' keymap='en-us'/>
    <video>
      <model type='cirrus' vram='9216' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' 
function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' 
function='0x0'/>
    </memballoon>
  </devices>
</domain>

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

Reply via email to