lkml.org 
[lkml]   [2011]   [Sep]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 2/2] oom: give bonus to frozen processes
    On Fri 26-08-11 11:13:40, David Rientjes wrote:
    > On Fri, 26 Aug 2011, Michal Hocko wrote:
    [...]
    > > I am not saying the bonus is necessary, though. It depends on what
    > > the freezer is used for (e.g. freeze a process which went wild and
    > > debug what went wrong wouldn't welcome that somebody killed it or other
    > > (mis)use which relies on D state).
    [...]
    > If it actually does come down to a heuristic change, then it need not
    > happen in the oom killer: the freezing code would need to use
    > test_set_oom_score_adj() to temporarily reduce the oom_score_adj for that
    > task until it comes out of the refrigerator. We already use that in ksm
    > and swapoff to actually prefer threads, but we can use it to bias against
    > threads as well.

    Let's try it with a heuristic change first. If you really do not like
    it, we can move to oom_scode_adj. I like the heuristic change little bit
    more because it is at the same place as the root bonus.
    ---
    From 2f8fbab922f353eebaa9fa1c5fcb59a59cf2f441 Mon Sep 17 00:00:00 2001
    From: Michal Hocko <mhocko@suse.cz>
    Date: Fri, 16 Sep 2011 15:51:25 +0200
    Subject: [PATCH 2/2] oom: give bonus to frozen processes

    We do not want to kill frozen processes if there are some processes that
    could be killed instead. Frozen tasks are in uninterruptible sleep and
    somebody might rely on that.
    Let's give those tasks a bonus so that they would be selected only when
    really necessary. The size of the bonus is questionable but let's start
    with the same bonus we give to root processes.

    Signed-off-by: Michal Hocko <mhocko@suse.cz>
    ---
    include/linux/oom.h | 6 ++++++
    mm/oom_kill.c | 10 +++++++++-
    2 files changed, 15 insertions(+), 1 deletions(-)

    diff --git a/include/linux/oom.h b/include/linux/oom.h
    index 13b7b02e..960e2de 100644
    --- a/include/linux/oom.h
    +++ b/include/linux/oom.h
    @@ -13,6 +13,12 @@
    #define OOM_ADJUST_MAX 15

    /*
    + * Bonus (3%) for a task that shouldn't be killed unless necessary.
    + * We give this bonus to root and frozen tasks currently.
    + */
    +#define OOM_BONUS 30
    +
    +/*
    * /proc/<pid>/oom_score_adj set to OOM_SCORE_ADJ_MIN disables oom killing for
    * pid.
    */
    diff --git a/mm/oom_kill.c b/mm/oom_kill.c
    index b9774f3..4aea1b3 100644
    --- a/mm/oom_kill.c
    +++ b/mm/oom_kill.c
    @@ -205,7 +205,15 @@ unsigned int oom_badness(struct task_struct *p, struct mem_cgroup *mem,
    * implementation used by LSMs.
    */
    if (has_capability_noaudit(p, CAP_SYS_ADMIN))
    - points -= 30;
    + points -= OOM_BONUS;
    +
    + /*
    + * Do not try to kill frozen tasks unless there is nothing else to kill.
    + * We do not want to give it 1 point because we still want to select a good
    + * candidate among all frozen tasks. Let's give it a reasonable bonus.
    + */
    + if (frozen(p))
    + points -= OOM_BONUS;

    /*
    * /proc/pid/oom_score_adj ranges from -1000 to +1000 such that it may
    --
    1.7.5.4

    --
    Michal Hocko
    SUSE Labs
    SUSE LINUX s.r.o.
    Lihovarska 1060/12
    190 00 Praha 9
    Czech Republic


    \
     
     \ /
      Last update: 2011-09-26 10:39    [W:8.088 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site