[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