[libvirt] [PATCH 2/4] qemu: Add support for iothreads

Martin Kletzander mkletzan at redhat.com
Tue Aug 26 05:03:35 UTC 2014


On Mon, Aug 25, 2014 at 08:38:07PM -0400, John Ferlan wrote:
>Add a new capability to ensure the iothreads feature exists for the qemu
>emulator being run - requires the "query-iothreads" QMP command. Using the
>domain XML add correspoding command argument in order to generate the
>threads. The iothreads will use a name space "libvirtIothread#" where, the
>future patch to add support for using an iothread to a disk definition to
>merely define which of the available threads to use.
>
>Add tests to ensure the xml/argv processing is correct.  Note that no
>change was made to qemuargv2xmltest.c as processing the -object element
>would require knowing more than just iothreads.
>
>Signed-off-by: John Ferlan <jferlan at redhat.com>
>---
> src/qemu/qemu_capabilities.c                       |  2 ++
> src/qemu/qemu_capabilities.h                       |  1 +
> src/qemu/qemu_command.c                            | 13 ++++++++++
> tests/qemuxml2argvdata/qemuxml2argv-iothreads.args |  8 ++++++
> tests/qemuxml2argvdata/qemuxml2argv-iothreads.xml  | 29 ++++++++++++++++++++++
> tests/qemuxml2argvtest.c                           |  2 ++
> tests/qemuxml2xmltest.c                            |  1 +
> 7 files changed, 56 insertions(+)
> create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-iothreads.args
> create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-iothreads.xml
>
>diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
>index 410086b..b331be7 100644
>--- a/src/qemu/qemu_capabilities.c
>+++ b/src/qemu/qemu_capabilities.c
>@@ -268,6 +268,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
>               "rtc-reset-reinjection",
>
>               "splash-timeout", /* 175 */
>+              "query-iothreads",

Why "query-" when the capability is _OBJECT_?  Or is this just a typo?
</bikeshed>

>     );
>
>
>@@ -1430,6 +1431,7 @@ struct virQEMUCapsStringFlags virQEMUCapsCommands[] = {
>     { "nbd-server-start", QEMU_CAPS_NBD_SERVER },
>     { "change-backing-file", QEMU_CAPS_CHANGE_BACKING_FILE },
>     { "rtc-reset-reinjection", QEMU_CAPS_RTC_RESET_REINJECTION },
>+    { "query-iothreads", QEMU_CAPS_OBJECT_IOTHREAD},

We have virQEMUCapsObjectTypes[] where you can just stick the name of
the object you want to test, and not rely on a related command to
probe for it.

> };
>
> struct virQEMUCapsStringFlags virQEMUCapsEvents[] = {
>diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
>index 48a4eaa..0980c00 100644
>--- a/src/qemu/qemu_capabilities.h
>+++ b/src/qemu/qemu_capabilities.h
>@@ -215,6 +215,7 @@ typedef enum {
>     QEMU_CAPS_OBJECT_USB_AUDIO   = 173, /* usb-audio device support */
>     QEMU_CAPS_RTC_RESET_REINJECTION = 174, /* rtc-reset-reinjection monitor command */
>     QEMU_CAPS_SPLASH_TIMEOUT     = 175, /* -boot splash-time */
>+    QEMU_CAPS_OBJECT_IOTHREAD    = 176, /* -object iothread */
>
>     QEMU_CAPS_LAST,                   /* this must always be the last item */
> } virQEMUCapsFlags;
>diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
>index 6dac9d3..287a3f3 100644
>--- a/src/qemu/qemu_command.c
>+++ b/src/qemu/qemu_command.c
>@@ -7510,6 +7510,19 @@ qemuBuildCommandLine(virConnectPtr conn,
>     virCommandAddArg(cmd, smp);
>     VIR_FREE(smp);
>
>+    if (def->iothreads > 0 &&
>+        virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_IOTHREAD)) {
>+        /* Create named iothread objects starting with 1. These may be used
>+         * by a disk definition which will associate to an iothread by
>+         * supplying a value of 1 up to the number of iothreads available
>+         * (since 0 would indicate to not use the feature).
>+         */
>+        for (i = 1; i <= def->iothreads; i++) {
>+            virCommandAddArg(cmd, "-object");
>+            virCommandAddArgFormat(cmd, "iothread,id=libvirtIothread%zu", i);

I don't see we would use 'libvirt*' naming for any other IDs,
'iothread%zu' would be enough, I guess (and the command-line wouldn't
be so long as well).

Martin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20140826/9ee65373/attachment-0001.sig>


More information about the libvir-list mailing list