• Michal Hocko's avatar
    mm, oom: protect !costly allocations some more for !CONFIG_COMPACTION · 31e49bfd
    Michal Hocko authored
    Joonsoo has reported that he is able to trigger OOM for !costly high
    order requests (heavy fork() workload close the OOM) with the new oom
    detection rework.  This is because we rely only on should_reclaim_retry
    when the compaction is disabled and it only checks watermarks for the
    requested order and so we might trigger OOM when there is a lot of free
    memory.
    
    It is not very clear what are the usual workloads when the compaction is
    disabled.  Relying on high order allocations heavily without any
    mechanism to create those orders except for unbound amount of reclaim is
    certainly not a good idea.
    
    To prevent from potential regressions let's help this configuration
    some.  We have to sacrifice the determinsm though because there simply
    is none here possible.  should_compact_retry implementation for
    !CONFIG_COMPACTION, which was empty so far, will do watermark check for
    order-0 on all eligible zones.  This will cause retrying until either
    the reclaim cannot make any further progress or all the zones are
    depleted even for order-0 pages.  This means that the number of retries
    is basically unbounded for !costly orders but that was the case before
    the rework as well so this shouldn't regress.
    
    [akpm@linux-foundation.org: coding-style fixes]
    Link: http://lkml.kernel.org/r/1463051677-29418-3-git-send-email-mhocko@kernel.orgReported-by: default avatarJoonsoo Kim <iamjoonsoo.kim@lge.com>
    Signed-off-by: default avatarMichal Hocko <mhocko@suse.com>
    Acked-by: default avatarHillf Danton <hillf.zj@alibaba-inc.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    31e49bfd
page_alloc.c 207 KB