Re: [RFC][PATCH 1/2] memcg: Ensure every task that uses an mm is in the same memory cgroup
From: Tejun Heo
Date: Fri Jun 01 2018 - 12:50:46 EST
Hello, Eric.
On Fri, Jun 01, 2018 at 09:53:09AM -0500, Eric W. Biederman wrote:
>
> From a userspace perspective the cgroup of a mm is determined by which
> the cgroup the task belongs too. As practically an mm can only belong to
> a single memory cgroup having multiple tasks with the same mm in different
> memory cgroups is not well defined.
>
> Avoid the difficulties of dealing with crazy semantics and restrict all
> tasks that share a single mm to the same memory cgroup.
>
> This is accomplished by adding a new function mem_cgroup_mm_can_attach
> that checks this condition with a straight forward algorithm. In the worst
> case it is O(N^2). In the common case it should be O(N) in the number of
> tasks being migrated. As typically only a single process and thus a single
> process is being migrated and it is optimized for that case.
>
> There are users of mmget such as proc that can create references to an
> mm this function can not find. This results in an unnecessary
> migration failure. It does not break the invariant that every task of
> an mm stays in the same memory cgroup. So this condition is annoying
> but harmelss.
>
> This requires multi-threaded mm's to be migrated using the procs file.
>
> This effectively forbids process with mm's shared processes being migrated.
> Although enabling the control file might work.
So, I don't think we need to support putting tasks which share a mm in
different cgroups. That said, if we're gonna put in that restriction,
I think it should be in cgroup core rather than memcg can_attach. The
only thing we'd need to do is widening what cgroup migration considers
to be a process.
Thanks.
--
tejun