lkml.org 
[lkml]   [2012]   [Sep]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 2.6.32] memcg: warn on deeper hierarchies with use_hierarchy==0

    From 34be56e3e7e4f9c31381ce35247e0a0b7f972874 Mon Sep 17 00:00:00 2001
    From: Michal Hocko <mhocko@suse.cz>
    Date: Tue, 4 Sep 2012 15:55:03 +0200
    Subject: [PATCH] memcg: warn on deeper hierarchies with use_hierarchy==0

    The memory controller supports both hierarchical and non-hierarchical
    behavior which is controlled by use_hierarchy knob (0 by default).
    The primary motivation for this distinction was an ineffectiveness
    of hierarchical accounting. This has improved a lot since it was
    introduced.

    This schizophrenia makes the code and integration with other controllers
    more complicated (e.g. mounting it with fully hierarchical one could
    have an unexpected side effects) for no good reason so it would be good
    to make the memory controller behave only hierarchically.

    It seems that there is no good reasons for deep cgroup hierarchies which
    are not truly hierarchical so we could set the default to 1. This might,
    however, lead to unexpected regressions when somebody relies on the
    current default behavior. For example, consider the following setup:
    Root[cpuset,memory]
    |
    A (use_hierarchy=0)
    / \
    B C

    All three A, B, C have some tasks and their memory limits. The hierarchy
    is created only because of the cpuset and its configuration.
    Say the default is changed. Then a memory pressure in C could influence
    both A and B which wouldn't happen before. The problem might be really
    hard to notice (unexpected slowdown).
    This configuration could be fixed up easily by reorganization, though:
    Root
    |
    A' (use_hierarchy=1, limit=unlimited, no tasks)
    /|\
    A B C

    The problem is that we don't know whether somebody has an use case which
    cannot be transformed like that. Therefore this patch starts the slow
    transition to hierarchical only memory controller by warning users who
    are using flat hierarchies. The warning triggers only if a subgroup of
    non-root group is created with use_hierarchy==0.

    Signed-off-by: Michal Hocko <mhocko@suse.cz>
    ---
    mm/memcontrol.c | 5 +++++
    1 file changed, 5 insertions(+)

    diff --git a/mm/memcontrol.c b/mm/memcontrol.c
    index f99f599..b61c34b 100644
    --- a/mm/memcontrol.c
    +++ b/mm/memcontrol.c
    @@ -3106,6 +3106,11 @@ mem_cgroup_create(struct cgroup_subsys *ss, struct cgroup *cont)
    } else {
    parent = mem_cgroup_from_cont(cont->parent);
    mem->use_hierarchy = parent->use_hierarchy;
    + WARN_ONCE(!mem->use_hierarchy && parent != root_mem_cgroup,
    + "Creating hierarchies with use_hierarchy==0 "
    + "(flat hierarchy) is considered deprecated. "
    + "If you believe that your setup is correct, "
    + "we kindly ask you to contact linux-mm@kvack.org and let us know");
    }

    if (parent && parent->use_hierarchy) {
    --
    1.7.10.4


    \
     
     \ /
      Last update: 2012-09-19 16:41    [W:0.123 / U:88.616 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site