• David Rientjes's avatar
    mm, oom: base root bonus on current usage · 778c14af
    David Rientjes authored
    A 3% of system memory bonus is sometimes too excessive in comparison to
    other processes.
    With commit a63d83f4
     ("oom: badness heuristic rewrite"), the OOM
    killer tries to avoid killing privileged tasks by subtracting 3% of
    overall memory (system or cgroup) from their per-task consumption.  But
    as a result, all root tasks that consume less than 3% of overall memory
    are considered equal, and so it only takes 33+ privileged tasks pushing
    the system out of memory for the OOM killer to do something stupid and
    kill dhclient or other root-owned processes.  For example, on a 32G
    machine it can't tell the difference between the 1M agetty and the 10G
    fork bomb member.
    The changelog describes this 3% boost as the equivalent to the global
    overcommit limit being 3% higher for privileged tasks, but this is not
    the same as discounting 3% of overall memory from _every privileged task
    individually_ during OOM selection.
    Replace the 3% of system memory bonus with a 3% of current memory usage
    By giving root tasks a bonus that is proportional to their actual size,
    they remain comparable even when relatively small.  In the example
    above, the OOM killer will discount the 1M agetty's 256 badness points
    down to 179, and the 10G fork bomb's 262144 points down to 183500 points
    and make the right choice, instead of discounting both to 0 and killing
    agetty because it's first in the task list.
    Signed-off-by: default avatarDavid Rientjes <rientjes@google.com>
    Reported-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
    Acked-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
    Cc: Michal Hocko <mhocko@suse.cz>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
proc.txt 79.5 KB