• Vasily Averin's avatar
    vmalloc: back off when the current task is OOM-killed · dd544141
    Vasily Averin authored
    Huge vmalloc allocation on heavy loaded node can lead to a global memory
    shortage.  Task called vmalloc can have worst badness and be selected by
    OOM-killer, however taken fatal signal does not interrupt allocation
    cycle.  Vmalloc repeat page allocaions again and again, exacerbating the
    crisis and consuming the memory freed up by another killed tasks.
    
    After a successful completion of the allocation procedure, a fatal
    signal will be processed and task will be destroyed finally.  However it
    may not release the consumed memory, since the allocated object may have
    a lifetime unrelated to the completed task.  In the worst case, this can
    lead to the host will panic due to "Out of memory and no killable
    processes..."
    
    This patch allows OOM-killer to break vmalloc cycle, makes OOM more
    effective and avoid host panic.  It does not check oom condition
    directly, however, and breaks page allocation cycle when fatal signal
    was received.
    
    This may trigger some hidden problems, when caller does not handle
    vmalloc failures, or when rollaback after failed vmalloc calls own
    vmallocs inside.  However all of these scenarios are incorrect: vmalloc
    does not guarantee successful allocation, it has never been called with
    __GFP_NOFAIL and threfore either should not be used for any rollbacks or
    should handle such errors correctly and not lead to critical failures.
    
    Link: https://lkml.kernel.org/r/83efc664-3a65-2adb-d7c4-2885784cf109@virtuozzo.comSigned-off-by: default avatarVasily Averin <vvs@virtuozzo.com>
    Acked-by: default avatarMichal Hocko <mhocko@suse.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Vladimir Davydov <vdavydov.dev@gmail.com>
    Cc: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>
    Cc: Uladzislau Rezki (Sony) <urezki@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    dd544141
vmalloc.c 101 KB