Prev: oom: oom_kill_process() doesn't select kthread child
Next: oom: make oom_unkillable_task() helper function
From: Minchan Kim on 16 Jun 2010 11:20 On Wed, Jun 16, 2010 at 08:32:45PM +0900, KOSAKI Motohiro wrote: > When oom_kill_allocating_task is enabled, an argument of > oom_kill_process is not selected by select_bad_process(), but > just out_of_memory() caller task. It mean the task can be > unkillable. check it first. > > Signed-off-by: KOSAKI Motohiro <kosaki.motohiro(a)jp.fujitsu.com> > --- > mm/oom_kill.c | 11 +++++++++++ > 1 files changed, 11 insertions(+), 0 deletions(-) > > diff --git a/mm/oom_kill.c b/mm/oom_kill.c > index 6ca6cb8..3e48023 100644 > --- a/mm/oom_kill.c > +++ b/mm/oom_kill.c > @@ -436,6 +436,17 @@ static int oom_kill_process(struct task_struct *p, gfp_t gfp_mask, int order, > unsigned long victim_points = 0; > struct timespec uptime; > > + /* > + * When oom_kill_allocating_task is enabled, p can be > + * unkillable. check it first. > + */ > + if (is_global_init(p) || (p->flags & PF_KTHREAD)) > + return 1; > + if (mem && !task_in_mem_cgroup(p, mem)) > + return 1; > + if (!has_intersects_mems_allowed(p, nodemask)) > + return 1; > + I think this check could be done before oom_kill_proces in case of sysctl_oom_kill_allocating_task, too. -- Kind regards, Minchan Kim -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: David Rientjes on 17 Jun 2010 00:20 On Thu, 17 Jun 2010, KOSAKI Motohiro wrote: > When oom_kill_allocating_task is enabled, an argument task of > oom_kill_process is not selected by select_bad_process(), It's > just out_of_memory() caller task. It mean the task can be > unkillable. check it first. > This should be unnecessary if oom_kill_process() appropriately returns non-zero when it cannot kill a task. What problem are you addressing with this fix? -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Minchan Kim on 21 Jun 2010 10:10 On Mon, Jun 21, 2010 at 08:45:45PM +0900, KOSAKI Motohiro wrote: > > On Thu, 17 Jun 2010, KOSAKI Motohiro wrote: > > > > > When oom_kill_allocating_task is enabled, an argument task of > > > oom_kill_process is not selected by select_bad_process(), It's > > > just out_of_memory() caller task. It mean the task can be > > > unkillable. check it first. > > > > > > > This should be unnecessary if oom_kill_process() appropriately returns > > non-zero when it cannot kill a task. What problem are you addressing with > > this fix? > > oom_kill_process() only check its children are unkillable, not its own. > To add check oom_kill_process() also solve the issue. as my previous patch does. > but Minchan pointed out it's unnecessary. because when !oom_kill_allocating_task > case, we have the same check in select_bad_process(). > > > If kthread doesn't use other process's mm, oom_kill_process can return non-zero. and it might be no problem. but let's consider following case that kthread use use_mm. if (oom_kill_allocating_task) oom_kill_process pr_err("kill process.."); <-- false alarm oom_kill_task find_lock_task_mm if kthread use use_mm kill kernel thread Yes. it's a just theory that kthread use use_mm and is selected as victim. But although kthread doesn't use use_mm, oom_kill_process emits false alarm. As a matter of fact, it doesn't kill itself or sacrifice child. I think victim process selection should be done before calling oom_kill_process. oom_kill_process and oom_kill_task's role is just to try to kill the process or process's children by best effort as function's name. -- Kind regards, Minchan Kim -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: David Rientjes on 21 Jun 2010 16:10 On Mon, 21 Jun 2010, KOSAKI Motohiro wrote: > > > When oom_kill_allocating_task is enabled, an argument task of > > > oom_kill_process is not selected by select_bad_process(), It's > > > just out_of_memory() caller task. It mean the task can be > > > unkillable. check it first. > > > > > > > This should be unnecessary if oom_kill_process() appropriately returns > > non-zero when it cannot kill a task. What problem are you addressing with > > this fix? > > oom_kill_process() only check its children are unkillable, not its own. No, oom_kill_process() returns the value of oom_kill_task(victim) which is non-zero for !victim->mm in mmotm-2010-06-11-16-40 (and 2.6.34 although victim == p in that case). -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Minchan Kim on 30 Jun 2010 10:10
On Wed, Jun 30, 2010 at 06:29:22PM +0900, KOSAKI Motohiro wrote: > When oom_kill_allocating_task is enabled, an argument task of > oom_kill_process is not selected by select_bad_process(), It's > just out_of_memory() caller task. It mean the task can be > unkillable. check it first. > > Signed-off-by: KOSAKI Motohiro <kosaki.motohiro(a)jp.fujitsu.com> Reviewed-by: Minchan Kim <minchan.kim(a)gmail.com> -- Kind regards, Minchan Kim -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |