diff options
author | KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> | 2009-01-07 21:08:08 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-01-08 11:31:06 -0500 |
commit | a636b327f731143ccc544b966cfd8de6cb6d72c6 (patch) | |
tree | e53b03b64e8ebca20649c2d877bc4c3ef54ec34c /mm/oom_kill.c | |
parent | 2e4d40915fb85207fe48cfc31201824ec6d7426e (diff) |
memcg: avoid unnecessary system-wide-oom-killer
Current mmtom has new oom function as pagefault_out_of_memory(). It's
added for select bad process rathar than killing current.
When memcg hit limit and calls OOM at page_fault, this handler called and
system-wide-oom handling happens. (means kernel panics if panic_on_oom is
true....)
To avoid overkill, check memcg's recent behavior before starting
system-wide-oom.
And this patch also fixes to guarantee "don't accnout against process with
TIF_MEMDIE". This is necessary for smooth OOM.
[akpm@linux-foundation.org: build fix]
Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Li Zefan <lizf@cn.fujitsu.com>
Cc: Balbir Singh <balbir@in.ibm.com>
Cc: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
Cc: Badari Pulavarty <pbadari@us.ibm.com>
Cc: Jan Blunck <jblunck@suse.de>
Cc: Hirokazu Takahashi <taka@valinux.co.jp>
Cc: Nick Piggin <nickpiggin@yahoo.com.au>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/oom_kill.c')
-rw-r--r-- | mm/oom_kill.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/mm/oom_kill.c b/mm/oom_kill.c index 6b9e758c98a5..fd150e3a2567 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c | |||
@@ -560,6 +560,13 @@ void pagefault_out_of_memory(void) | |||
560 | /* Got some memory back in the last second. */ | 560 | /* Got some memory back in the last second. */ |
561 | return; | 561 | return; |
562 | 562 | ||
563 | /* | ||
564 | * If this is from memcg, oom-killer is already invoked. | ||
565 | * and not worth to go system-wide-oom. | ||
566 | */ | ||
567 | if (mem_cgroup_oom_called(current)) | ||
568 | goto rest_and_return; | ||
569 | |||
563 | if (sysctl_panic_on_oom) | 570 | if (sysctl_panic_on_oom) |
564 | panic("out of memory from page fault. panic_on_oom is selected.\n"); | 571 | panic("out of memory from page fault. panic_on_oom is selected.\n"); |
565 | 572 | ||
@@ -571,6 +578,7 @@ void pagefault_out_of_memory(void) | |||
571 | * Give "p" a good chance of killing itself before we | 578 | * Give "p" a good chance of killing itself before we |
572 | * retry to allocate memory. | 579 | * retry to allocate memory. |
573 | */ | 580 | */ |
581 | rest_and_return: | ||
574 | if (!test_thread_flag(TIF_MEMDIE)) | 582 | if (!test_thread_flag(TIF_MEMDIE)) |
575 | schedule_timeout_uninterruptible(1); | 583 | schedule_timeout_uninterruptible(1); |
576 | } | 584 | } |