lkml.org 
[lkml]   [2008]   [Nov]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [mm] [PATCH 4/4] Memory cgroup hierarchy feature selector
    On Sun, 02 Nov 2008 00:19:02 +0530
    Balbir Singh <balbir@linux.vnet.ibm.com> wrote:

    >
    > Don't enable multiple hierarchy support by default. This patch introduces
    > a features element that can be set to enable the nested depth hierarchy
    > feature. This feature can only be enabled when there is just one cgroup
    > (the root cgroup).
    >
    Why the flag is for the whole system ?
    flag-per-subtree is of no use ?

    Thanks,
    -Kame

    > Signed-off-by: Balbir Singh <balbir@linux.vnet.ibm.com>
    > ---
    >
    > mm/memcontrol.c | 38 +++++++++++++++++++++++++++++++++++++-
    > 1 file changed, 37 insertions(+), 1 deletion(-)
    >
    > diff -puN mm/memcontrol.c~memcg-add-hierarchy-selector mm/memcontrol.c
    > --- linux-2.6.28-rc2/mm/memcontrol.c~memcg-add-hierarchy-selector 2008-11-02 00:15:00.000000000 +0530
    > +++ linux-2.6.28-rc2-balbir/mm/memcontrol.c 2008-11-02 00:15:00.000000000 +0530
    > @@ -40,6 +40,9 @@
    > struct cgroup_subsys mem_cgroup_subsys __read_mostly;
    > #define MEM_CGROUP_RECLAIM_RETRIES 5
    >
    > +static unsigned long mem_cgroup_features;
    > +#define MEM_CGROUP_FEAT_HIERARCHY 0x1
    > +
    > /*
    > * Statistics for memory cgroup.
    > */
    > @@ -1080,6 +1083,31 @@ out:
    > return ret;
    > }
    >
    > +static u64 mem_cgroup_feature_read(struct cgroup *cont, struct cftype *cft)
    > +{
    > + return mem_cgroup_features;
    > +}
    > +
    > +static int mem_cgroup_feature_write(struct cgroup *cont, struct cftype *cft,
    > + u64 val)
    > +{
    > + int retval = 0;
    > + struct cgroup *cgroup = init_mem_cgroup.css.cgroup;
    > +
    > + if (val & MEM_CGROUP_FEAT_HIERARCHY) {
    > + if (list_empty(&cgroup->children))
    > + mem_cgroup_features |= MEM_CGROUP_FEAT_HIERARCHY;
    > + else
    > + retval = -EBUSY;
    > + } else {
    > + if (list_empty(&cgroup->children))
    > + mem_cgroup_features &= ~MEM_CGROUP_FEAT_HIERARCHY;
    > + else
    > + retval = -EBUSY;
    > + }
    > + return retval;
    > +}
    > +
    > static u64 mem_cgroup_read(struct cgroup *cont, struct cftype *cft)
    > {
    > return res_counter_read_u64(&mem_cgroup_from_cont(cont)->res,
    > @@ -1214,6 +1242,11 @@ static struct cftype mem_cgroup_files[]
    > .name = "stat",
    > .read_map = mem_control_stat_show,
    > },
    > + {
    > + .name = "features",
    > + .write_u64 = mem_cgroup_feature_write,
    > + .read_u64 = mem_cgroup_feature_read,
    > + },
    > };
    >
    > static int alloc_mem_cgroup_per_zone_info(struct mem_cgroup *mem, int node)
    > @@ -1292,7 +1325,10 @@ mem_cgroup_create(struct cgroup_subsys *
    > return ERR_PTR(-ENOMEM);
    > }
    >
    > - res_counter_init(&mem->res, parent ? &parent->res : NULL);
    > + if ((mem_cgroup_features & MEM_CGROUP_FEAT_HIERARCHY) && parent)
    > + res_counter_init(&mem->res, &parent->res);
    > + else
    > + res_counter_init(&mem->res, NULL);
    >
    > for_each_node_state(node, N_POSSIBLE)
    > if (alloc_mem_cgroup_per_zone_info(mem, node))
    > _
    >
    > --
    > Balbir
    >



    \
     
     \ /
      Last update: 2008-11-02 06:41    [W:0.032 / U:211.408 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site