mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-20 07:59:00 +00:00
Make qemuGetDomainTotalCPUStats a virCgroup function.
To reuse this from other drivers, like lxc.
This commit is contained in:
parent
192604ddee
commit
65158899b7
@ -1025,6 +1025,7 @@ virCgroupGetCpuCfsQuota;
|
||||
virCgroupGetCpusetCpus;
|
||||
virCgroupGetCpusetMems;
|
||||
virCgroupGetCpuShares;
|
||||
virCgroupGetDomainTotalCpuStats;
|
||||
virCgroupGetFreezerState;
|
||||
virCgroupGetMemoryHardLimit;
|
||||
virCgroupGetMemorySoftLimit;
|
||||
|
@ -106,7 +106,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
|
||||
@ -15903,56 +15902,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(¶ms[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(¶ms[1],
|
||||
VIR_DOMAIN_CPU_STATS_USERTIME,
|
||||
VIR_TYPED_PARAM_ULLONG, user) < 0)
|
||||
return -1;
|
||||
if (nparams > 2 &&
|
||||
virTypedParameterAssign(¶ms[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:
|
||||
@ -16150,7 +16099,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);
|
||||
|
@ -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
|
||||
@ -2821,6 +2824,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(¶ms[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(¶ms[1],
|
||||
VIR_DOMAIN_CPU_STATS_USERTIME,
|
||||
VIR_TYPED_PARAM_ULLONG, user) < 0)
|
||||
return -1;
|
||||
if (nparams > 2 &&
|
||||
virTypedParameterAssign(¶ms[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)
|
||||
{
|
||||
|
@ -201,6 +201,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);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user