All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] trace: Set oom_score_adj to maximum for ring buffer allocating process
@ 2011-05-26 19:52 Vaibhav Nagarnaik
  2011-05-26 20:04 ` Steven Rostedt
  2011-05-27 17:58 ` Vaibhav Nagarnaik
  0 siblings, 2 replies; 30+ messages in thread
From: Vaibhav Nagarnaik @ 2011-05-26 19:52 UTC (permalink / raw)
  To: Steven Rostedt, Ingo Molnar, Frederic Weisbecker
  Cc: Michael Rubin, David Sharp, linux-kernel, Vaibhav Nagarnaik

The tracing ring buffer is allocated from kernel memory. While
allocating the memory, if OOM happens, the allocating process might not
be the one that gets killed, since the ring-buffer memory is not
allocated as process memory. Thus random processes might get killed
during the allocation.

This patch makes sure that the allocating process is considered the most
likely oom-kill-able process while the allocating is going on. Thus if
oom-killer is invoked because of ring-buffer allocation, it is easier
for the ring buffer memory to be freed and save important system
processes from being killed.

Signed-off-by: Vaibhav Nagarnaik <vnagarnaik@google.com>
---
 kernel/trace/trace.c |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index b926578..15a667a 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -37,6 +37,7 @@
 #include <linux/init.h>
 #include <linux/poll.h>
 #include <linux/fs.h>
+#include <linux/oom.h>
 
 #include "trace.h"
 #include "trace_output.h"
@@ -3498,6 +3499,7 @@ tracing_entries_write(struct file *filp, const char __user *ubuf,
 	unsigned long val;
 	char buf[64];
 	int ret;
+	int oom_score_adj;
 
 	if (cnt >= sizeof(buf))
 		return -EINVAL;
@@ -3518,7 +3520,14 @@ tracing_entries_write(struct file *filp, const char __user *ubuf,
 	/* value is in KB */
 	val <<= 10;
 
+	/*
+	 * make sure this process is picked over others to be killed in OOM
+	 * condition
+	 */
+	oom_score_adj = test_set_oom_score_adj(OOM_SCORE_ADJ_MAX);
 	ret = tracing_resize_ring_buffer(val);
+	/* restore the original oom_score_adj value */
+	test_set_oom_score_adj(oom_score_adj);
 	if (ret < 0)
 		return ret;
 
-- 
1.7.3.1


^ permalink raw reply related	[flat|nested] 30+ messages in thread

end of thread, other threads:[~2011-07-05 12:54 UTC | newest]

Thread overview: 30+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-05-26 19:52 [PATCH] trace: Set oom_score_adj to maximum for ring buffer allocating process Vaibhav Nagarnaik
2011-05-26 20:04 ` Steven Rostedt
2011-05-26 20:22   ` David Rientjes
2011-05-26 20:23   ` Vaibhav Nagarnaik
2011-05-26 20:33     ` David Rientjes
2011-05-26 21:00       ` Steven Rostedt
2011-05-26 22:28         ` Vaibhav Nagarnaik
2011-05-26 23:38           ` Steven Rostedt
2011-05-27  9:43             ` David Rientjes
2011-05-27 12:48               ` Steven Rostedt
2011-05-26 23:23         ` Vaibhav Nagarnaik
2011-05-27 17:58 ` Vaibhav Nagarnaik
2011-05-27 23:22   ` David Rientjes
2011-05-28  0:44     ` Vaibhav Nagarnaik
2011-05-28  1:50       ` Steven Rostedt
2011-05-30  6:23         ` KOSAKI Motohiro
2011-05-30 23:54           ` Vaibhav Nagarnaik
2011-05-30 23:46         ` Vaibhav Nagarnaik
2011-06-07 23:07           ` Steven Rostedt
2011-06-07 23:30             ` Vaibhav Nagarnaik
2011-06-07 23:41   ` [PATCH] trace: Set __GFP_NORETRY flag " Vaibhav Nagarnaik
2011-06-07 23:47     ` Frederic Weisbecker
2011-06-08  0:01     ` [PATCH v2] " Vaibhav Nagarnaik
2011-06-08  2:30       ` David Rientjes
2011-06-09 11:37       ` KOSAKI Motohiro
2011-06-09 12:14         ` Steven Rostedt
2011-06-09 18:41           ` Vaibhav Nagarnaik
2011-06-09 19:42           ` David Rientjes
2011-06-09 19:52             ` Steven Rostedt
2011-07-05 12:54       ` [tip:perf/core] ring-buffer: " tip-bot for Vaibhav Nagarnaik

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.