• Mel Gorman's avatar
    mm, page_alloc: only enforce watermarks for order-0 allocations · 97a16fc8
    Mel Gorman authored
    The primary purpose of watermarks is to ensure that reclaim can always
    make forward progress in PF_MEMALLOC context (kswapd and direct reclaim).
    These assume that order-0 allocations are all that is necessary for
    forward progress.
    
    High-order watermarks serve a different purpose.  Kswapd had no high-order
    awareness before they were introduced
    (https://lkml.kernel.org/r/413AA7B2.4000907@yahoo.com.au).  This was
    particularly important when there were high-order atomic requests.  The
    watermarks both gave kswapd awareness and made a reserve for those atomic
    requests.
    
    There are two important side-effects of this.  The most important is that
    a non-atomic high-order request can fail even though free pages are
    available and the order-0 watermarks are ok.  The second is that
    high-order watermark checks are expensive as the free list counts up to
    the requested order must be examined.
    
    With the introduction of MIGRATE_HIGHATOMIC it is no longer necessary to
    have high-order watermarks.  Kswapd and compaction still need high-order
    awareness which is handled by checking that at least one suitable
    high-order page is free.
    
    With the patch applied, there was little difference in the allocation
    failure rates as the atomic reserves are small relative to the number of
    allocation attempts.  The expected impact is that there will never be an
    allocation failure report that shows suitable pages on the free lists.
    
    The one potential side-effect of this is that in a vanilla kernel, the
    watermark checks may have kept a free page for an atomic allocation.  Now,
    we are 100% relying on the HighAtomic reserves and an early allocation to
    have allocated them.  If the first high-order atomic allocation is after
    the system is already heavily fragmented then it'll fail.
    
    [akpm@linux-foundation.org: simplify __zone_watermark_ok(), per Vlastimil]
    Signed-off-by: default avatarMel Gorman <mgorman@techsingularity.net>
    Acked-by: default avatarMichal Hocko <mhocko@suse.com>
    Acked-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
    Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Cc: Christoph Lameter <cl@linux.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Vitaly Wool <vitalywool@gmail.com>
    Cc: Rik van Riel <riel@redhat.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    97a16fc8
page_alloc.c 188 KB