Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751845AbcDUGqF (ORCPT ); Thu, 21 Apr 2016 02:46:05 -0400 Received: from out4133-146.mail.aliyun.com ([42.120.133.146]:56230 "EHLO out4133-146.mail.aliyun.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751340AbcDUGqE (ORCPT ); Thu, 21 Apr 2016 02:46:04 -0400 X-Greylist: delayed 10633 seconds by postgrey-1.27 at vger.kernel.org; Thu, 21 Apr 2016 02:46:03 EDT X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R831e4;FP=0|-1|-1|-1|0|-1|-1|-1;HT=e02c03311;MF=hillf.zj@alibaba-inc.com;NM=1;PH=DS;RN=12;SR=0;TI=SMTPD_----4j0th9._1461221134; Reply-To: "Hillf Danton" From: "Hillf Danton" To: "'Michal Hocko'" , "'Andrew Morton'" Cc: "'Linus Torvalds'" , "'Johannes Weiner'" , "'Mel Gorman'" , "'David Rientjes'" , "'Tetsuo Handa'" , "'Joonsoo Kim'" , "'Vlastimil Babka'" , , "'LKML'" , "'Michal Hocko'" References: <1461181647-8039-1-git-send-email-mhocko@kernel.org> <1461181647-8039-7-git-send-email-mhocko@kernel.org> In-Reply-To: <1461181647-8039-7-git-send-email-mhocko@kernel.org> Subject: Re: [PATCH 06/14] mm, compaction: Update compaction_result ordering Date: Thu, 21 Apr 2016 14:45:34 +0800 Message-ID: <02cc01d19b99$688e68c0$39ab3a40$@alibaba-inc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Mailer: Microsoft Outlook 14.0 Thread-Index: AQG1HgS+iScJ1ld6BkmHPkLx52RrNADp8GwAn8Wmp0A= Content-Language: zh-cn Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3081 Lines: 84 > > From: Michal Hocko > > compaction_result will be used as the primary feedback channel for > compaction users. At the same time try_to_compact_pages (and potentially > others) assume a certain ordering where a more specific feedback takes > precendence. This gets a bit awkward when we have conflicting feedback > from different zones. E.g one returing COMPACT_COMPLETE meaning the full > zone has been scanned without any outcome while other returns with > COMPACT_PARTIAL aka made some progress. The caller should get > COMPACT_PARTIAL because that means that the compaction still can make > some progress. The same applies for COMPACT_PARTIAL vs. > COMPACT_PARTIAL_SKIPPED. Reorder PARTIAL to be the largest one so the > larger the value is the more progress we have done. > > Acked-by: Vlastimil Babka > Signed-off-by: Michal Hocko > --- Acked-by: Hillf Danton > include/linux/compaction.h | 26 ++++++++++++++++---------- > 1 file changed, 16 insertions(+), 10 deletions(-) > > diff --git a/include/linux/compaction.h b/include/linux/compaction.h > index 7c4de92d12cc..a7b9091ff349 100644 > --- a/include/linux/compaction.h > +++ b/include/linux/compaction.h > @@ -4,6 +4,8 @@ > /* Return values for compact_zone() and try_to_compact_pages() */ > /* When adding new states, please adjust include/trace/events/compaction.h */ > enum compact_result { > + /* For more detailed tracepoint output - internal to compaction */ > + COMPACT_NOT_SUITABLE_ZONE, > /* > * compaction didn't start as it was not possible or direct reclaim > * was more suitable > @@ -11,30 +13,34 @@ enum compact_result { > COMPACT_SKIPPED, > /* compaction didn't start as it was deferred due to past failures */ > COMPACT_DEFERRED, > + > /* compaction not active last round */ > COMPACT_INACTIVE = COMPACT_DEFERRED, > > + /* For more detailed tracepoint output - internal to compaction */ > + COMPACT_NO_SUITABLE_PAGE, > /* compaction should continue to another pageblock */ > COMPACT_CONTINUE, > + > /* > - * direct compaction partially compacted a zone and there are suitable > - * pages > + * The full zone was compacted scanned but wasn't successfull to compact > + * suitable pages. > */ > - COMPACT_PARTIAL, > + COMPACT_COMPLETE, > /* > * direct compaction has scanned part of the zone but wasn't successfull > * to compact suitable pages. > */ > COMPACT_PARTIAL_SKIPPED, > + > + /* compaction terminated prematurely due to lock contentions */ > + COMPACT_CONTENDED, > + > /* > - * The full zone was compacted scanned but wasn't successfull to compact > - * suitable pages. > + * direct compaction partially compacted a zone and there might be > + * suitable pages > */ > - COMPACT_COMPLETE, > - /* For more detailed tracepoint output */ > - COMPACT_NO_SUITABLE_PAGE, > - COMPACT_NOT_SUITABLE_ZONE, > - COMPACT_CONTENDED, > + COMPACT_PARTIAL, > }; > > /* Used to signal whether compaction detected need_sched() or lock contention */ > -- > 2.8.0.rc3