[libvirt] [PATCH 3/6] Make qemuGetDomainTotalCPUStats a virCgroup function.

Gao feng gaofeng at cn.fujitsu.com
Wed Jan 15 07:22:48 UTC 2014


On 01/15/2014 07:23 AM, Thorsten Behrens wrote:
> To reuse this from other drivers, like lxc.
> ---
>  src/libvirt_private.syms |  1 +
>  src/qemu/qemu_driver.c   | 54 ++----------------------------------------------
>  src/util/vircgroup.c     | 53 +++++++++++++++++++++++++++++++++++++++++++++++
>  src/util/vircgroup.h     |  5 +++++
>  4 files changed, 61 insertions(+), 52 deletions(-)
> 
> diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
> index edbf6ba..048d9a0 100644
> --- a/src/libvirt_private.syms
> +++ b/src/libvirt_private.syms
> @@ -1014,6 +1014,7 @@ virCgroupGetCpuCfsQuota;
>  virCgroupGetCpusetCpus;
>  virCgroupGetCpusetMems;
>  virCgroupGetCpuShares;
> +virCgroupGetDomainTotalCPUStats;

please change virCgroupGetDomainTotalCPUStats to virCgroupGetDomainTotalCpuStats
the other part looks good to me.

>  virCgroupGetFreezerState;
>  virCgroupGetMemoryHardLimit;
>  virCgroupGetMemorySoftLimit;
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 1949abe..2d92873 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -105,7 +105,6 @@
>  
>  #define QEMU_NB_NUMA_PARAM 2
>  
> -#define QEMU_NB_TOTAL_CPU_STAT_PARAM 3
>  #define QEMU_NB_PER_CPU_STAT_PARAM 2
>  
>  #define QEMU_SCHED_MIN_PERIOD              1000LL
> @@ -15302,56 +15301,6 @@ cleanup:
>      return ret;
>  }
>  
> -/* qemuDomainGetCPUStats() with start_cpu == -1 */
> -static int
> -qemuDomainGetTotalcpuStats(virDomainObjPtr vm,
> -                           virTypedParameterPtr params,
> -                           int nparams)
> -{
> -    unsigned long long cpu_time;
> -    int ret;
> -    qemuDomainObjPrivatePtr priv = vm->privateData;
> -
> -    if (nparams == 0) /* return supported number of params */
> -        return QEMU_NB_TOTAL_CPU_STAT_PARAM;
> -    /* entry 0 is cputime */
> -    ret = virCgroupGetCpuacctUsage(priv->cgroup, &cpu_time);
> -    if (ret < 0) {
> -        virReportSystemError(-ret, "%s", _("unable to get cpu account"));
> -        return -1;
> -    }
> -
> -    if (virTypedParameterAssign(&params[0], VIR_DOMAIN_CPU_STATS_CPUTIME,
> -                                VIR_TYPED_PARAM_ULLONG, cpu_time) < 0)
> -        return -1;
> -
> -    if (nparams > 1) {
> -        unsigned long long user;
> -        unsigned long long sys;
> -
> -        ret = virCgroupGetCpuacctStat(priv->cgroup, &user, &sys);
> -        if (ret < 0) {
> -            virReportSystemError(-ret, "%s", _("unable to get cpu account"));
> -            return -1;
> -        }
> -
> -        if (virTypedParameterAssign(&params[1],
> -                                    VIR_DOMAIN_CPU_STATS_USERTIME,
> -                                    VIR_TYPED_PARAM_ULLONG, user) < 0)
> -            return -1;
> -        if (nparams > 2 &&
> -            virTypedParameterAssign(&params[2],
> -                                    VIR_DOMAIN_CPU_STATS_SYSTEMTIME,
> -                                    VIR_TYPED_PARAM_ULLONG, sys) < 0)
> -            return -1;
> -
> -        if (nparams > QEMU_NB_TOTAL_CPU_STAT_PARAM)
> -            nparams = QEMU_NB_TOTAL_CPU_STAT_PARAM;
> -    }
> -
> -    return nparams;
> -}
> -
>  /* This function gets the sums of cpu time consumed by all vcpus.
>   * For example, if there are 4 physical cpus, and 2 vcpus in a domain,
>   * then for each vcpu, the cpuacct.usage_percpu looks like this:
> @@ -15550,7 +15499,8 @@ qemuDomainGetCPUStats(virDomainPtr domain,
>      }
>  
>      if (start_cpu == -1)
> -        ret = qemuDomainGetTotalcpuStats(vm, params, nparams);
> +        ret = virCgroupGetDomainTotalCPUStats(priv->cgroup,
> +                                              params, nparams);
>      else
>          ret = qemuDomainGetPercpuStats(vm, params, nparams,
>                                         start_cpu, ncpus);
> diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
> index 1a579f0..e02b473 100644
> --- a/src/util/vircgroup.c
> +++ b/src/util/vircgroup.c
> @@ -51,11 +51,14 @@
>  #include "virhashcode.h"
>  #include "virstring.h"
>  #include "virsystemd.h"
> +#include "virtypedparam.h"
>  
>  #define CGROUP_MAX_VAL 512
>  
>  #define VIR_FROM_THIS VIR_FROM_CGROUP
>  
> +#define CGROUP_NB_TOTAL_CPU_STAT_PARAM 3
> +
>  #if defined(__linux__) && defined(HAVE_GETMNTENT_R) && \
>      defined(_DIRENT_HAVE_D_TYPE) && defined(_SC_CLK_TCK)
>  # define VIR_CGROUP_SUPPORTED
> @@ -2603,6 +2606,56 @@ virCgroupDenyDevicePath(virCgroupPtr group, const char *path, int perms)
>  }
>  
>  
> +
> +int
> +virCgroupGetDomainTotalCPUStats(virCgroupPtr group,
> +                                virTypedParameterPtr params,
> +                                int nparams)
> +{
> +    unsigned long long cpu_time;
> +    int ret;
> +
> +    if (nparams == 0) /* return supported number of params */
> +        return CGROUP_NB_TOTAL_CPU_STAT_PARAM;
> +    /* entry 0 is cputime */
> +    ret = virCgroupGetCpuacctUsage(group, &cpu_time);
> +    if (ret < 0) {
> +        virReportSystemError(-ret, "%s", _("unable to get cpu account"));
> +        return -1;
> +    }
> +
> +    if (virTypedParameterAssign(&params[0], VIR_DOMAIN_CPU_STATS_CPUTIME,
> +                                VIR_TYPED_PARAM_ULLONG, cpu_time) < 0)
> +        return -1;
> +
> +    if (nparams > 1) {
> +        unsigned long long user;
> +        unsigned long long sys;
> +
> +        ret = virCgroupGetCpuacctStat(group, &user, &sys);
> +        if (ret < 0) {
> +            virReportSystemError(-ret, "%s", _("unable to get cpu account"));
> +            return -1;
> +        }
> +
> +        if (virTypedParameterAssign(&params[1],
> +                                    VIR_DOMAIN_CPU_STATS_USERTIME,
> +                                    VIR_TYPED_PARAM_ULLONG, user) < 0)
> +            return -1;
> +        if (nparams > 2 &&
> +            virTypedParameterAssign(&params[2],
> +                                    VIR_DOMAIN_CPU_STATS_SYSTEMTIME,
> +                                    VIR_TYPED_PARAM_ULLONG, sys) < 0)
> +            return -1;
> +
> +        if (nparams > CGROUP_NB_TOTAL_CPU_STAT_PARAM)
> +            nparams = CGROUP_NB_TOTAL_CPU_STAT_PARAM;
> +    }
> +
> +    return nparams;
> +}
> +
> +
>  int
>  virCgroupSetCpuShares(virCgroupPtr group, unsigned long long shares)
>  {
> diff --git a/src/util/vircgroup.h b/src/util/vircgroup.h
> index cd6b27b..f30dbcb 100644
> --- a/src/util/vircgroup.h
> +++ b/src/util/vircgroup.h
> @@ -185,6 +185,11 @@ int virCgroupDenyDevicePath(virCgroupPtr group,
>                              const char *path,
>                              int perms);
>  
> +int
> +virCgroupGetDomainTotalCPUStats(virCgroupPtr group,
> +                                virTypedParameterPtr params,
> +                                int nparams);
> +
>  int virCgroupSetCpuShares(virCgroupPtr group, unsigned long long shares);
>  int virCgroupGetCpuShares(virCgroupPtr group, unsigned long long *shares);
>  
> 




More information about the libvir-list mailing list