[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