KVM in RHEL 6.1 added support for IOeventFD to improve I/O performance.
libvirt needs a way to selectively enable / disable this feature.
Patch sent upstream:
*) Describe in as much details as possible the requested feature?
In the RHEL6.1 beta, KVM supports ioeventfd for virtio devices and the support is by default enabled
but it needs to be triggered by setting the property "ioeventfd=on|off" for the device parameter of the
qemu-kvm command line, e.g.
/usr/libexec/qemu-kvm -drive file=/dev/sda,id=drive-virtio-disk0 -device virtio-block-pci,ioeventfd=on,drive=drive-virtio-disk0 ...
This RFE is regarding adding support to libvirt so that a VM managed by libvirt can have ioevenfd enabled|disabled for it's virtio devices.
*) Why is this feature important? What use-case will it enable? (List the business requirements here)
This feature would allow to control the ioevenfd feature more easily allowing it to be enabled|disabled without tweaking the command line.
*) Functional requirements for the feature
1) Support enabling of ioeventfd through the libvirt XML description of a VM.
*) For each functional requirement listed in question above, specify how to test to confirm the requirement is successfully implemented.
1) Verify that a VM, for which ioeventfd has been enabled in it's libvirt XML description, indeed has been started
with the necessary command line that will enable ioeventfd for the specified drives.
*) Is there already an existing RFE upstream or in Red Hat bugzilla?
BZ #698340 is about the same feature
*) How quickly does this need resolved? What is the latest date when this needs to be available
*) Does this request meet the RHEL Inclusion criteria (please review)
Yes it does
*) List the affected packages
*) Would the customer be able to assist in testing this functionality if implemented?
Yes the customer is able assist in testing this functionality once it is implemented.
Moving to POST
Author: Michal Privoznik <email@example.com>
Date: Mon Jun 20 10:26:47 2011 +0200
qemu: domain I/O asynchronous handling
For virtio disks and interfaces, qemu allows users to enable or disable
ioeventfd feature. This means, qemu can execute domain code, while
another thread waits for I/O event. Basically, in some cases it is win,
in some loss. This feature is available via 'ioeventfd' attribute in disk
and interface <driver> element. It accepts 'on' and 'off'. Leaving this
attribute out defaults to hypervisor decision.
Verified with following builds, which already been fixed.
# virsh dumpxml test
<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='none' ioeventfd='on'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05'
# ps -ef | grep qemu-kvm
According to comment 7, move this to VERIFIED.
Technical note added. If any revisions are required, please edit the "Technical Notes" field
accordingly. All revisions will be proofread by the Engineering Content Services team.
Casue: Libvirt was not supporting setting ioeventfd feature for virtio disks or interfaces. This feature allows QEMU to register some file descriptors and let kernel to wake it up from poll() instead of actively do polling. Thus, this reduce cpu usage
Consequence: QEMU has higher CPU usage
Change: Libvirt added support for setting this feature in VM definition XML
Result: Users can enable this feature in flavor of lower CPU usage
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.
For information on the advisory, and where to find the updated
files, follow the link below.
If the solution does not work for you, open a new bug report.