mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
cgroup: Move [qemu|lxc]GetCpuBWStatus to vicgroup.c and refactor it
The function existed in two identical instances in lxc and qemu. Move it to vircgroup.c and simplify it. Refactor the callers too.
This commit is contained in:
parent
4baa8d7637
commit
d79fe8b50b
@ -1217,6 +1217,7 @@ virCgroupSetMemory;
|
||||
virCgroupSetMemoryHardLimit;
|
||||
virCgroupSetMemorySoftLimit;
|
||||
virCgroupSetMemSwapHardLimit;
|
||||
virCgroupSupportsCpuBW;
|
||||
|
||||
|
||||
# util/virclosecallbacks.h
|
||||
|
@ -1574,45 +1574,10 @@ static char *lxcConnectGetHostname(virConnectPtr conn)
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* check whether the host supports CFS bandwidth
|
||||
*
|
||||
* Return 1 when CFS bandwidth is supported, 0 when CFS bandwidth is not
|
||||
* supported, -1 on error.
|
||||
*/
|
||||
static int lxcGetCpuBWStatus(virCgroupPtr cgroup)
|
||||
{
|
||||
char *cfs_period_path = NULL;
|
||||
int ret = -1;
|
||||
|
||||
if (!cgroup)
|
||||
return 0;
|
||||
|
||||
if (virCgroupPathOfController(cgroup, VIR_CGROUP_CONTROLLER_CPU,
|
||||
"cpu.cfs_period_us", &cfs_period_path) < 0) {
|
||||
VIR_INFO("cannot get the path of cgroup CPU controller");
|
||||
ret = 0;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (access(cfs_period_path, F_OK) < 0) {
|
||||
ret = 0;
|
||||
} else {
|
||||
ret = 1;
|
||||
}
|
||||
|
||||
cleanup:
|
||||
VIR_FREE(cfs_period_path);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
static char *lxcDomainGetSchedulerType(virDomainPtr dom,
|
||||
int *nparams)
|
||||
{
|
||||
char *ret = NULL;
|
||||
int rc;
|
||||
virDomainObjPtr vm;
|
||||
virLXCDomainObjPrivatePtr priv;
|
||||
|
||||
@ -1639,13 +1604,10 @@ static char *lxcDomainGetSchedulerType(virDomainPtr dom,
|
||||
}
|
||||
|
||||
if (nparams) {
|
||||
rc = lxcGetCpuBWStatus(priv->cgroup);
|
||||
if (rc < 0)
|
||||
goto cleanup;
|
||||
else if (rc == 0)
|
||||
*nparams = 1;
|
||||
else
|
||||
if (virCgroupSupportsCpuBW(priv->cgroup))
|
||||
*nparams = 3;
|
||||
else
|
||||
*nparams = 1;
|
||||
}
|
||||
|
||||
ignore_value(VIR_STRDUP(ret, "posix"));
|
||||
@ -1872,12 +1834,8 @@ lxcDomainGetSchedulerParametersFlags(virDomainPtr dom,
|
||||
if (virDomainGetSchedulerParametersFlagsEnsureACL(dom->conn, vm->def) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (*nparams > 1) {
|
||||
rc = lxcGetCpuBWStatus(priv->cgroup);
|
||||
if (rc < 0)
|
||||
goto cleanup;
|
||||
cpu_bw_status = !!rc;
|
||||
}
|
||||
if (*nparams > 1)
|
||||
cpu_bw_status = virCgroupSupportsCpuBW(priv->cgroup);
|
||||
|
||||
if (!(caps = virLXCDriverGetCapabilities(driver, false)))
|
||||
goto cleanup;
|
||||
|
@ -7325,44 +7325,10 @@ cleanup:
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* check whether the host supports CFS bandwidth
|
||||
*
|
||||
* Return 1 when CFS bandwidth is supported, 0 when CFS bandwidth is not
|
||||
* supported, -1 on error.
|
||||
*/
|
||||
static int qemuGetCpuBWStatus(virCgroupPtr cgroup)
|
||||
{
|
||||
char *cfs_period_path = NULL;
|
||||
int ret = -1;
|
||||
|
||||
if (!cgroup)
|
||||
return 0;
|
||||
|
||||
if (virCgroupPathOfController(cgroup, VIR_CGROUP_CONTROLLER_CPU,
|
||||
"cpu.cfs_period_us", &cfs_period_path) < 0) {
|
||||
VIR_INFO("cannot get the path of cgroup CPU controller");
|
||||
ret = 0;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (access(cfs_period_path, F_OK) < 0) {
|
||||
ret = 0;
|
||||
} else {
|
||||
ret = 1;
|
||||
}
|
||||
|
||||
cleanup:
|
||||
VIR_FREE(cfs_period_path);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
static char *qemuDomainGetSchedulerType(virDomainPtr dom,
|
||||
int *nparams)
|
||||
{
|
||||
char *ret = NULL;
|
||||
int rc;
|
||||
virDomainObjPtr vm = NULL;
|
||||
qemuDomainObjPrivatePtr priv;
|
||||
|
||||
@ -7389,13 +7355,10 @@ static char *qemuDomainGetSchedulerType(virDomainPtr dom,
|
||||
}
|
||||
|
||||
if (nparams) {
|
||||
rc = qemuGetCpuBWStatus(priv->cgroup);
|
||||
if (rc < 0)
|
||||
goto cleanup;
|
||||
else if (rc == 0)
|
||||
*nparams = 1;
|
||||
else
|
||||
if (virCgroupSupportsCpuBW(priv->cgroup))
|
||||
*nparams = 5;
|
||||
else
|
||||
*nparams = 1;
|
||||
}
|
||||
|
||||
ignore_value(VIR_STRDUP(ret, "posix"));
|
||||
@ -8728,12 +8691,8 @@ qemuDomainGetSchedulerParametersFlags(virDomainPtr dom,
|
||||
if (virDomainGetSchedulerParametersFlagsEnsureACL(dom->conn, vm->def) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (*nparams > 1) {
|
||||
rc = qemuGetCpuBWStatus(priv->cgroup);
|
||||
if (rc < 0)
|
||||
goto cleanup;
|
||||
cpu_bw_status = !!rc;
|
||||
}
|
||||
if (*nparams > 1)
|
||||
cpu_bw_status = virCgroupSupportsCpuBW(priv->cgroup);
|
||||
|
||||
if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
|
||||
goto cleanup;
|
||||
|
@ -3061,6 +3061,36 @@ cleanup:
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* virCgroupSupportsCpuBW():
|
||||
* Check whether the host supports CFS bandwidth.
|
||||
*
|
||||
* Return true when CFS bandwidth is supported,
|
||||
* false when CFS bandwidth is not supported.
|
||||
*/
|
||||
bool
|
||||
virCgroupSupportsCpuBW(virCgroupPtr cgroup)
|
||||
{
|
||||
char *path = NULL;
|
||||
int ret = false;
|
||||
|
||||
if (!cgroup)
|
||||
return false;
|
||||
|
||||
if (virCgroupPathOfController(cgroup, VIR_CGROUP_CONTROLLER_CPU,
|
||||
"cpu.cfs_period_us", &path) < 0) {
|
||||
virResetLastError();
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
ret = virFileExists(path);
|
||||
|
||||
cleanup:
|
||||
VIR_FREE(path);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
#else /* !VIR_CGROUP_SUPPORTED */
|
||||
|
||||
bool
|
||||
@ -3646,4 +3676,12 @@ virCgroupIsolateMount(virCgroupPtr group ATTRIBUTE_UNUSED,
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
virCgroupSupportsCpuBW(virCgroupPtr cgroup ATTRIBUTE_UNUSED)
|
||||
{
|
||||
VIR_DEBUG("Control groups not supported on this platform");
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif /* !VIR_CGROUP_SUPPORTED */
|
||||
|
@ -207,4 +207,6 @@ int virCgroupIsolateMount(virCgroupPtr group,
|
||||
const char *oldroot,
|
||||
const char *mountopts);
|
||||
|
||||
bool virCgroupSupportsCpuBW(virCgroupPtr cgroup);
|
||||
|
||||
#endif /* __VIR_CGROUP_H__ */
|
||||
|
Loading…
x
Reference in New Issue
Block a user