linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
To: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Cc: linux-kernel@vger.kernel.org,
	Andrew Morton <akpm@linux-foundation.org>,
	David Rientjes <rientjes@google.com>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Rik van Riel <riel@redhat.com>, Oleg Nesterov <oleg@redhat.com>,
	linux-mm <linux-mm@kvack.org>, Andrey Vagin <avagin@openvz.org>,
	Hugh Dickins <hughd@google.com>,
	KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
	Mike Galbraith <efault@gmx.de>
Subject: [PATCH 3/5] oom: create oom autogroup
Date: Tue, 22 Mar 2011 20:08:02 +0900 (JST)	[thread overview]
Message-ID: <20110322200759.B067.A69D9226@jp.fujitsu.com> (raw)
In-Reply-To: <20110322194721.B05E.A69D9226@jp.fujitsu.com>

When plenty processes (eg fork bomb) are running, the TIF_MEMDIE task
never exit, at least, human feel it's never. therefore kernel become
hang-up.

"perf sched" tell us a hint.

 ------------------------------------------------------------------------------
  Task                  |   Runtime ms  | Average delay ms | Maximum delay ms |
 ------------------------------------------------------------------------------
  python:1754           |      0.197 ms | avg: 1731.727 ms | max: 3433.805 ms |
  python:1843           |      0.489 ms | avg: 1707.433 ms | max: 3622.955 ms |
  python:1715           |      0.220 ms | avg: 1707.125 ms | max: 3623.246 ms |
  python:1818           |      2.127 ms | avg: 1527.331 ms | max: 3622.553 ms |
  ...
  ...

Processes flood makes crazy scheduler delay. and then the victim process
can't run enough. Grr. Should we do?

Fortunately, we already have anti process flood framework, autogroup!
This patch reuse this framework and avoid kernel live lock.

Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
---
 include/linux/oom.h      |    1 +
 include/linux/sched.h    |    4 ++++
 init/main.c              |    2 ++
 kernel/sched_autogroup.c |    4 ++--
 mm/oom_kill.c            |   23 +++++++++++++++++++++++
 5 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/include/linux/oom.h b/include/linux/oom.h
index 5e3aa83..86bcea3 100644
--- a/include/linux/oom.h
+++ b/include/linux/oom.h
@@ -67,6 +67,7 @@ extern unsigned long badness(struct task_struct *p, struct mem_cgroup *mem,
 		      const nodemask_t *nodemask, unsigned long uptime);
 
 extern struct task_struct *find_lock_task_mm(struct task_struct *p);
+extern void oom_init(void);
 
 /* sysctls */
 extern int sysctl_oom_dump_tasks;
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 98fc7ed..bdaad3f 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -1947,6 +1947,8 @@ int sched_rt_handler(struct ctl_table *table, int write,
 #ifdef CONFIG_SCHED_AUTOGROUP
 extern unsigned int sysctl_sched_autogroup_enabled;
 
+extern struct autogroup *autogroup_create(void);
+extern void autogroup_move_group(struct task_struct *p, struct autogroup *ag);
 extern void sched_autogroup_create_attach(struct task_struct *p);
 extern void sched_autogroup_detach(struct task_struct *p);
 extern void sched_autogroup_fork(struct signal_struct *sig);
@@ -1956,6 +1958,8 @@ extern void proc_sched_autogroup_show_task(struct task_struct *p, struct seq_fil
 extern int proc_sched_autogroup_set_nice(struct task_struct *p, int *nice);
 #endif
 #else
+extern struct autogroup *autogroup_create(void) { return NULL; }
+extern void autogroup_move_group(struct task_struct *p, struct autogroup *ag) {}
 static inline void sched_autogroup_create_attach(struct task_struct *p) { }
 static inline void sched_autogroup_detach(struct task_struct *p) { }
 static inline void sched_autogroup_fork(struct signal_struct *sig) { }
diff --git a/init/main.c b/init/main.c
index 4a9479e..2c6e8da 100644
--- a/init/main.c
+++ b/init/main.c
@@ -68,6 +68,7 @@
 #include <linux/shmem_fs.h>
 #include <linux/slab.h>
 #include <linux/perf_event.h>
+#include <linux/oom.h>
 
 #include <asm/io.h>
 #include <asm/bugs.h>
@@ -549,6 +550,7 @@ asmlinkage void __init start_kernel(void)
 	gfp_allowed_mask = __GFP_BITS_MASK;
 
 	kmem_cache_init_late();
+	oom_init();
 
 	/*
 	 * HACK ALERT! This is early. We're enabling the console before
diff --git a/kernel/sched_autogroup.c b/kernel/sched_autogroup.c
index 5946ac5..6a1a2c4 100644
--- a/kernel/sched_autogroup.c
+++ b/kernel/sched_autogroup.c
@@ -63,7 +63,7 @@ static inline struct autogroup *autogroup_task_get(struct task_struct *p)
 static void free_rt_sched_group(struct task_group *tg);
 #endif
 
-static inline struct autogroup *autogroup_create(void)
+struct autogroup *autogroup_create(void)
 {
 	struct autogroup *ag = kzalloc(sizeof(*ag), GFP_KERNEL);
 	struct task_group *tg;
@@ -143,7 +143,7 @@ autogroup_task_group(struct task_struct *p, struct task_group *tg)
 	return tg;
 }
 
-static void
+void
 autogroup_move_group(struct task_struct *p, struct autogroup *ag)
 {
 	struct autogroup *prev;
diff --git a/mm/oom_kill.c b/mm/oom_kill.c
index 739dee4..2519e6a 100644
--- a/mm/oom_kill.c
+++ b/mm/oom_kill.c
@@ -38,6 +38,28 @@ int sysctl_oom_kill_allocating_task;
 int sysctl_oom_dump_tasks = 1;
 static DEFINE_SPINLOCK(zone_scan_lock);
 
+#ifdef CONFIG_SCHED_AUTOGROUP
+struct autogroup *oom_ag;
+
+void __init oom_init(void)
+{
+	oom_ag = autogroup_create();
+}
+
+static void oom_move_oom_ag(struct task_struct *p)
+{
+	autogroup_move_group(p, oom_ag);
+}
+#else
+void __init oom_init(void)
+{
+}
+
+static void oom_move_oom_ag(struct task_struct *p)
+{
+}
+#endif
+
 #ifdef CONFIG_NUMA
 /**
  * has_intersects_mems_allowed() - check task eligiblity for kill
@@ -432,6 +454,7 @@ static int oom_kill_task(struct task_struct *p, struct mem_cgroup *mem)
 		}
 
 	set_tsk_thread_flag(p, TIF_MEMDIE);
+	oom_move_oom_ag(p);
 	force_sig(SIGKILL, p);
 
 	return 0;
-- 
1.6.5.2



--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  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@kvack.org"> email@kvack.org </a>

  parent reply	other threads:[~2011-03-22 11:08 UTC|newest]

Thread overview: 59+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20110314232156.0c363813.akpm@linux-foundation.org>
     [not found] ` <20110315153801.3526.A69D9226@jp.fujitsu.com>
2011-03-22 11:04   ` [patch 0/5] oom: a few anti fork bomb patches KOSAKI Motohiro
2011-03-22 11:05     ` [PATCH 1/5] vmscan: remove all_unreclaimable check from direct reclaim path completely KOSAKI Motohiro
2011-03-22 14:49       ` Minchan Kim
2011-03-23  5:21         ` KOSAKI Motohiro
2011-03-23  6:59           ` Minchan Kim
2011-03-23  7:13             ` KOSAKI Motohiro
2011-03-23  8:24               ` Minchan Kim
2011-03-23  8:44                 ` KOSAKI Motohiro
2011-03-23  9:02                   ` Minchan Kim
2011-03-24  2:11                     ` KOSAKI Motohiro
2011-03-24  2:21                       ` Andrew Morton
2011-03-24  2:48                         ` KOSAKI Motohiro
2011-03-24  3:04                           ` Andrew Morton
2011-03-24  5:35                             ` KOSAKI Motohiro
2011-03-24  4:19                       ` Minchan Kim
2011-03-24  5:35                         ` KOSAKI Motohiro
2011-03-24  5:53                           ` Minchan Kim
2011-03-24  6:16                             ` KOSAKI Motohiro
2011-03-24  6:32                               ` Minchan Kim
2011-03-24  7:03                                 ` KOSAKI Motohiro
2011-03-24  7:25                                   ` Minchan Kim
2011-03-24  7:28                                     ` KOSAKI Motohiro
2011-03-24  7:34                                       ` Minchan Kim
2011-03-24  7:41                                         ` Minchan Kim
2011-03-24  7:43                                         ` KOSAKI Motohiro
2011-03-24  7:43                           ` Minchan Kim
2011-03-23  7:41       ` KAMEZAWA Hiroyuki
2011-03-23  7:55         ` KOSAKI Motohiro
2011-03-22 11:06     ` [PATCH 2/5] Revert "oom: give the dying task a higher priority" KOSAKI Motohiro
2011-03-23  7:42       ` KAMEZAWA Hiroyuki
2011-03-23 13:40         ` Luis Claudio R. Goncalves
2011-03-24  0:06           ` KOSAKI Motohiro
2011-03-24 15:27       ` Minchan Kim
2011-03-28  9:48         ` KOSAKI Motohiro
2011-03-28 12:28           ` Minchan Kim
2011-03-28  9:51         ` Peter Zijlstra
2011-03-28 12:21           ` Minchan Kim
2011-03-28 12:28             ` Peter Zijlstra
2011-03-28 12:40               ` Minchan Kim
2011-03-28 13:10                 ` Luis Claudio R. Goncalves
2011-03-28 13:18                   ` Peter Zijlstra
2011-03-28 13:56                     ` Luis Claudio R. Goncalves
2011-03-29  2:46                     ` KOSAKI Motohiro
2011-03-28 13:48                   ` Minchan Kim
2011-03-22 11:08     ` KOSAKI Motohiro [this message]
2011-03-22 23:21       ` [PATCH 3/5] oom: create oom autogroup Minchan Kim
2011-03-23  1:27         ` KOSAKI Motohiro
2011-03-23  2:41           ` Mike Galbraith
2011-03-22 11:08     ` [PATCH 4/5] mm: introduce wait_on_page_locked_killable KOSAKI Motohiro
2011-03-23  7:44       ` KAMEZAWA Hiroyuki
2011-03-24 15:04       ` Minchan Kim
2011-03-22 11:09     ` [PATCH 5/5] x86,mm: make pagefault killable KOSAKI Motohiro
2011-03-23  7:49       ` KAMEZAWA Hiroyuki
2011-03-23  8:09         ` KOSAKI Motohiro
2011-03-23 14:34           ` Linus Torvalds
2011-03-24 15:10       ` Minchan Kim
2011-03-24 17:13       ` Oleg Nesterov
2011-03-24 17:34         ` Linus Torvalds
2011-03-28  7:00           ` KOSAKI Motohiro

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110322200759.B067.A69D9226@jp.fujitsu.com \
    --to=kosaki.motohiro@jp.fujitsu.com \
    --cc=akpm@linux-foundation.org \
    --cc=avagin@openvz.org \
    --cc=efault@gmx.de \
    --cc=hughd@google.com \
    --cc=kamezawa.hiroyu@jp.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=oleg@redhat.com \
    --cc=riel@redhat.com \
    --cc=rientjes@google.com \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox