mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-08-28 11:31:16 +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;
|
virCgroupGetCpusetCpus;
|
||||||
virCgroupGetCpusetMems;
|
virCgroupGetCpusetMems;
|
||||||
virCgroupGetCpuShares;
|
virCgroupGetCpuShares;
|
||||||
|
virCgroupGetDomainTotalCpuStats;
|
||||||
virCgroupGetFreezerState;
|
virCgroupGetFreezerState;
|
||||||
virCgroupGetMemoryHardLimit;
|
virCgroupGetMemoryHardLimit;
|
||||||
virCgroupGetMemorySoftLimit;
|
virCgroupGetMemorySoftLimit;
|
||||||
|
@ -106,7 +106,6 @@
|
|||||||
|
|
||||||
#define QEMU_NB_NUMA_PARAM 2
|
#define QEMU_NB_NUMA_PARAM 2
|
||||||
|
|
||||||
#define QEMU_NB_TOTAL_CPU_STAT_PARAM 3
|
|
||||||
#define QEMU_NB_PER_CPU_STAT_PARAM 2
|
#define QEMU_NB_PER_CPU_STAT_PARAM 2
|
||||||
|
|
||||||
#define QEMU_SCHED_MIN_PERIOD 1000LL
|
#define QEMU_SCHED_MIN_PERIOD 1000LL
|
||||||
@ -15903,56 +15902,6 @@ cleanup:
|
|||||||
return ret;
|
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.
|
/* 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,
|
* 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:
|
* then for each vcpu, the cpuacct.usage_percpu looks like this:
|
||||||
@ -16150,7 +16099,8 @@ qemuDomainGetCPUStats(virDomainPtr domain,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (start_cpu == -1)
|
if (start_cpu == -1)
|
||||||
ret = qemuDomainGetTotalcpuStats(vm, params, nparams);
|
ret = virCgroupGetDomainTotalCpuStats(priv->cgroup,
|
||||||
|
params, nparams);
|
||||||
else
|
else
|
||||||
ret = qemuDomainGetPercpuStats(vm, params, nparams,
|
ret = qemuDomainGetPercpuStats(vm, params, nparams,
|
||||||
start_cpu, ncpus);
|
start_cpu, ncpus);
|
||||||
|
@ -51,11 +51,14 @@
|
|||||||
#include "virhashcode.h"
|
#include "virhashcode.h"
|
||||||
#include "virstring.h"
|
#include "virstring.h"
|
||||||
#include "virsystemd.h"
|
#include "virsystemd.h"
|
||||||
|
#include "virtypedparam.h"
|
||||||
|
|
||||||
#define CGROUP_MAX_VAL 512
|
#define CGROUP_MAX_VAL 512
|
||||||
|
|
||||||
#define VIR_FROM_THIS VIR_FROM_CGROUP
|
#define VIR_FROM_THIS VIR_FROM_CGROUP
|
||||||
|
|
||||||
|
#define CGROUP_NB_TOTAL_CPU_STAT_PARAM 3
|
||||||
|
|
||||||
#if defined(__linux__) && defined(HAVE_GETMNTENT_R) && \
|
#if defined(__linux__) && defined(HAVE_GETMNTENT_R) && \
|
||||||
defined(_DIRENT_HAVE_D_TYPE) && defined(_SC_CLK_TCK)
|
defined(_DIRENT_HAVE_D_TYPE) && defined(_SC_CLK_TCK)
|
||||||
# define VIR_CGROUP_SUPPORTED
|
# 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
|
int
|
||||||
virCgroupSetCpuShares(virCgroupPtr group, unsigned long long shares)
|
virCgroupSetCpuShares(virCgroupPtr group, unsigned long long shares)
|
||||||
{
|
{
|
||||||
|
@ -201,6 +201,11 @@ int virCgroupDenyDevicePath(virCgroupPtr group,
|
|||||||
const char *path,
|
const char *path,
|
||||||
int perms);
|
int perms);
|
||||||
|
|
||||||
|
int
|
||||||
|
virCgroupGetDomainTotalCpuStats(virCgroupPtr group,
|
||||||
|
virTypedParameterPtr params,
|
||||||
|
int nparams);
|
||||||
|
|
||||||
int virCgroupSetCpuShares(virCgroupPtr group, unsigned long long shares);
|
int virCgroupSetCpuShares(virCgroupPtr group, unsigned long long shares);
|
||||||
int virCgroupGetCpuShares(virCgroupPtr group, unsigned long long *shares);
|
int virCgroupGetCpuShares(virCgroupPtr group, unsigned long long *shares);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user