lkml.org 
[lkml]   [2011]   [May]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] trace: Set oom_score_adj to maximum for ring buffer allocating process
    Date
    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


    \
     
     \ /
      Last update: 2011-05-26 21:57    [W:3.854 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site