Skip to content
  • David Rientjes's avatar
    mm, oom: normalize oom scores to oom_score_adj scale only for userspace · a7f638f9
    David Rientjes authored
    
    
    The oom_score_adj scale ranges from -1000 to 1000 and represents the
    proportion of memory available to the process at allocation time.  This
    means an oom_score_adj value of 300, for example, will bias a process as
    though it was using an extra 30.0% of available memory and a value of
    -350 will discount 35.0% of available memory from its usage.
    
    The oom killer badness heuristic also uses this scale to report the oom
    score for each eligible process in determining the "best" process to
    kill.  Thus, it can only differentiate each process's memory usage by
    0.1% of system RAM.
    
    On large systems, this can end up being a large amount of memory: 256MB
    on 256GB systems, for example.
    
    This can be fixed by having the badness heuristic to use the actual
    memory usage in scoring threads and then normalizing it to the
    oom_score_adj scale for userspace.  This results in better comparison
    between eligible threads for kill and no change from the userspace
    perspective.
    
    Suggested-by: default avatarKOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
    Tested-by: default avatarDave Jones <davej@redhat.com>
    Signed-off-by: default avatarDavid Rientjes <rientjes@google.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    a7f638f9