[libvirt] [PATCHv5 1/2] Add a new param 'vcpu_time' to virDomainGetCPUStats

Hu Tao hutao at cn.fujitsu.com
Fri May 18 09:08:44 UTC 2012


On Thu, May 17, 2012 at 03:56:47PM -0600, Eric Blake wrote:
> From: Hu Tao <hutao at cn.fujitsu.com>
> 
> Currently virDomainGetCPUStats gets total cpu usage, which consists
> of:
> 
>   1. vcpu usage: the physical cpu time consumed by virtual cpu(s) of
>      domain
>   2. hypervisor: `total cpu usage' - `vcpu usage'
> 
> The param 'vcpu_time' is for getting vcpu usages.
> ---
> 
> diff from v4: minor cleanups, per review
> 
>  include/libvirt/libvirt.h.in |   10 +++++++++-
>  tools/virsh.c                |   14 ++++++++------
>  2 files changed, 17 insertions(+), 7 deletions(-)
> 
> diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
> index ac5df95..a817db8 100644
> --- a/include/libvirt/libvirt.h.in
> +++ b/include/libvirt/libvirt.h.in
> @@ -1339,7 +1339,8 @@ int                     virDomainGetState       (virDomainPtr domain,
> 
>  /**
>   * VIR_DOMAIN_CPU_STATS_CPUTIME:
> - * cpu usage in nanoseconds, as a ullong
> + * cpu usage (sum of both vcpu and hypervisor usage) in nanoseconds,
> + * as a ullong
>   */
>  #define VIR_DOMAIN_CPU_STATS_CPUTIME "cpu_time"
> 
> @@ -1355,6 +1356,13 @@ int                     virDomainGetState       (virDomainPtr domain,
>   */
>  #define VIR_DOMAIN_CPU_STATS_SYSTEMTIME "system_time"
> 
> +/**
> + * VIR_DOMAIN_CPU_STATS_VCPUTIME:
> + * vcpu usage in nanoseconds (cpu_time excluding hypervisor time),
> + * as a ullong
> + */
> +#define VIR_DOMAIN_CPU_STATS_VCPUTIME "vcpu_time"
> +
>  int virDomainGetCPUStats(virDomainPtr domain,
>                           virTypedParameterPtr params,
>                           unsigned int nparams,
> diff --git a/tools/virsh.c b/tools/virsh.c
> index 08b3854..46239fa 100644
> --- a/tools/virsh.c
> +++ b/tools/virsh.c
> @@ -5572,6 +5572,7 @@ cmdCPUStats(vshControl *ctl, const vshCmd *cmd)
>      virTypedParameterPtr params = NULL;
>      int i, j, pos, max_id, cpu = -1, show_count = -1, nparams;
>      bool show_total = false, show_per_cpu = false;
> +    unsigned int flags = 0;
> 
>      if (!vshConnectionUsability(ctl, ctl->conn))
>          return false;
> @@ -5599,13 +5600,13 @@ cmdCPUStats(vshControl *ctl, const vshCmd *cmd)
>          cpu = 0;
> 
>      /* get number of cpus on the node */
> -    if ((max_id = virDomainGetCPUStats(dom, NULL, 0, 0, 0, 0)) < 0)
> +    if ((max_id = virDomainGetCPUStats(dom, NULL, 0, 0, 0, flags)) < 0)
>          goto failed_stats;
>      if (show_count < 0 || show_count > max_id)
>          show_count = max_id;
> 
>      /* get percpu information */
> -    if ((nparams = virDomainGetCPUStats(dom, NULL, 0, 0, 1, 0)) < 0)
> +    if ((nparams = virDomainGetCPUStats(dom, NULL, 0, 0, 1, flags)) < 0)
>          goto failed_stats;
> 
>      if (!nparams) {
> @@ -5619,7 +5620,7 @@ cmdCPUStats(vshControl *ctl, const vshCmd *cmd)
>      while (show_count) {
>          int ncpus = MIN(show_count, 128);
> 
> -        if (virDomainGetCPUStats(dom, params, nparams, cpu, ncpus, 0) < 0)
> +        if (virDomainGetCPUStats(dom, params, nparams, cpu, ncpus, flags) < 0)
>              goto failed_stats;
> 
>          for (i = 0; i < ncpus; i++) {
> @@ -5630,7 +5631,8 @@ cmdCPUStats(vshControl *ctl, const vshCmd *cmd)
>              for (j = 0; j < nparams; j++) {
>                  pos = i * nparams + j;
>                  vshPrint(ctl, "\t%-12s ", params[pos].field);
> -                if (STREQ(params[pos].field, VIR_DOMAIN_CPU_STATS_CPUTIME) &&
> +                if ((STREQ(params[pos].field, VIR_DOMAIN_CPU_STATS_CPUTIME) ||
> +                     STREQ(params[pos].field, VIR_DOMAIN_CPU_STATS_VCPUTIME)) &&
>                      params[j].type == VIR_TYPED_PARAM_ULLONG) {
>                      vshPrint(ctl, "%9lld.%09lld seconds\n",
>                               params[pos].value.ul / 1000000000,
> @@ -5653,7 +5655,7 @@ do_show_total:
>          goto cleanup;
> 
>      /* get supported num of parameter for total statistics */
> -    if ((nparams = virDomainGetCPUStats(dom, NULL, 0, -1, 1, 0)) < 0)
> +    if ((nparams = virDomainGetCPUStats(dom, NULL, 0, -1, 1, flags)) < 0)
>          goto failed_stats;
> 
>      if (!nparams) {
> @@ -5665,7 +5667,7 @@ do_show_total:
>          goto failed_params;
> 
>      /* passing start_cpu == -1 gives us domain's total status */
> -    if ((nparams = virDomainGetCPUStats(dom, params, nparams, -1, 1, 0)) < 0)
> +    if ((nparams = virDomainGetCPUStats(dom, params, nparams, -1, 1, flags)) < 0)
>          goto failed_stats;
> 
>      vshPrint(ctl, _("Total:\n"));
> -- 
> 1.7.7.6

ACK.

-- 
Thanks,
Hu Tao




More information about the libvir-list mailing list