Re: [RFC][PATCH] memcg soft limit (yet another new design) v1

From: Balbir Singh
Date: Sun Mar 29 2009 - 09:02:23 EST


* KAMEZAWA Hiroyuki <kamezawa.hiroyu@xxxxxxxxxxxxxx> [2009-03-27 13:59:33]:

> Hi,
>
> Memory cgroup's soft limit feature is a feature to tell global LRU
> "please reclaim from this memcg at memory shortage".
>
> And Balbir's one and my one was proposed.
> This is new one. (so restart from v1), this is very new-born.
>
> While testing soft limit, my dilemma was following.
>
> - needs additional cost of can if implementation is naive (unavoidable?)

I think and I speak for my patches, you should look at soft limit
reclaim as helping global reclaim and not working against it. It
provides an opportunity to reclaim from groups that might not be
important to the system.

>
> - Inactive/Active rotation scheme of global LRU will be broken.
>
> - File/Anon reclaim ratio scheme of global LRU will be broken.
> - vm.swappiness will be ignored.
>

Not true, with my patches none of these are affected since the reclaim
for soft limits is limited to mem cgroup LRU lists only. Zone reclaim
that happens in parallel can of-course change the global LRU.

> - If using memcg's memory reclaim routine,
> - shrink_slab() will be never called.
> - stale SwapCache has no chance to be reclaimed (stale SwapCache means
> readed but not used one.)
> - memcg can have no memory in a zone.
> - memcg can have no Anon memory
> - lumpty_reclaim() is not called.
>
>
> This patch tries to avoid to use existing memcg's reclaim routine and
> just tell "Hints" to global LRU. This patch is briefly tested and shows
> good result to me. (But may not to you. plz brame me.)
>

I don't like the results, they are functionaly broken (see my other
email). Why should "B" get reclaimed from if it is not above its soft
limit? Why is there a swapout from "B"?


> Major characteristic is.
> - memcg will be inserted to softlimit-queue at charge() if usage excess
> soft limit.
> - softlimit-queue is a queue with priority. priority is detemined by size
> of excessing usage.
> - memcg's soft limit hooks is called by shrink_xxx_list() to show hints.
> - Behavior is affected by vm.swappiness and LRU scan rate is determined by
> global LRU's status.
>
> I'm sorry that I'm tend not to tell enough explanation. plz ask me.
> There will be much discussion points, anyway. As usual, I'm not in hurry.
>

The code seems to add a lot of complexity and does not achieve expected
functionality. I am going to start testing this series soon

>
> ==brief test result==
> On 2CPU/1.6GB bytes machine. create group A and B
> A. soft limit=300M
> B. no soft limit
>
> Run a malloc() program on B and allcoate 1G of memory. The program just
> sleeps after allocating memory and no memory refernce after it.
> Run make -j 6 and compile the kernel.
>
> When vm.swappiness = 60 => 60MB of memory are swapped out from B.
> When vm.swappiness = 10 => 1MB of memory are swapped out from B
>
> If no soft limit, 350MB of swap out will happen from B.(swapiness=60)
>
> I'll try much more complexed ones in the weekend.

Please see my response to this test result in a previous email.

--
Balbir
--
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/