lkml.org 
[lkml]   [2016]   [Apr]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 11/27] mm: vmscan: Do not reclaim from kswapd if there is any eligible zone
    Date
    kswapd scans from highest to lowest for a zone that requires balancing.
    This was necessary when reclaim was per-zone to fairly age pages on
    lower zones. Now that we are reclaiming on a per-node basis, any eligible
    zone can be used and pages will still be aged fairly. This patch avoids
    reclaiming excessively unless buffer_heads are over the limit and it's
    necessary to reclaim from a higher zone than requested by the waker of
    kswapd to relieve low memory pressure.

    Signed-off-by: Mel Gorman <mgorman@techsingularity.net>
    ---
    mm/vmscan.c | 32 +++++++++++++++++++-------------
    1 file changed, 19 insertions(+), 13 deletions(-)

    diff --git a/mm/vmscan.c b/mm/vmscan.c
    index c62505f9e8be..9752252bdd63 100644
    --- a/mm/vmscan.c
    +++ b/mm/vmscan.c
    @@ -3139,24 +3139,30 @@ static int balance_pgdat(pg_data_t *pgdat, int order, int classzone_idx)

    sc.nr_reclaimed = 0;

    - /* Scan from the highest requested zone to dma */
    + /*
    + * If the number of buffer_heads in the machine exceeds the
    + * maximum allowed level and this node has a highmem zone,
    + * force kswapd to reclaim from it to relieve lowmem pressure.
    + */
    + if (buffer_heads_over_limit) {
    + for (i = MAX_NR_ZONES - 1; i >= 0; i++) {
    + zone = pgdat->node_zones + i;
    + if (!populated_zone(zone))
    + continue;
    +
    + if (is_highmem_idx(i))
    + classzone_idx = i;
    + break;
    + }
    + }
    +
    + /* Only reclaim if there are no eligible zones */
    for (i = classzone_idx; i >= 0; i--) {
    zone = pgdat->node_zones + i;
    if (!populated_zone(zone))
    continue;

    - /*
    - * If the number of buffer_heads in the machine
    - * exceeds the maximum allowed level and this node
    - * has a highmem zone, force kswapd to reclaim from
    - * it to relieve lowmem pressure.
    - */
    - if (buffer_heads_over_limit && is_highmem_idx(i)) {
    - classzone_idx = i;
    - break;
    - }
    -
    - if (!zone_balanced(zone, order, 0, 0)) {
    + if (!zone_balanced(zone, sc.order, 0, classzone_idx)) {
    classzone_idx = i;
    break;
    }
    --
    2.6.4
    \
     
     \ /
      Last update: 2016-04-06 13:41    [W:4.076 / U:0.076 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site