[libvirt] [PATCH 3/3] qemu: Report which iothread IDs are actually returned with VIR_DOMAIN_STATS_IOTHREAD
Ján Tomko
jtomko at redhat.com
Fri Nov 29 09:46:47 UTC 2019
On Fri, Nov 29, 2019 at 09:59:28AM +0100, Peter Krempa wrote:
>The design of the stats fields returned for VIR_DOMAIN_STATS_IOTHREAD
>domain statistics groups deviates from the established pattern. In this
>instance it's impossible to infer which values of <id> for
>iothread.<id>... fields will be reported back because they have no
>connection to the iothread.count field.
Knowing it upfront allows the users to construct the parameter name for
the virTypedParamsGet APIs, but processing the returned parameters in
this way seems inefficient - I'd expect any serious user to iterate over
all the params and collect the iothread <id>s which are reported.
>
>Introduce iothread.ids which will report a comma-separated list of <id>s
>reported in the subsequent array in the order they will be reported.
>
Why is the order important? Can it be returned as a stringified bitmap?
>virsh domstats upstream --iothread
>Domain: 'upstream'
> iothread.count=2
> iothread.ids=7,5
> iothread.7.poll-max-ns=32768
> iothread.7.poll-grow=0
> iothread.7.poll-shrink=0
> iothread.5.poll-max-ns=32768
> iothread.5.poll-grow=0
> iothread.5.poll-shrink=0
>
>Signed-off-by: Peter Krempa <pkrempa at redhat.com>
>---
> src/libvirt-domain.c | 2 ++
> src/qemu/qemu_driver.c | 11 +++++++++++
> 2 files changed, 13 insertions(+)
>
>diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
>index 87110036ca..e6d5697445 100644
>--- a/src/libvirt-domain.c
>+++ b/src/libvirt-domain.c
>@@ -11620,6 +11620,8 @@ virConnectGetDomainCapabilities(virConnectPtr conn,
> * will use it's iothread_id value as the <id>. There
> * may be fewer <id> entries than the iothread.count
> * value if the polling values are not supported.
>+ * "iothread.ids" - a comma separated list of iotdread <id>s reported in the
s/iotdread/iothread/
Jano
>+ * subsequent list reported as a string
> * "iothread.<id>.poll-max-ns" - maximum polling time in ns as an unsigned
> * long long. A 0 (zero) means polling is
> * disabled.
>diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
>index b5300241a8..4ccc9d3d4e 100644
>--- a/src/qemu/qemu_driver.c
>+++ b/src/qemu/qemu_driver.c
>@@ -21189,6 +21189,8 @@ qemuDomainGetStatsIOThread(virQEMUDriverPtr driver,
> qemuMonitorIOThreadInfoPtr *iothreads = NULL;
> int niothreads;
> int ret = -1;
>+ g_auto(virBuffer) iothridbuf = VIR_BUFFER_INITIALIZER;
>+ g_autofree char *iothridstr = NULL;
>
> if (!HAVE_JOB(privflags) || !virDomainObjIsActive(dom))
> return 0;
>@@ -21205,6 +21207,15 @@ qemuDomainGetStatsIOThread(virQEMUDriverPtr driver,
> if (virTypedParamListAddUInt(params, niothreads, "iothread.count") < 0)
> goto cleanup;
>
>+ for (i = 0; i < niothreads; i++)
>+ virBufferAsprintf(&iothridbuf, "%u,", iothreads[i]->iothread_id);
>+
>+ virBufferTrim(&iothridbuf, ",", -1);
>+ iothridstr = virBufferContentAndReset(&iothridbuf);
>+
>+ if (virTypedParamListAddString(params, iothridstr, "iothread.ids") < 0)
>+ goto cleanup;
>+
> for (i = 0; i < niothreads; i++) {
> if (iothreads[i]->poll_valid) {
> if (virTypedParamListAddULLong(params, iothreads[i]->poll_max_ns,
>--
>2.23.0
>
>--
>libvir-list mailing list
>libvir-list at redhat.com
>https://www.redhat.com/mailman/listinfo/libvir-list
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20191129/c0562978/attachment-0001.sig>
More information about the libvir-list
mailing list