On Wed, Jan 18, 2012 at 03:17:25PM +0800, Sha wrote:Er... I'm even more confused: mem_cgroup_soft_limit_reclaim indeedNo, currently soft limits are ignored if pressure originates fromWell it is just the behavior that I'm expecting actually. But with myI don't think it solve the root of the problem, example:Because A2 is over its soft limit, the whole hierarchy below it should
root
-> A (hard limit 20G, soft limit 12G, usage 20G)
-> A1 ( soft limit 2G, usage 1G)
-> A2 ( soft limit 10G, usage 19G)
->B1 (soft limit 5G, usage 4G)
->B2 (soft limit 5G, usage 15G)
Now A is hitting its hard limit and start hierarchical reclaim under A.
If we choose B1 to go through mem_cgroup_over_soft_limit, it will
return true because its parent A2 has a large usage and will lead to
priority=0 reclaiming. But in fact it should be B2 to be punished.
be preferred over A1, so both B1 and B2 should be soft limit reclaimed
to be consistent with behaviour at the root level.
humble comprehension, I can't catch the soft-limit-based hierarchical
reclaiming under the target cgroup (A2) in the current implementation
or after the patch. Both the current mem_cgroup_soft_reclaim or
shrink_zone select victim sub-cgroup by mem_cgroup_iter, but it
doesn't take soft limit into consideration, do I left anything ?
below root_mem_cgroup.
But iff soft limits are applied right now, they are applied
hierarchically, see mem_cgroup_soft_limit_reclaim().
In my opinion, the fact that soft limits are ignored when pressure is
triggered sub-root_mem_cgroup is an artifact of the per-zone tree, so
I allowed soft limits to be taken into account below root_mem_cgroup.
But IMO, this is something different from how soft limit reclaim is
applied once triggered: currently, soft limit reclaim applies to a
whole hierarchy, including all children. And this I left unchanged.