[libvirt] [PATCH 7/7] add cpu time to iothreadinfo

Peter Krempa pkrempa at redhat.com
Thu Mar 26 10:18:54 UTC 2015


On Wed, Mar 25, 2015 at 19:39:12 +0100, Ján Tomko wrote:
> Add cpuTime to virDomainIOThreadInfo, fill it out in the qemu driver
> and print it in virsh.
> ---
>  daemon/remote.c                  |  1 +
>  include/libvirt/libvirt-domain.h |  1 +
>  src/qemu/qemu_driver.c           | 10 ++++++++++
>  src/remote/remote_driver.c       |  1 +
>  src/remote/remote_protocol.x     |  1 +
>  src/remote_protocol-structs      |  1 +
>  tools/virsh-domain.c             | 18 ++++++++++++++----
>  7 files changed, 29 insertions(+), 4 deletions(-)
> 
> diff --git a/daemon/remote.c b/daemon/remote.c
> index 2f4df48..1f44ed5 100644
> --- a/daemon/remote.c
> +++ b/daemon/remote.c
> @@ -2317,6 +2317,7 @@ remoteDispatchDomainGetIOThreadInfo(virNetServerPtr server ATTRIBUTE_UNUSED,
>               */
>              dst->cpumap.cpumap_len = info[i]->cpumaplen;
>              dst->cpumap.cpumap_val = (char *)info[i]->cpumap;
> +            dst->cpu_time = info[i]->cpuTime;
>              info[i]->cpumap = NULL;
>          }
>      } else {
> diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-domain.h
> index 7be4219..cca08ca 100644
> --- a/include/libvirt/libvirt-domain.h
> +++ b/include/libvirt/libvirt-domain.h
> @@ -1603,6 +1603,7 @@ struct _virDomainIOThreadInfo {
>      unsigned char *cpumap;             /* CPU map for thread. A pointer to an */
>                                         /* array of real CPUs (in 8-bit bytes) */
>      int cpumaplen;                     /* cpumap size */
> +    unsigned long long cpuTime;        /* CPU time used, in nanoseconds */

Perhaps add a note that 0 is returned for offline VMs?

>  };
>  
>  void                 virDomainIOThreadInfoFree(virDomainIOThreadInfoPtr info);

...

> diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
> index cb9cb9d..929cceb 100644
> --- a/tools/virsh-domain.c
> +++ b/tools/virsh-domain.c

...

> @@ -6875,12 +6875,22 @@ cmdIOThreadInfo(vshControl *ctl, const vshCmd *cmd)
>  
>          vshPrint(ctl, " %-15u ", info[i]->iothread_id);
>          vshPrint(ctl, " %-15s ", mapstr);
> +        if (info[i]->cpuTime != 0) {
> +            double cpuUsed = info[i]->cpuTime;
> +
> +            cpuUsed /= 1000000000.0;
> +
> +            vshPrint(ctl, " %.1lf s ", cpuUsed);
> +        }

Should we print a dash or something when the data is not present?


>          vshPrint(ctl, "\n");
> -        virDomainIOThreadInfoFree(info[i]);
>      }
> -    VIR_FREE(info);
>  
>   cleanup:
> +    if (niothreads > 0) {
> +        for (i = 0; i < niothreads; i++)
> +            virDomainIOThreadInfoFree(info[i]);
> +        VIR_FREE(info);

If you initialize info to NULL when it's defined you can avoid having
the if (niothreads > 0) condition.

> +    }
>      virBitmapFree(map);
>      virDomainFree(dom);
>      return niothreads >= 0;

ACK. I'll not insisting on fixing all the comments, but I'd prefer to
have a dash in the output if CPU time doesn't make sense.

Peter
-------------- 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/20150326/94939a5d/attachment-0001.sig>


More information about the libvir-list mailing list