From: David Rientjes <rientjes@google.com> To: Andrew Morton <akpm@linux-foundation.org> Cc: Rik van Riel <riel@redhat.com>, KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>, Nick Piggin <npiggin@suse.de>, Andrea Arcangeli <aarcange@redhat.com>, Balbir Singh <balbir@linux.vnet.ibm.com>, Lubos Lunak <l.lunak@suse.cz>, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [patch 7/7 -mm] oom: remove unnecessary code and cleanup Date: Wed, 10 Feb 2010 08:32:24 -0800 (PST) [thread overview] Message-ID: <alpine.DEB.2.00.1002100230010.8001@chino.kir.corp.google.com> (raw) In-Reply-To: <alpine.DEB.2.00.1002100224210.8001@chino.kir.corp.google.com> Remove the redundancy in __oom_kill_task() since: - init can never be passed to this function: it will never be PF_EXITING or selectable from select_bad_process(), and - it will never be passed a task from oom_kill_task() without an ->mm and we're unconcerned about detachment from exiting tasks, there's no reason to protect them against SIGKILL or access to memory reserves. Also moves the kernel log message to a higher level since the verbosity is not always emitted here; we need not print an error message if an exiting task is given a longer timeslice. Signed-off-by: David Rientjes <rientjes@google.com> --- mm/oom_kill.c | 64 ++++++++++++++------------------------------------------ 1 files changed, 16 insertions(+), 48 deletions(-) diff --git a/mm/oom_kill.c b/mm/oom_kill.c --- a/mm/oom_kill.c +++ b/mm/oom_kill.c @@ -400,67 +400,35 @@ static void dump_header(struct task_struct *p, gfp_t gfp_mask, int order, dump_tasks(mem); } -#define K(x) ((x) << (PAGE_SHIFT-10)) - /* - * Send SIGKILL to the selected process irrespective of CAP_SYS_RAW_IO - * flag though it's unlikely that we select a process with CAP_SYS_RAW_IO - * set. + * Give the oom killed task high priority and access to memory reserves so that + * it may quickly exit and free its memory. */ -static void __oom_kill_task(struct task_struct *p, int verbose) +static void __oom_kill_task(struct task_struct *p) { - if (is_global_init(p)) { - WARN_ON(1); - printk(KERN_WARNING "tried to kill init!\n"); - return; - } - - task_lock(p); - if (!p->mm) { - WARN_ON(1); - printk(KERN_WARNING "tried to kill an mm-less task %d (%s)!\n", - task_pid_nr(p), p->comm); - task_unlock(p); - return; - } - - if (verbose) - printk(KERN_ERR "Killed process %d (%s) " - "vsz:%lukB, anon-rss:%lukB, file-rss:%lukB\n", - task_pid_nr(p), p->comm, - K(p->mm->total_vm), - K(get_mm_counter(p->mm, MM_ANONPAGES)), - K(get_mm_counter(p->mm, MM_FILEPAGES))); - task_unlock(p); - - /* - * We give our sacrificial lamb high priority and access to - * all the memory it needs. That way it should be able to - * exit() and clear out its resources quickly... - */ p->rt.time_slice = HZ; set_tsk_thread_flag(p, TIF_MEMDIE); - force_sig(SIGKILL, p); } +#define K(x) ((x) << (PAGE_SHIFT-10)) static int oom_kill_task(struct task_struct *p) { - /* WARNING: mm may not be dereferenced since we did not obtain its - * value from get_task_mm(p). This is OK since all we need to do is - * compare mm to q->mm below. - * - * Furthermore, even if mm contains a non-NULL value, p->mm may - * change to NULL at any time since we do not hold task_lock(p). - * However, this is of no concern to us. - */ - if (!p->mm || p->signal->oom_adj == OOM_DISABLE) + task_lock(p); + if (!p->mm || p->signal->oom_adj == OOM_DISABLE) { + task_unlock(p); return 1; + } + pr_err("Killed process %d (%s) total-vm:%lukB, anon-rss:%lukB, file-rss:%lukB\n", + task_pid_nr(p), p->comm, K(p->mm->total_vm), + K(get_mm_counter(p->mm, MM_ANONPAGES)), + K(get_mm_counter(p->mm, MM_FILEPAGES))); + task_unlock(p); - __oom_kill_task(p, 1); - + __oom_kill_task(p); return 0; } +#undef K static int oom_kill_process(struct task_struct *p, gfp_t gfp_mask, int order, unsigned int points, unsigned long totalpages, @@ -479,7 +447,7 @@ static int oom_kill_process(struct task_struct *p, gfp_t gfp_mask, int order, * its children or threads, just set TIF_MEMDIE so it can die quickly */ if (p->flags & PF_EXITING) { - __oom_kill_task(p, 0); + __oom_kill_task(p); return 0; }
WARNING: multiple messages have this Message-ID (diff)
From: David Rientjes <rientjes@google.com> To: Andrew Morton <akpm@linux-foundation.org> Cc: Rik van Riel <riel@redhat.com>, KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>, Nick Piggin <npiggin@suse.de>, Andrea Arcangeli <aarcange@redhat.com>, Balbir Singh <balbir@linux.vnet.ibm.com>, Lubos Lunak <l.lunak@suse.cz>, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [patch 7/7 -mm] oom: remove unnecessary code and cleanup Date: Wed, 10 Feb 2010 08:32:24 -0800 (PST) [thread overview] Message-ID: <alpine.DEB.2.00.1002100230010.8001@chino.kir.corp.google.com> (raw) In-Reply-To: <alpine.DEB.2.00.1002100224210.8001@chino.kir.corp.google.com> Remove the redundancy in __oom_kill_task() since: - init can never be passed to this function: it will never be PF_EXITING or selectable from select_bad_process(), and - it will never be passed a task from oom_kill_task() without an ->mm and we're unconcerned about detachment from exiting tasks, there's no reason to protect them against SIGKILL or access to memory reserves. Also moves the kernel log message to a higher level since the verbosity is not always emitted here; we need not print an error message if an exiting task is given a longer timeslice. Signed-off-by: David Rientjes <rientjes@google.com> --- mm/oom_kill.c | 64 ++++++++++++++------------------------------------------ 1 files changed, 16 insertions(+), 48 deletions(-) diff --git a/mm/oom_kill.c b/mm/oom_kill.c --- a/mm/oom_kill.c +++ b/mm/oom_kill.c @@ -400,67 +400,35 @@ static void dump_header(struct task_struct *p, gfp_t gfp_mask, int order, dump_tasks(mem); } -#define K(x) ((x) << (PAGE_SHIFT-10)) - /* - * Send SIGKILL to the selected process irrespective of CAP_SYS_RAW_IO - * flag though it's unlikely that we select a process with CAP_SYS_RAW_IO - * set. + * Give the oom killed task high priority and access to memory reserves so that + * it may quickly exit and free its memory. */ -static void __oom_kill_task(struct task_struct *p, int verbose) +static void __oom_kill_task(struct task_struct *p) { - if (is_global_init(p)) { - WARN_ON(1); - printk(KERN_WARNING "tried to kill init!\n"); - return; - } - - task_lock(p); - if (!p->mm) { - WARN_ON(1); - printk(KERN_WARNING "tried to kill an mm-less task %d (%s)!\n", - task_pid_nr(p), p->comm); - task_unlock(p); - return; - } - - if (verbose) - printk(KERN_ERR "Killed process %d (%s) " - "vsz:%lukB, anon-rss:%lukB, file-rss:%lukB\n", - task_pid_nr(p), p->comm, - K(p->mm->total_vm), - K(get_mm_counter(p->mm, MM_ANONPAGES)), - K(get_mm_counter(p->mm, MM_FILEPAGES))); - task_unlock(p); - - /* - * We give our sacrificial lamb high priority and access to - * all the memory it needs. That way it should be able to - * exit() and clear out its resources quickly... - */ p->rt.time_slice = HZ; set_tsk_thread_flag(p, TIF_MEMDIE); - force_sig(SIGKILL, p); } +#define K(x) ((x) << (PAGE_SHIFT-10)) static int oom_kill_task(struct task_struct *p) { - /* WARNING: mm may not be dereferenced since we did not obtain its - * value from get_task_mm(p). This is OK since all we need to do is - * compare mm to q->mm below. - * - * Furthermore, even if mm contains a non-NULL value, p->mm may - * change to NULL at any time since we do not hold task_lock(p). - * However, this is of no concern to us. - */ - if (!p->mm || p->signal->oom_adj == OOM_DISABLE) + task_lock(p); + if (!p->mm || p->signal->oom_adj == OOM_DISABLE) { + task_unlock(p); return 1; + } + pr_err("Killed process %d (%s) total-vm:%lukB, anon-rss:%lukB, file-rss:%lukB\n", + task_pid_nr(p), p->comm, K(p->mm->total_vm), + K(get_mm_counter(p->mm, MM_ANONPAGES)), + K(get_mm_counter(p->mm, MM_FILEPAGES))); + task_unlock(p); - __oom_kill_task(p, 1); - + __oom_kill_task(p); return 0; } +#undef K static int oom_kill_process(struct task_struct *p, gfp_t gfp_mask, int order, unsigned int points, unsigned long totalpages, @@ -479,7 +447,7 @@ static int oom_kill_process(struct task_struct *p, gfp_t gfp_mask, int order, * its children or threads, just set TIF_MEMDIE so it can die quickly */ if (p->flags & PF_EXITING) { - __oom_kill_task(p, 0); + __oom_kill_task(p); return 0; } -- 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/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2010-02-10 16:32 UTC|newest] Thread overview: 140+ messages / expand[flat|nested] mbox.gz Atom feed top 2010-02-10 16:32 [patch 0/7 -mm] oom killer rewrite David Rientjes 2010-02-10 16:32 ` David Rientjes 2010-02-10 16:32 ` [patch 1/7 -mm] oom: filter tasks not sharing the same cpuset David Rientjes 2010-02-10 16:32 ` David Rientjes 2010-02-10 17:08 ` Rik van Riel 2010-02-10 17:08 ` Rik van Riel 2010-02-11 23:52 ` KAMEZAWA Hiroyuki 2010-02-11 23:52 ` KAMEZAWA Hiroyuki 2010-02-15 2:56 ` KOSAKI Motohiro 2010-02-15 2:56 ` KOSAKI Motohiro 2010-02-15 22:06 ` David Rientjes 2010-02-15 22:06 ` David Rientjes 2010-02-16 4:52 ` KOSAKI Motohiro 2010-02-16 4:52 ` KOSAKI Motohiro 2010-02-16 6:01 ` KOSAKI Motohiro 2010-02-16 6:01 ` KOSAKI Motohiro 2010-02-16 7:03 ` Nick Piggin 2010-02-16 7:03 ` Nick Piggin 2010-02-16 8:49 ` David Rientjes 2010-02-16 8:49 ` David Rientjes 2010-02-16 9:04 ` Nick Piggin 2010-02-16 9:04 ` Nick Piggin 2010-02-16 9:10 ` David Rientjes 2010-02-16 9:10 ` David Rientjes 2010-02-16 8:46 ` David Rientjes 2010-02-16 8:46 ` David Rientjes 2010-02-10 16:32 ` [patch 2/7 -mm] oom: sacrifice child with highest badness score for parent David Rientjes 2010-02-10 16:32 ` David Rientjes 2010-02-10 20:52 ` Rik van Riel 2010-02-10 20:52 ` Rik van Riel 2010-02-12 0:00 ` KAMEZAWA Hiroyuki 2010-02-12 0:00 ` KAMEZAWA Hiroyuki 2010-02-12 0:15 ` David Rientjes 2010-02-12 0:15 ` David Rientjes 2010-02-13 2:49 ` Minchan Kim 2010-02-13 2:49 ` Minchan Kim 2010-02-15 3:08 ` KOSAKI Motohiro 2010-02-15 3:08 ` KOSAKI Motohiro 2010-02-10 16:32 ` [patch 3/7 -mm] oom: select task from tasklist for mempolicy ooms David Rientjes 2010-02-10 16:32 ` David Rientjes 2010-02-10 22:47 ` Rik van Riel 2010-02-10 22:47 ` Rik van Riel 2010-02-15 5:03 ` KOSAKI Motohiro 2010-02-15 5:03 ` KOSAKI Motohiro 2010-02-15 22:11 ` David Rientjes 2010-02-15 22:11 ` David Rientjes 2010-02-16 5:15 ` KOSAKI Motohiro 2010-02-16 5:15 ` KOSAKI Motohiro 2010-02-16 21:52 ` David Rientjes 2010-02-16 21:52 ` David Rientjes 2010-02-17 0:48 ` David Rientjes 2010-02-17 0:48 ` David Rientjes 2010-02-17 1:13 ` KOSAKI Motohiro 2010-02-17 1:13 ` KOSAKI Motohiro 2010-02-10 16:32 ` [patch 4/7 -mm] oom: badness heuristic rewrite David Rientjes 2010-02-10 16:32 ` David Rientjes 2010-02-11 4:10 ` Rik van Riel 2010-02-11 4:10 ` Rik van Riel 2010-02-11 9:14 ` David Rientjes 2010-02-11 9:14 ` David Rientjes 2010-02-11 15:07 ` Nick Bowler 2010-02-11 15:07 ` Nick Bowler 2010-02-11 21:01 ` David Rientjes 2010-02-11 21:01 ` David Rientjes 2010-02-11 21:43 ` Andrew Morton 2010-02-11 21:43 ` Andrew Morton 2010-02-11 21:51 ` David Rientjes 2010-02-11 21:51 ` David Rientjes 2010-02-11 22:31 ` Andrew Morton 2010-02-11 22:31 ` Andrew Morton 2010-02-11 22:42 ` David Rientjes 2010-02-11 22:42 ` David Rientjes 2010-02-11 23:11 ` Andrew Morton 2010-02-11 23:11 ` Andrew Morton 2010-02-11 23:31 ` David Rientjes 2010-02-11 23:31 ` David Rientjes 2010-02-11 23:37 ` Andrew Morton 2010-02-11 23:37 ` Andrew Morton 2010-02-12 13:56 ` Minchan Kim 2010-02-12 13:56 ` Minchan Kim 2010-02-12 21:00 ` David Rientjes 2010-02-12 21:00 ` David Rientjes 2010-02-13 2:45 ` Minchan Kim 2010-02-13 2:45 ` Minchan Kim 2010-02-15 21:54 ` David Rientjes 2010-02-15 21:54 ` David Rientjes 2010-02-16 13:14 ` Minchan Kim 2010-02-16 13:14 ` Minchan Kim 2010-02-16 21:41 ` David Rientjes 2010-02-16 21:41 ` David Rientjes 2010-02-17 7:41 ` Minchan Kim 2010-02-17 7:41 ` Minchan Kim 2010-02-17 9:23 ` David Rientjes 2010-02-17 9:23 ` David Rientjes 2010-02-17 13:08 ` Minchan Kim 2010-02-17 13:08 ` Minchan Kim 2010-02-15 8:05 ` KOSAKI Motohiro 2010-02-15 8:05 ` KOSAKI Motohiro 2010-02-10 16:32 ` [patch 5/7 -mm] oom: replace sysctls with quick mode David Rientjes 2010-02-10 16:32 ` David Rientjes 2010-02-12 0:26 ` KAMEZAWA Hiroyuki 2010-02-12 0:26 ` KAMEZAWA Hiroyuki 2010-02-12 9:58 ` David Rientjes 2010-02-12 9:58 ` David Rientjes 2010-02-15 8:09 ` KOSAKI Motohiro 2010-02-15 8:09 ` KOSAKI Motohiro 2010-02-15 22:15 ` David Rientjes 2010-02-15 22:15 ` David Rientjes 2010-02-16 5:25 ` KOSAKI Motohiro 2010-02-16 5:25 ` KOSAKI Motohiro 2010-02-16 9:04 ` David Rientjes 2010-02-16 9:04 ` David Rientjes 2010-02-10 16:32 ` [patch 6/7 -mm] oom: avoid oom killer for lowmem allocations David Rientjes 2010-02-10 16:32 ` David Rientjes 2010-02-11 4:13 ` Rik van Riel 2010-02-11 4:13 ` Rik van Riel 2010-02-11 9:19 ` David Rientjes 2010-02-11 9:19 ` David Rientjes 2010-02-11 14:08 ` Rik van Riel 2010-02-11 14:08 ` Rik van Riel 2010-02-12 1:28 ` KAMEZAWA Hiroyuki 2010-02-12 1:28 ` KAMEZAWA Hiroyuki 2010-02-12 10:06 ` David Rientjes 2010-02-12 10:06 ` David Rientjes 2010-02-15 0:09 ` KAMEZAWA Hiroyuki 2010-02-15 0:09 ` KAMEZAWA Hiroyuki 2010-02-15 22:01 ` David Rientjes 2010-02-15 22:01 ` David Rientjes 2010-02-15 8:29 ` KOSAKI Motohiro 2010-02-15 8:29 ` KOSAKI Motohiro 2010-02-10 16:32 ` David Rientjes [this message] 2010-02-10 16:32 ` [patch 7/7 -mm] oom: remove unnecessary code and cleanup David Rientjes 2010-02-12 0:12 ` KAMEZAWA Hiroyuki 2010-02-12 0:12 ` KAMEZAWA Hiroyuki 2010-02-12 0:21 ` David Rientjes 2010-02-12 0:21 ` David Rientjes 2010-02-15 8:31 ` KOSAKI Motohiro 2010-02-15 8:31 ` KOSAKI Motohiro 2010-02-15 2:51 ` [patch 0/7 -mm] oom killer rewrite KOSAKI Motohiro 2010-02-15 2:51 ` 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=alpine.DEB.2.00.1002100230010.8001@chino.kir.corp.google.com \ --to=rientjes@google.com \ --cc=aarcange@redhat.com \ --cc=akpm@linux-foundation.org \ --cc=balbir@linux.vnet.ibm.com \ --cc=kamezawa.hiroyu@jp.fujitsu.com \ --cc=l.lunak@suse.cz \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=npiggin@suse.de \ --cc=riel@redhat.com \ /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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.