lkml.org 
[lkml]   [2015]   [Jun]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 08/25] 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@suse.de>
    ---
    mm/vmscan.c | 24 ++++++++++++------------
    1 file changed, 12 insertions(+), 12 deletions(-)

    diff --git a/mm/vmscan.c b/mm/vmscan.c
    index 4d7ddaf4f2f4..50aa650ac206 100644
    --- a/mm/vmscan.c
    +++ b/mm/vmscan.c
    @@ -2468,14 +2468,6 @@ static inline bool compaction_ready(struct zone *zone, int order)
    * 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.
    *
    @@ -2490,6 +2482,7 @@ static bool shrink_zones(struct zonelist *zonelist, struct scan_control *sc,
    unsigned long nr_soft_scanned;
    gfp_t orig_mask;
    bool reclaimable = false;
    + pg_data_t *last_pgdat = NULL;

    /*
    * If the number of buffer_heads in the machine exceeds the maximum
    @@ -2502,11 +2495,18 @@ static bool shrink_zones(struct zonelist *zonelist, struct scan_control *sc,

    for_each_zone_zonelist_nodemask(zone, z, zonelist,
    classzone_idx, sc->nodemask) {
    - if (!populated_zone(zone)) {
    - reclaim_idx--;
    - classzone_idx--;
    + BUG_ON(!populated_zone(zone));
    +
    + /*
    + * 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;
    + reclaim_idx = zone_idx(zone);

    /*
    * Take care memory controller reclaiming has small influence
    --
    2.3.5


    \
     
     \ /
      Last update: 2015-06-08 16:21    [W:3.463 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site