KAMEZAWA Hiroyuki 867578cbcc memcg: fix oom kill behavior
In current page-fault code,

	handle_mm_fault()
		-> ...
		-> mem_cgroup_charge()
		-> map page or handle error.
	-> check return code.

If page fault's return code is VM_FAULT_OOM, page_fault_out_of_memory() is
called.  But if it's caused by memcg, OOM should have been already
invoked.

Then, I added a patch: a636b327f731143ccc544b966cfd8de6cb6d72c6.  That
patch records last_oom_jiffies for memcg's sub-hierarchy and prevents
page_fault_out_of_memory from being invoked in near future.

But Nishimura-san reported that check by jiffies is not enough when the
system is terribly heavy.

This patch changes memcg's oom logic as.
 * If memcg causes OOM-kill, continue to retry.
 * remove jiffies check which is used now.
 * add memcg-oom-lock which works like perzone oom lock.
 * If current is killed(as a process), bypass charge.

Something more sophisticated can be added but this pactch does
fundamental things.
TODO:
 - add oom notifier
 - add permemcg disable-oom-kill flag and freezer at oom.
 - more chances for wake up oom waiter (when changing memory limit etc..)

Reviewed-by: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
Tested-by: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Balbir Singh <balbir@in.ibm.com>
Cc: David Rientjes <rientjes@google.com>
Signed-off-by: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2010-03-12 15:52:38 -08:00
..
2009-12-03 13:49:43 +01:00
2009-04-01 08:59:13 -07:00
2010-03-06 11:26:23 -08:00
2010-03-06 11:26:24 -08:00
2010-03-06 11:26:23 -08:00
2009-06-16 19:47:28 -07:00
2010-03-12 15:52:38 -08:00
2009-09-22 07:17:35 -07:00
2010-03-06 11:26:24 -08:00
2010-03-12 15:52:32 -08:00
2010-03-12 15:52:32 -08:00
2010-03-12 15:52:38 -08:00
2009-12-15 08:53:16 -08:00
2010-02-26 08:25:35 +01:00
2009-12-16 19:48:48 -05:00
2010-03-01 17:59:24 -08:00
2010-03-06 11:26:25 -08:00
2009-06-23 12:50:05 -07:00
2010-01-13 16:09:33 -08:00