Performance test result between virtio_pci MSI-X disable and enable

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

 



Test method:
Send the same traffic load between virtio_pci MSI-X disable and
enable,and compare the cpu rate of host os.
I used the same version of virtio driver, only modify the msi-x option.
the host os version is 2.6.32.
the virtio dirver is from rhel6.
the guest version  os is 2.6.16.

Test result:
with msi-x disable, the cpu rate of host os is 110%.
with msi-x enable, the cpu rate of host os is 140%.

the /proc/interrupt with msi-x disable is below:
           CPU0       CPU1
  0:   12326706          0    IO-APIC-edge  timer
  1:          8          0    IO-APIC-edge  i8042
  8:          0          0    IO-APIC-edge  rtc
  9:          0          0   IO-APIC-level  acpi
 10:    4783008          0   IO-APIC-level  virtio2, virtio3
 11:    5363828          0   IO-APIC-level  virtio1, virtio4, virtio5
 12:        104          0    IO-APIC-edge  i8042
NMI:    2857871    2650796
LOC:   12324952   12325609
ERR:          0
MIS:          0

the /proc/interrupt with msi-x enable is below:
          CPU0       CPU1
 0:    1896802          0    IO-APIC-edge  timer
 1:          8          0    IO-APIC-edge  i8042
 4:         14          0    IO-APIC-edge  serial
 8:          0          0    IO-APIC-edge  rtc
 9:          0          0   IO-APIC-level  acpi
 10:          0          0   IO-APIC-level  virtio1, virtio2, virtio5
 11:          1          0   IO-APIC-level  virtio0, virtio3, virtio4
 12:        104          0    IO-APIC-edge  i8042
 50:          1          0       PCI-MSI-X  virtio2-output
 58:          0          0       PCI-MSI-X  virtio3-config
 66:    2046985          0       PCI-MSI-X  virtio3-input
 74:          2          0       PCI-MSI-X  virtio3-output
 82:          0          0       PCI-MSI-X  virtio4-config
 90:        217          0       PCI-MSI-X  virtio4-input
 98:          0          0       PCI-MSI-X  virtio4-output
177:          0          0       PCI-MSI-X  virtio0-config
185:     341831          0       PCI-MSI-X  virtio0-input
193:          1          0       PCI-MSI-X  virtio0-output
201:          0          0       PCI-MSI-X  virtio1-config
209:     188747          0       PCI-MSI-X  virtio1-input
217:          1          0       PCI-MSI-X  virtio1-output
225:          0          0       PCI-MSI-X  virtio2-config
233:    2204149          0       PCI-MSI-X  virtio2-input
NMI:    1455767    1426226
LOC:    1896099    1896637
ERR:          0
MIS:          0

Code difference:
I disalbe msi-x by modify the function  vp_find_vqs like this:

static int vp_find_vqs(struct virtio_device *vdev, unsigned nvqs,
                      struct virtqueue *vqs[],
                      vq_callback_t *callbacks[],
                      const char *names[])
{

#if 0
       int err;

       /* Try MSI-X with one vector per queue. */
       err = vp_try_to_find_vqs(vdev, nvqs, vqs, callbacks, names, true, true);
       if (!err)
               return 0;
       /* Fallback: MSI-X with one vector for config, one shared for queues. */
       err = vp_try_to_find_vqs(vdev, nvqs, vqs, callbacks, names,
                                true, false);
       if (!err)
               return 0;
       /* Finally fall back to regular interrupts. */
#endif

       return vp_try_to_find_vqs(vdev, nvqs, vqs, callbacks, names,
                                 false, false);
}

Conclusion:
msi-x enable waste more cpu resource is caused by MSIX mask bit. In
older kernels program this bit twice
on every interrupt. and caused ept violation.

So I think we should add a param to control this.with older kernels,
we should disable MSIX.
And I think this should deal by qemu.
--
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