[CRIU] [PATCH 1/2] Re-create cgroups if necessary
Tycho Andersen
tycho.andersen at canonical.com
Tue Jun 24 06:59:58 PDT 2014
Hi Pavel,
On Tue, Jun 24, 2014 at 11:03:14AM +0400, Pavel Emelyanov wrote:
> On 06/23/2014 07:54 PM, Tycho Andersen wrote:
> > If a task had cgroups, these should be restored. (Also any properties of
> > cgroups, but this commit doesn't do that yet.)
> >
> > Signed-off-by: Tycho Andersen <tycho.andersen at canonical.com>
> > ---
> > cgroup.c | 6 +++++-
> > include/util.h | 5 +++++
> > util.c | 26 ++++++++++++++++++++++++++
> > 3 files changed, 36 insertions(+), 1 deletion(-)
> >
> > diff --git a/cgroup.c b/cgroup.c
> > index 2d9ebad..8b2deb2 100644
> > --- a/cgroup.c
> > +++ b/cgroup.c
> > @@ -258,9 +258,13 @@ static int move_in_cgroup(CgSetEntry *se)
> > int fd, err;
> > ControllerEntry *ce = se->ctls[i];
> >
> > + sprintf(aux, "%s/%s", ce->name, ce->path);
> > + if (mkdirpat(cg, aux) < 0)
>
> Tycho, there's one thing about this mkdir-s that we've discussed with Saied (in Cc).
> The problem is that in cgroup FS there may be directories corresponding to cgroups
> in which there are no tasks, but that would appear some time soon.
>
> When we dump such a container we don't dump the information about such empty cgroups.
> And on restore, if we create the directories by criu, we will _not_ create empty
> cgroups and further 'echo $pid > cgroup/tasks' would fail.
>
> Thus we should chose one of two ways:
>
> 1. We do not handle cgroup hierarchy at all in criu, asking caller to do this.
> What we do it just populate cgroups with tasks. This is how criu works now.
>
> 2. We state, that we take full care of cgroup hierarchy on dump and restore. This
> is were we should go, but in that case we should also dump and restore those
> empty cgroups I've mentioned.
>
> And, once we start to go the route #2 we should also take care of the cgroups
> configuration.
>
> The fix you're proposing is how we (probably) should start doing the way #2, so
> let's decide how can we handle empty cgroups (and configuration) :)
Understood. For dumping empty cgroups, is it just that the current
code only looks at the task and finds its cgroups, and we need to add
an additional step that walks /sys/fs/cgroup (or wherever)? A quick
glance through the code didn't reveal any "skip empty cgroups" type
steps.
Tycho
More information about the CRIU
mailing list