[libvirt] [PATCH] qemu: domain I/O asynchronous handling
Eric Blake
eblake at redhat.com
Tue Jun 14 16:46:11 UTC 2011
On 06/14/2011 10:18 AM, Michal Privoznik wrote:
> 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 'asyncio' attribute in disk
> and interface <driver> element. It accepts 'on' and 'off'. Leaving this
> attribute out defaults to hypervisor decision.
> ---
> this is rework as suggested:
> https://www.redhat.com/archives/libvir-list/2011-May/msg01269.html
>
> docs/formatdomain.html.in | 34 ++++++++++++-
> docs/schemas/domain.rng | 14 +++++
> src/conf/domain_conf.c | 49 ++++++++++++++++++-
> src/conf/domain_conf.h | 11 ++++
> src/libvirt_private.syms | 2 +
> src/qemu/qemu_capabilities.c | 3 +
> src/qemu/qemu_capabilities.h | 1 +
> src/qemu/qemu_command.c | 23 +++++++++
> tests/qemuhelptest.c | 3 +-
> .../qemuxml2argv-disk-asyncio.args | 11 ++++
> .../qemuxml2argvdata/qemuxml2argv-disk-asyncio.xml | 51 ++++++++++++++++++++
> tests/qemuxml2argvtest.c | 3 +
> 12 files changed, 201 insertions(+), 4 deletions(-)
> create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-asyncio.args
> create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-asyncio.xml
ACK.
> + The optional <code>asyncio</code> attribute allows users to
> + set <a href='https://patchwork.kernel.org/patch/43390/'>
> + domain I/O asynchronous handling</a> for disk device.
> + The default is left to the discretion of the hypervisor.
> + Accepted values are "on" and "off". Enabling this allows
> + qemu to execute VM while a separate thread handles I/O.
> + Typically guests experiencing high system CPU utilization
> + during I/O will benefit from this. On the other hand,
> + on overloaded host it could increase guest I/O latency.
> + <span class="since">Since 0.9.3 (QEMU and KVM only)</span>
> + <b>In general you should leave this option alone, unless you
> + are very certain you know what you are doing.</b>
And nice description.
>
> +static int
> +qemuBuildAsyncIoStr(virBufferPtr buf,
> + enum virDomainAsyncIo use,
> + virBitmapPtr qemuCaps)
> +{
> + if (qemuCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_IOEVENTFD)) {
> + switch (use) {
> + case VIR_DOMAIN_ASYNC_IO_ON:
> + case VIR_DOMAIN_ASYNC_IO_OFF:
> + virBufferAsprintf(buf, ",ioeventfd=%s",
> + virDomainAsyncIoTypeToString(use));
> + break;
> + default:
> + /* In other cases (_DEFAULT, _LAST) we don't
> + * want to add anything */
> + break;
> + }
> + }
I would have avoided the switch statement, and gone with the simpler:
if (use && qemuCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_IOEVENTFD))
virBufferAsprintf(buf, ",ioeventfd=%s",
virDomainAsyncIoTypeToString(use));
which automatically filters out VIR_DOMAIN_ASYNC_IO_DEFAULT, and nothing
in the code should ever be setting the value of 'use' to
VIR_DOMAIN_ASYNC_IO_LAST or greater. But your approach is correct
as-is, so it's up to you if you want to simplify.
--
Eric Blake eblake at redhat.com +1-801-349-2682
Libvirt virtualization library http://libvirt.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 619 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20110614/482993ff/attachment-0001.sig>
More information about the libvir-list
mailing list