On Fri, Jun 02, 2017 at 01:13:32PM -0700, Sean Christopherson wrote: > Make @root exclusive in mem_cgroup_low; it is never considered low > when looked at directly and is not checked when traversing the tree. > In effect, @root is handled identically to how root_mem_cgroup was > previously handled by mem_cgroup_low. > > If @root is not excluded from the checks, a cgroup underneath @root > will never be considered low during targeted reclaim of @root, e.g. > due to memory.current > memory.high, unless @root is misconfigured > to have memory.low > memory.high. > > Excluding @root enables using memory.low to prioritize memory usage > between cgroups within a subtree of the hierarchy that is limited by > memory.high or memory.max, e.g. when ROOT owns @root's controls but > delegates the @root directory to a USER so that USER can create and > administer children of @root. > > For example, given cgroup A with children B and C: > > A > / \ > B C > > and > > 1. A/memory.current > A/memory.high > 2. A/B/memory.current < A/B/memory.low > 3. A/C/memory.current >= A/C/memory.low > > As 'A' is high, i.e. triggers reclaim from 'A', and 'B' is low, we > should reclaim from 'C' until 'A' is no longer high or until we can > no longer reclaim from 'C'. If 'A', i.e. @root, isn't excluded by > mem_cgroup_low when reclaming from 'A', then 'B' won't be considered > low and we will reclaim indiscriminately from both 'B' and 'C'. > > Signed-off-by: Sean Christopherson <sean.j.christopherson@xxxxxxxxx> > --- > mm/memcontrol.c | 50 ++++++++++++++++++++++++++++++++------------------ > 1 file changed, 32 insertions(+), 18 deletions(-) Good catch, wonder why it hasn't been reported before. IMO the patch looks good - it makes the mem_cgroup_low() code easier to follow. Acked-by: Vladimir Davydov <vdavydov.dev@xxxxxxxxx> -- To unsubscribe from this list: send the line "unsubscribe cgroups" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html