Show the real cpu shares value in live XML

Currently, the Linux kernel treats values of '0' and '1' as
the minimum of 2. Values larger than the maximum are changed
to the maximum.

Re-reading the shares value after setting it reflects this in
the live domain XML.
This commit is contained in:
Ján Tomko 2014-03-04 13:56:24 +01:00
parent bdffab0d5c
commit 97814d8ab3
4 changed files with 30 additions and 8 deletions

View File

@ -38,9 +38,16 @@ static int virLXCCgroupSetupCpuTune(virDomainDefPtr def,
virCgroupPtr cgroup)
{
int ret = -1;
if (def->cputune.sharesSpecified &&
virCgroupSetCpuShares(cgroup, def->cputune.shares) < 0)
goto cleanup;
if (def->cputune.sharesSpecified) {
unsigned long long val;
if (virCgroupSetCpuShares(cgroup, def->cputune.shares) < 0)
goto cleanup;
if (virCgroupGetCpuShares(cgroup, &val) < 0)
goto cleanup;
def->cputune.shares = val;
}
if (def->cputune.quota != 0 &&
virCgroupSetCpuCfsQuota(cgroup, def->cputune.quota) < 0)

View File

@ -1898,10 +1898,14 @@ lxcDomainSetSchedulerParametersFlags(virDomainPtr dom,
if (STREQ(param->field, VIR_DOMAIN_SCHEDULER_CPU_SHARES)) {
if (flags & VIR_DOMAIN_AFFECT_LIVE) {
unsigned long long val;
if (virCgroupSetCpuShares(priv->cgroup, params[i].value.ul) < 0)
goto cleanup;
vm->def->cputune.shares = params[i].value.ul;
if (virCgroupGetCpuShares(priv->cgroup, &val) < 0)
goto cleanup;
vm->def->cputune.shares = val;
vm->def->cputune.sharesSpecified = true;
}

View File

@ -655,9 +655,15 @@ qemuSetupCpuCgroup(virDomainObjPtr vm)
}
}
if (vm->def->cputune.sharesSpecified &&
virCgroupSetCpuShares(priv->cgroup, vm->def->cputune.shares) < 0)
return -1;
if (vm->def->cputune.sharesSpecified) {
unsigned long long val;
if (virCgroupSetCpuShares(priv->cgroup, vm->def->cputune.shares) < 0)
return -1;
if (virCgroupGetCpuShares(priv->cgroup, &val) < 0)
return -1;
vm->def->cputune.shares = val;
}
return 0;
}

View File

@ -9085,9 +9085,14 @@ qemuDomainSetSchedulerParametersFlags(virDomainPtr dom,
if (STREQ(param->field, VIR_DOMAIN_SCHEDULER_CPU_SHARES)) {
if (flags & VIR_DOMAIN_AFFECT_LIVE) {
unsigned long long val;
if (virCgroupSetCpuShares(priv->cgroup, value_ul) < 0)
goto cleanup;
vm->def->cputune.shares = value_ul;
if (virCgroupGetCpuShares(priv->cgroup, &val) < 0)
goto cleanup;
vm->def->cputune.shares = val;
vm->def->cputune.sharesSpecified = true;
}