[libvirt] [PATCH 2/3] qemu: do not put a task into machine cgroup
Henning Schild
henning.schild at siemens.com
Wed Dec 9 14:43:02 UTC 2015
On Tue, 8 Dec 2015 12:23:19 -0500
John Ferlan <jferlan at redhat.com> wrote:
>
>
> On 11/13/2015 11:57 AM, Henning Schild wrote:
> > The machine cgroup is a superset, a parent to the emulator and vcpuX
> > cgroups. The parent cgroup should never have any tasks directly in
> > it. In fact the parent cpuset might contain way more cpus than the
> > sum of emulatorpin and vcpupins. So putting tasks in the superset
> > will allow them to run outside of <cputune>.
> >
> > Signed-off-by: Henning Schild <henning.schild at siemens.com>
> > ---
> > src/qemu/qemu_cgroup.c | 10 ++++------
> > 1 file changed, 4 insertions(+), 6 deletions(-)
> >
> > diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c
> > index 28d2ca2..2c74a22 100644
> > --- a/src/qemu/qemu_cgroup.c
> > +++ b/src/qemu/qemu_cgroup.c
> > @@ -769,12 +769,6 @@ qemuInitCgroup(virQEMUDriverPtr driver,
> > goto cleanup;
> > }
> >
> > - if (virCgroupAddTask(priv->cgroup, vm->pid) < 0) {
> > - virCgroupRemove(priv->cgroup);
> > - virCgroupFree(&priv->cgroup);
> > - goto cleanup;
> > - }
> > -
>
> Moving this to later would also seem to imply that the code after the
> qemuSetupCgroup (which calls qemuInitCgroup) from qemuProcessLaunch
> would need some movement too, e.g.:
>
> /* This must be done after cgroup placement to avoid resetting CPU
> * affinity */
> if (!vm->def->cputune.emulatorpin &&
> qemuProcessInitCpuAffinity(vm) < 0)
> goto cleanup;
>
> Theoretically that would then need to be between the following:
>
> VIR_DEBUG("Setting cgroup for emulator (if required)");
> if (qemuSetupCgroupForEmulator(vm) < 0)
> goto cleanup;
>
> <<<... right here, I believe ...>>>
Good catch! That code is confusing. I will try and merge
qemuProcessInitCpuAffinity with qemuProcessSetEmulatorAffinity.
> VIR_DEBUG("Setting affinity of emulator threads");
> if (qemuProcessSetEmulatorAffinity(vm) < 0)
> goto cleanup;
>
>
> Again, weak ACK - hopefully Peter/Martin can take a look. In any case
> a v2 probably should be done.
>
> John
> > done:
> > ret = 0;
> > cleanup:
> > @@ -1145,6 +1139,10 @@ qemuSetupCgroupForEmulator(virDomainObjPtr
> > vm) goto cleanup;
> > }
> >
> > + /* consider the first thread an emulator-thread */
> > + if (virCgroupAddTask(cgroup_emulator, vm->pid) < 0)
> > + goto cleanup;
> > +
> > virCgroupFree(&cgroup_emulator);
> > return 0;
> >
> >
More information about the libvir-list
mailing list