Skip to content
  • David Rientjes's avatar
    mm, page_alloc: avoid expensive reclaim when compaction may not succeed · b39d0ee2
    David Rientjes authored
    
    
    Memory compaction has a couple significant drawbacks as the allocation
    order increases, specifically:
    
     - isolate_freepages() is responsible for finding free pages to use as
       migration targets and is implemented as a linear scan of memory
       starting at the end of a zone,
    
     - failing order-0 watermark checks in memory compaction does not account
       for how far below the watermarks the zone actually is: to enable
       migration, there must be *some* free memory available.  Per the above,
       watermarks are not always suffficient if isolate_freepages() cannot
       find the free memory but it could require hundreds of MBs of reclaim to
       even reach this threshold (read: potentially very expensive reclaim with
       no indication compaction can be successful), and
    
     - if compaction at this order has failed recently so that it does not even
       run as a result of deferred compaction, looping through reclaim can often
       be pointless.
    
    For hugepage allocations, these are quite substantial drawbacks because
    these are very high order allocations (order-9 on x86) and falling back to
    doing reclaim can potentially be *very* expensive without any indication
    that compaction would even be successful.
    
    Reclaim itself is unlikely to free entire pageblocks and certainly no
    reliance should be put on it to do so in isolation (recall lumpy reclaim).
    This means we should avoid reclaim and simply fail hugepage allocation if
    compaction is deferred.
    
    It is also not helpful to thrash a zone by doing excessive reclaim if
    compaction may not be able to access that memory.  If order-0 watermarks
    fail and the allocation order is sufficiently large, it is likely better
    to fail the allocation rather than thrashing the zone.
    
    Signed-off-by: default avatarDavid Rientjes <rientjes@google.com>
    Cc: Andrea Arcangeli <aarcange@redhat.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Mel Gorman <mgorman@suse.de>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Stefan Priebe - Profihost AG <s.priebe@profihost.ag>
    Cc: "Kirill A. Shutemov" <kirill@shutemov.name>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    b39d0ee2