From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754574AbcGEGKj (ORCPT ); Tue, 5 Jul 2016 02:10:39 -0400 Received: from LGEAMRELO13.lge.com ([156.147.23.53]:55020 "EHLO lgeamrelo13.lge.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751137AbcGEGKg (ORCPT ); Tue, 5 Jul 2016 02:10:36 -0400 X-Original-SENDERIP: 156.147.1.127 X-Original-MAILFROM: minchan@kernel.org X-Original-SENDERIP: 165.244.98.76 X-Original-MAILFROM: minchan@kernel.org X-Original-SENDERIP: 10.177.223.161 X-Original-MAILFROM: minchan@kernel.org Date: Tue, 5 Jul 2016 15:11:17 +0900 From: Minchan Kim To: Mel Gorman CC: Andrew Morton , Linux-MM , Rik van Riel , Vlastimil Babka , Johannes Weiner , LKML Subject: Re: [PATCH 11/31] mm: vmscan: do not reclaim from kswapd if there is any eligible zone Message-ID: <20160705061117.GD28164@bbox> References: <1467403299-25786-1-git-send-email-mgorman@techsingularity.net> <1467403299-25786-12-git-send-email-mgorman@techsingularity.net> MIME-Version: 1.0 In-Reply-To: <1467403299-25786-12-git-send-email-mgorman@techsingularity.net> User-Agent: Mutt/1.5.21 (2010-09-15) X-MIMETrack: Itemize by SMTP Server on LGEKRMHUB08/LGE/LG Group(Release 8.5.3FP6|November 21, 2013) at 2016/07/05 15:10:28, Serialize by Router on LGEKRMHUB08/LGE/LG Group(Release 8.5.3FP6|November 21, 2013) at 2016/07/05 15:10:28, Serialize complete at 2016/07/05 15:10:28 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Jul 01, 2016 at 09:01:19PM +0100, Mel Gorman wrote: > 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. > > [hillf.zj@alibaba-inc.com: Force kswapd reclaim no more than needed] > Link: http://lkml.kernel.org/r/1466518566-30034-12-git-send-email-mgorman@techsingularity.net > Signed-off-by: Mel Gorman > Signed-off-by: Hillf Danton > Acked-by: Vlastimil Babka > --- > mm/vmscan.c | 56 ++++++++++++++++++++++++-------------------------------- > 1 file changed, 24 insertions(+), 32 deletions(-) > > diff --git a/mm/vmscan.c b/mm/vmscan.c > index 911142d25de2..2f898ba2ee2e 100644 > --- a/mm/vmscan.c > +++ b/mm/vmscan.c > @@ -3141,31 +3141,36 @@ 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 */ > - 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 the number of buffer_heads in the machine exceeds the > + * maximum allowed level then reclaim from all zones. This is > + * not specific to highmem as highmem may not exist but it is > + * it is expected that buffer_heads are stripped in writeback. > + */ > + 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 (!zone_balanced(zone, order, 0)) { > classzone_idx = i; > break; > } > } > > - if (i < 0) > - goto out; > + /* > + * Only reclaim if there are no eligible zones. Check from > + * high to low zone to avoid prematurely clearing pgdat > + * congested state. I cannot understand "prematurely clearing pgdat congested state". Could you add more words to clear it out? > + */ > + for (i = classzone_idx; i >= 0; i--) { > + zone = pgdat->node_zones + i; > + if (!populated_zone(zone)) > + continue; > + > + if (zone_balanced(zone, sc.order, classzone_idx)) If buffer_head is over limit, old logic force to reclaim highmem but this zone_balanced logic will prevent it. > + goto out; > + } > > /* > * Do some background aging of the anon list, to give > @@ -3211,19 +3216,6 @@ static int balance_pgdat(pg_data_t *pgdat, int order, int classzone_idx) > break; > > /* > - * Stop reclaiming if any eligible zone is balanced and clear > - * node writeback or congested. > - */ > - for (i = 0; i <= classzone_idx; i++) { > - zone = pgdat->node_zones + i; > - if (!populated_zone(zone)) > - continue; > - > - if (zone_balanced(zone, sc.order, classzone_idx)) > - goto out; > - } > - > - /* > * Raise priority if scanning rate is too low or there was no > * progress in reclaiming pages > */ > -- > 2.6.4 > > -- > To unsubscribe, send a message with 'unsubscribe linux-mm' in > the body to majordomo@kvack.org. For more info on Linux MM, > see: http://www.linux-mm.org/ . > Don't email: email@kvack.org