[libvirt] [PATCH 2/4] qemu: Add support for iothreads
John Ferlan
jferlan at redhat.com
Tue Aug 26 10:43:27 UTC 2014
On 08/26/2014 01:03 AM, Martin Kletzander wrote:
> 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>
>
hmm... so how is this different then say perhaps
QEMU_CAPS_OBJECT_RNG_RANDOM, QEMU_CAPS_OBJECT_MEMORY_RAM or
QEMU_CAPS_OBJECT_MEMORY_FILE which each eventually uses "-object" to
build it's part of the command line
>> );
>>
>>
>> @@ -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.
>
Hmm.. I wasn't completely sure where to put this - it's not overly
clear which of the various capabilities structures should be used for
what reason. Although I guess since the above named flags are in
ObjectTypes I suppose I should have used it. I'll move 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).
Using 'libvirt' as the prefix for "iothread" was more of a convention to
make sure it was clear what created it. I can go with the shorter name
and initially had done so.
John
More information about the libvir-list
mailing list