Re: [patch] Revert "memcg: add memory.vmscan_stat"

KAMEZAWA Hiroyuki
2011-08-30T10:46:12Z

On Tue, 30 Aug 2011 12:17:26 +0200
Johannes Weiner <jweiner@redhat.com> wrote:

> On Tue, Aug 30, 2011 at 05:56:09PM +0900, KAMEZAWA Hiroyuki wrote:
> > On Tue, 30 Aug 2011 10:42:45 +0200
> > Johannes Weiner <jweiner@redhat.com> wrote:

> > > > Assume 3 cgroups in a hierarchy.
> > > >
> > > > A
> > > > /
> > > > B
> > > > /
> > > > C
> > > >
> > > > C's scan contains 3 causes.
> > > > C's scan caused by limit of A.
> > > > C's scan caused by limit of B.
> > > > C's scan caused by limit of C.
> > > >
> > > > If we make hierarchy sum at read, we think
> > > > B's scan_stat = B's scan_stat + C's scan_stat
> > > > But in precice, this is
> > > >
> > > > B's scan_stat = B's scan_stat caused by B +
> > > > B's scan_stat caused by A +
> > > > C's scan_stat caused by C +
> > > > C's scan_stat caused by B +
> > > > C's scan_stat caused by A.
> > > >
> > > > In orignal version.
> > > > B's scan_stat = B's scan_stat caused by B +
> > > > C's scan_stat caused by B +
> > > >
> > > > After this patch,
> > > > B's scan_stat = B's scan_stat caused by B +
> > > > B's scan_stat caused by A +
> > > > C's scan_stat caused by C +
> > > > C's scan_stat caused by B +
> > > > C's scan_stat caused by A.
> > > >
> > > > Hmm...removing hierarchy part completely seems fine to me.
> > >
> > > I see.
> > >
> > > You want to look at A and see whether its limit was responsible for
> > > reclaim scans in any children. IMO, that is asking the question
> > > backwards. Instead, there is a cgroup under reclaim and one wants to
> > > find out the cause for that. Not the other way round.
> > >
> > > In my original proposal I suggested differentiating reclaim caused by
> > > internal pressure (due to own limit) and reclaim caused by
> > > external/hierarchical pressure (due to limits from parents).
> > >
> > > If you want to find out why C is under reclaim, look at its reclaim
> > > statistics. If the _limit numbers are high, C's limit is the problem.
> > > If the _hierarchical numbers are high, the problem is B, A, or
> > > physical memory, so you check B for _limit and _hierarchical as well,
> > > then move on to A.
> > >
> > > Implementing this would be as easy as passing not only the memcg to
> > > scan (victim) to the reclaim code, but also the memcg /causing/ the
> > > reclaim (root_mem):
> > >
> > > root_mem == victim -> account to victim as _limit
> > > root_mem != victim -> account to victim as _hierarchical
> > >
> > > This would make things much simpler and more natural, both the code
> > > and the way of tracking down a problem, IMO.
> >
> > hmm. I have no strong opinion.
>
> I do :-)
>
BTW, how to calculate C's lru scan caused by A finally ?

A
/
B
/
C

At scanning LRU of C because of A's limit, where stats are recorded ?

If we record it in C, we lose where the memory pressure comes from.
If we record it in A, we lose where scan happens.
I'm sorry I'm a little confused.

Thanks,
-Kame