On Tue, 30 Aug 2011 12:17:26 +0200 Johannes Weiner <jweiner@xxxxxxxxxx> 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@xxxxxxxxxx> 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 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>