lkml.org 
[lkml]   [2016]   [Jul]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 09/31] mm, vmscan: by default have direct reclaim only shrink once per node
    Date
    Direct reclaim iterates over all zones in the zonelist and shrinking them
    but this is in conflict with node-based reclaim. In the default case,
    only shrink once per node.

    Signed-off-by: Mel Gorman <mgorman@techsingularity.net>
    Acked-by: Johannes Weiner <hannes@cmpxchg.org>
    Acked-by: Vlastimil Babka <vbabka@suse.cz>
    ---
    mm/vmscan.c | 19 +++++++++++--------
    1 file changed, 11 insertions(+), 8 deletions(-)

    diff --git a/mm/vmscan.c b/mm/vmscan.c
    index b524d3b72527..34656173a670 100644
    --- a/mm/vmscan.c
    +++ b/mm/vmscan.c
    @@ -2552,14 +2552,6 @@ static inline bool compaction_ready(struct zone *zone, int order, int classzone_
    * try to reclaim pages from zones which will satisfy the caller's allocation
    * request.
    *
    - * We reclaim from a zone even if that zone is over high_wmark_pages(zone).
    - * Because:
    - * a) The caller may be trying to free *extra* pages to satisfy a higher-order
    - * allocation or
    - * b) The target zone may be at high_wmark_pages(zone) but the lower zones
    - * must go *over* high_wmark_pages(zone) to satisfy the `incremental min'
    - * zone defense algorithm.
    - *
    * If a zone is deemed to be full of pinned pages then just give it a light
    * scan then give up on it.
    */
    @@ -2571,6 +2563,7 @@ static void shrink_zones(struct zonelist *zonelist, struct scan_control *sc)
    unsigned long nr_soft_scanned;
    gfp_t orig_mask;
    enum zone_type classzone_idx;
    + pg_data_t *last_pgdat = NULL;

    /*
    * If the number of buffer_heads in the machine exceeds the maximum
    @@ -2600,6 +2593,16 @@ static void shrink_zones(struct zonelist *zonelist, struct scan_control *sc)
    classzone_idx--;

    /*
    + * Shrink each node in the zonelist once. If the zonelist is
    + * ordered by zone (not the default) then a node may be
    + * shrunk multiple times but in that case the user prefers
    + * lower zones being preserved
    + */
    + if (zone->zone_pgdat == last_pgdat)
    + continue;
    + last_pgdat = zone->zone_pgdat;
    +
    + /*
    * Take care memory controller reclaiming has small influence
    * to global LRU.
    */
    --
    2.6.4
    \
     
     \ /
      Last update: 2016-07-01 22:41    [W:2.668 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site