Re: [PATCH RFC] mm/memcg: calculate max hierarchy limit numberinstead of min

From: Michal Hocko
Date: Wed Jul 11 2012 - 09:48:00 EST


On Wed 11-07-12 21:24:41, Wanpeng Li wrote:
> From: Wanpeng Li <liwp@xxxxxxxxxxxxxxxxxx>
>
> Since hierachical_memory_limit shows "of bytes of memory limit with
> regard to hierarchy under which the memory cgroup is", the count should
> calculate max hierarchy limit when use_hierarchy in order to show hierarchy
> subtree limit. hierachical_memsw_limit is the same case.

No the patch is wrong. The hierarchical limit says when we start
reclaiming in the hierarchy and that one is triggered on smallest limit
up the way to the hierarchy root.

What are you trying to accomplish here?

> Signed-off-by: Wanpeng Li <liwp.linux@xxxxxxxxx>
> ---
> mm/memcontrol.c | 14 +++++++-------
> 1 files changed, 7 insertions(+), 7 deletions(-)
>
> diff --git a/mm/memcontrol.c b/mm/memcontrol.c
> index 69a7d45..6392c0a 100644
> --- a/mm/memcontrol.c
> +++ b/mm/memcontrol.c
> @@ -3929,10 +3929,10 @@ static void memcg_get_hierarchical_limit(struct mem_cgroup *memcg,
> unsigned long long *mem_limit, unsigned long long *memsw_limit)
> {
> struct cgroup *cgroup;
> - unsigned long long min_limit, min_memsw_limit, tmp;
> + unsigned long long max_limit, max_memsw_limit, tmp;
>
> - min_limit = res_counter_read_u64(&memcg->res, RES_LIMIT);
> - min_memsw_limit = res_counter_read_u64(&memcg->memsw, RES_LIMIT);
> + max_limit = res_counter_read_u64(&memcg->res, RES_LIMIT);
> + max_memsw_limit = res_counter_read_u64(&memcg->memsw, RES_LIMIT);
> cgroup = memcg->css.cgroup;
> if (!memcg->use_hierarchy)
> goto out;
> @@ -3943,13 +3943,13 @@ static void memcg_get_hierarchical_limit(struct mem_cgroup *memcg,
> if (!memcg->use_hierarchy)
> break;
> tmp = res_counter_read_u64(&memcg->res, RES_LIMIT);
> - min_limit = min(min_limit, tmp);
> + max_limit = max(max_limit, tmp);
> tmp = res_counter_read_u64(&memcg->memsw, RES_LIMIT);
> - min_memsw_limit = min(min_memsw_limit, tmp);
> + max_memsw_limit = max(max_memsw_limit, tmp);
> }
> out:
> - *mem_limit = min_limit;
> - *memsw_limit = min_memsw_limit;
> + *mem_limit = max_limit;
> + *memsw_limit = max_memsw_limit;
> }
>
> static int mem_cgroup_reset(struct cgroup *cont, unsigned int event)
> --
> 1.7.5.4
>

--
Michal Hocko
SUSE Labs
SUSE LINUX s.r.o.
Lihovarska 1060/12
190 00 Praha 9
Czech Republic
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/