Skip to content
  • Mel Gorman's avatar
    Do not trigger OOM-killer for high-order allocation failures · a8bbf72a
    Mel Gorman authored
    
    
    out_of_memory() may be called when an allocation is failing and the direct
    reclaim is not making any progress.  This does not take into account the
    requested order of the allocation.  If the request if for an order larger
    than PAGE_ALLOC_COSTLY_ORDER, it is reasonable to fail the allocation
    because the kernel makes no guarantees about those allocations succeeding.
    
    This false OOM situation can occur if a user is trying to grow the hugepage
    pool in a script like;
    
    #!/bin/bash
    REQUIRED=$1
    echo 1 > /proc/sys/vm/hugepages_treat_as_movable
    echo $REQUIRED > /proc/sys/vm/nr_hugepages
    ACTUAL=`cat /proc/sys/vm/nr_hugepages`
    while [ $REQUIRED -ne $ACTUAL ]; do
    	echo Huge page pool at $ACTUAL growing to $REQUIRED
    	echo $REQUIRED > /proc/sys/vm/nr_hugepages
    	ACTUAL=`cat /proc/sys/vm/nr_hugepages`
    	sleep 1
    done
    
    This is a reasonable scenario when ZONE_MOVABLE is in use but triggers OOM
    easily on 2.6.23-rc1. This patch will fail an allocation for an order above
    PAGE_ALLOC_COSTLY_ORDER instead of killing processes and retrying.
    
    Signed-off-by: default avatarMel Gorman <mel@csn.ul.ie>
    Acked-by: default avatarAndy Whitcroft <apw@shadowen.org>
    Cc: David Rientjes <rientjes@google.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    a8bbf72a