• Mel Gorman's avatar
    mm: compaction: defer compaction using an exponential backoff when compaction fails · 4f92e258
    Mel Gorman authored
    The fragmentation index may indicate that a failure is due to external
    fragmentation but after a compaction run completes, it is still possible
    for an allocation to fail.  There are two obvious reasons as to why
    
      o Page migration cannot move all pages so fragmentation remains
      o A suitable page may exist but watermarks are not met
    
    In the event of compaction followed by an allocation failure, this patch
    defers further compaction in the zone (1 << compact_defer_shift) times.
    If the next compaction attempt also fails, compact_defer_shift is
    increased up to a maximum of 6.  If compaction succeeds, the defer
    counters are reset again.
    
    The zone that is deferred is the first zone in the zonelist - i.e.  the
    preferred zone.  To defer compaction in the other zones, the information
    would need to be stored in the zonelist or implemented similar to the
    zonelist_cache.  This would impact the fast-paths and is not justified at
    this time.
    Signed-off-by: default avatarMel Gorman <mel@csn.ul.ie>
    Cc: Rik van Riel <riel@redhat.com>
    Cc: Minchan Kim <minchan.kim@gmail.com>
    Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
    Cc: Christoph Lameter <cl@linux-foundation.org>
    Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    4f92e258
page_alloc.c 148 KB