[libvirt] [PATCH] qemu: don't error out when cgroups don't exist
Martin Kletzander
mkletzan at redhat.com
Wed Jul 9 12:30:10 UTC 2014
On Wed, Jul 09, 2014 at 01:07:47PM +0200, Ján Tomko wrote:
>On 07/09/2014 10:15 AM, Martin Kletzander wrote:
>> When creating cgroups for vcpu and emulator threads whilst starting a
>> domain, we explicitly skip creating those cgroups in case priv->cgroup
>> is NULL (cgroups not supported) because SetAffinity() serves the same
>> purpose. If the host supports only some cgroups (the ones we need are
>> either unmounted or disabled in qemu.conf), we error out with weird
>> message even though we could continue starting the domain.
>
>Yet this patch does not change the error message.
>
Yes, because there should be no error.
>>
>> Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1097028
>>
>> Signed-off-by: Martin Kletzander <mkletzan at redhat.com>
>> ---
>> src/qemu/qemu_cgroup.c | 12 ++++++++++--
>> 1 file changed, 10 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c
>> index 3394c68..0af6ac5 100644
>> --- a/src/qemu/qemu_cgroup.c
>> +++ b/src/qemu/qemu_cgroup.c
>> @@ -949,7 +949,11 @@ qemuSetupCgroupForVcpu(virDomainObjPtr vm)
>> virCgroupFree(&cgroup_vcpu);
>> }
>>
>> - return -1;
>> + if (period || quota)
>> + return -1;
>> +
>> + virResetLastError();
>> + return 0;
>> }
>>
>
>This also resets OOM errors and errors that happen when these controllers are
>mounted.
>
>Can't we just check upfront if the needed controllers are available?
>
There might be more problems than the controllers not being mounted,
but OK, the others are corner cases anyway. Would the following diff
be more suitable?
diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c
index 3394c68..d4c969b 100644
--- a/src/qemu/qemu_cgroup.c
+++ b/src/qemu/qemu_cgroup.c
@@ -893,6 +893,15 @@ qemuSetupCgroupForVcpu(virDomainObjPtr vm)
return -1;
}
+ /*
+ * If CPU cgroup controller is not initialized here, than we need
+ * neither period nor quota settings. And if CPUSET controller is
+ * not initialized either, than there's nothing to do anyway.
+ */
+ if (!virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPU) &&
+ !virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET))
+ return 0;
+
/* We are trying to setup cgroups for CPU pinning, which can also
be done
* with virProcessSetAffinity, thus the lack of cgroups is not
fatal here.
*/
@@ -972,6 +981,15 @@ qemuSetupCgroupForEmulator(virQEMUDriverPtr driver,
return -1;
}
+ /*
+ * If CPU cgroup controller is not initialized here, than we need
+ * neither period nor quota settings. And if CPUSET controller is
+ * not initialized either, than there's nothing to do anyway.
+ */
+ if (!virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPU) &&
+ !virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET))
+ return 0;
+
if (priv->cgroup == NULL)
return 0; /* Not supported, so claim success */
--
Martin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20140709/c9bc91cd/attachment-0001.sig>
More information about the libvir-list
mailing list