From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9F95BC47422 for ; Fri, 26 Jan 2024 03:45:00 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1F4626B008A; Thu, 25 Jan 2024 22:45:00 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 1A2F96B008C; Thu, 25 Jan 2024 22:45:00 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 06AC36B0092; Thu, 25 Jan 2024 22:44:59 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id E3E0C6B008A for ; Thu, 25 Jan 2024 22:44:59 -0500 (EST) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id E4B74A2502 for ; Fri, 26 Jan 2024 02:29:11 +0000 (UTC) X-FDA: 81719880102.21.1F970A3 Received: from out30-124.freemail.mail.aliyun.com (out30-124.freemail.mail.aliyun.com [115.124.30.124]) by imf20.hostedemail.com (Postfix) with ESMTP id D5F891C0021 for ; Fri, 26 Jan 2024 02:29:08 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=linux.alibaba.com header.s=default header.b=toaIe7Fq; dmarc=pass (policy=none) header.from=linux.alibaba.com; spf=pass (imf20.hostedemail.com: domain of baolin.wang@linux.alibaba.com designates 115.124.30.124 as permitted sender) smtp.mailfrom=baolin.wang@linux.alibaba.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1706236150; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=dwkdvdG75eeYxlFk0pqOHQUVC2CDidFk3FKQ/WFen54=; b=JG3pe7FhpwW4gKyBd4AzRC7zHMb0jnq5i6hJJx8oDqy5sYW/rCjlvUj3pg7xrWlQv6nkdI U/xyT8pxZT9buP64hu3GuFSiLwGbi1X/ib8NySfgscH1uyVxcQ1VyZWOl127aoOvfgxIJr hMZtSdjqA19waKJp8DE2g/5230s3Xy4= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=linux.alibaba.com header.s=default header.b=toaIe7Fq; dmarc=pass (policy=none) header.from=linux.alibaba.com; spf=pass (imf20.hostedemail.com: domain of baolin.wang@linux.alibaba.com designates 115.124.30.124 as permitted sender) smtp.mailfrom=baolin.wang@linux.alibaba.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1706236150; a=rsa-sha256; cv=none; b=UZ9rAcPri1TsDMjvg5XwxZatkojw4NJIReyvWaESkcJKO2r5Q8h8O0Vus2tJ3U/IXr76be K6fdEcYaCGvZFZwXifg/RBlm4mcwmFAGgJznqHAnGaTYFDV6wgGzWJfjyerhVe+PfaevIE 5/mdJdmb7g9T/spB8FQu/Kl3wS9TM4s= DKIM-Signature:v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.alibaba.com; s=default; t=1706236146; h=Message-ID:Date:MIME-Version:Subject:To:From:Content-Type; bh=dwkdvdG75eeYxlFk0pqOHQUVC2CDidFk3FKQ/WFen54=; b=toaIe7FqGkeJ2qB2Pi1zuknNqFgGB4ntGbgD69dg1QWe9PPeM5S/LbJcRCRVPDu9u1ULhs9WuUE9umK7E2JmPsgzEYAmKmnRep/aMVlIqy6lzDFiIjCI87fHjWlU+4BFlrQGCONo+XfFsB9BPgte13BQomtsMTmgyCsPmV6XStM= X-Alimail-AntiSpam:AC=PASS;BC=-1|-1;BR=01201311R101e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018046050;MF=baolin.wang@linux.alibaba.com;NM=1;PH=DS;RN=19;SR=0;TI=SMTPD_---0W.M69IO_1706236143; Received: from 30.97.56.57(mailfrom:baolin.wang@linux.alibaba.com fp:SMTPD_---0W.M69IO_1706236143) by smtp.aliyun-inc.com; Fri, 26 Jan 2024 10:29:04 +0800 Message-ID: Date: Fri, 26 Jan 2024 10:29:28 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2 1/3] mm/compaction: enable compacting >0 order folios. To: Zi Yan , linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: "Huang, Ying" , Ryan Roberts , Andrew Morton , "Matthew Wilcox (Oracle)" , David Hildenbrand , "Yin, Fengwei" , Yu Zhao , Vlastimil Babka , "Kirill A . Shutemov" , Johannes Weiner , Kemeng Shi , Mel Gorman , Rohan Puri , Mcgrof Chamberlain , Adam Manzanares , "Vishal Moola (Oracle)" References: <20240123034636.1095672-1-zi.yan@sent.com> <20240123034636.1095672-2-zi.yan@sent.com> From: Baolin Wang In-Reply-To: <20240123034636.1095672-2-zi.yan@sent.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: D5F891C0021 X-Stat-Signature: ux1hs975qh4ycfub7fjgw54hgyhfah53 X-HE-Tag: 1706236148-482060 X-HE-Meta: U2FsdGVkX1847i6Vn8LrTdN02kIyKIT13YW++8CNYT4SgNRxX4DWkP6vj9eE2GzLtxfuYjPu0MmMVjv8XgKOFgVYCyCOEwqo1afRN3VKYcaQKTJur/ihMMtCz8FFvC0Rz3spopn+9ySnsLgnagEf0WV9STnUCAGySvXJrd1d6007UyAP7qTVwawj0Jk4eh98Ihb3m7RaLKuUPAi9vYNKY/9vgKHirTdB23NcKawkIXagpu+CnN7IGqTu6Itk6EoECsRro35K+Sa779CsaUuZ8HhSenG6xUKJkks3YyjMa7qm+DqQpdWaJB4uL9BG+q5213VIOVynKfO8k5VscN3FGv/fpQI/Uzh3kJxQ6qx5sKn5MmC7h8VsRGZGDu6kd3GPNWWLtjCUHt4IwGVmteS3Sv1kmXJrbk3DtoQrXa72Unct5Y3jGNQx4Tc1gBGiBbaZI1EpKkjCHbw03LkH2n2FjCwJ6IO/D5QKBIq8AaK72ppTkBnU3cQr9LX6jKWsHVLHfWaI8fWDbH/nuZcVTzq3md8aX9IHvRNQAITiEVUQq/Hc+llMFGCCZ/I32Sqy7bMX51htD0jhhPopZuFtAk0C3ACzpBL7wxWI26pP70tJwIkLCziopFNfgoXDSmE8TyGnSzC3uvq8YpoQWScIOqxXrJH602LBefZ6oGsfFSq4D7K35gBMvNQfKzX3Ix+6+gTlGPAap9dFKdEvvPLSj2jACgmJGibGms4pFEFQvf7DFjqF00KSikZgBQTSIlKyNi2EjXeqLK/D5wMemE/mIOyBO23Z+QEIHMdT6aFpx4aegXnjF8Gi57NfZhSgOE/hjpqfPM/nUEfg0Soe5i23e5T2fDUBAmEiNOMmooha3Sc/UnmUeBuIeFGZE5g53wmt3UHqXJrn5J5IPhCXnvv/TbcSr9l4wmHGuLSYl3aQom2F+SrLmcm4GAz0ZU2XNUR6Wss8TDgeoaoxt6V58kK7Fj3 fIFvgE1F uOwDVemJ1J/6MPkHiE/fUdYU3EBT1sS1ekVVuVixhDRli/ON2pJpswTy8C171tR/DIjUfZWzFazJohIzySRmh5Y1ODdHEKOqYH7hndRkQgcxtQjLI8lTNcduc3/djGHWHiHATIZMLOzP5Qn3o/T65i1boOUvJKUnhxSK8V5XvizDR/NMTyK2EPKlZnou+0hB530dPRZCX8HS4awMtMkVVtKSes+xYnQ1ZPnpkVodLIJLENQL64eVdHb4dl0f6TVLv/IDorr3U9/1vOd/a2qDpmiK47WfJw/9rIjk0fuBzgZINUS88B04WMMOEHRG6yBCFv3fxSCp6hqzxQduetP0HJ4jSsrYN2iU0qCrf9JK1Q7OwRLQR/BCG9SiweOm0fYscrnsgolFeR/MRbkYrEPGLZpY1TdG/BHJQvdwxy7KVK4k4YDs= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On 1/23/2024 11:46 AM, Zi Yan wrote: > From: Zi Yan > > migrate_pages() supports >0 order folio migration and during compaction, > even if compaction_alloc() cannot provide >0 order free pages, > migrate_pages() can split the source page and try to migrate the base pages > from the split. It can be a baseline and start point for adding support for > compacting >0 order folios. > > Suggested-by: Huang Ying > Signed-off-by: Zi Yan LGTM. Reviewed-by: Baolin Wang > --- > mm/compaction.c | 43 +++++++++++++++++++++++++++++++++++-------- > 1 file changed, 35 insertions(+), 8 deletions(-) > > diff --git a/mm/compaction.c b/mm/compaction.c > index 27ada42924d5..61389540e1f1 100644 > --- a/mm/compaction.c > +++ b/mm/compaction.c > @@ -816,6 +816,21 @@ static bool too_many_isolated(struct compact_control *cc) > return too_many; > } > > +/* > + * 1. if the page order is larger than or equal to target_order (i.e., > + * cc->order and when it is not -1 for global compaction), skip it since > + * target_order already indicates no free page with larger than target_order > + * exists and later migrating it will most likely fail; > + * > + * 2. compacting > pageblock_order pages does not improve memory fragmentation, > + * skip them; > + */ > +static bool skip_isolation_on_order(int order, int target_order) > +{ > + return (target_order != -1 && order >= target_order) || > + order >= pageblock_order; > +} > + > /** > * isolate_migratepages_block() - isolate all migrate-able pages within > * a single pageblock > @@ -1009,7 +1024,7 @@ isolate_migratepages_block(struct compact_control *cc, unsigned long low_pfn, > /* > * Regardless of being on LRU, compound pages such as THP and > * hugetlbfs are not to be compacted unless we are attempting > - * an allocation much larger than the huge page size (eg CMA). > + * an allocation larger than the compound page size. > * We can potentially save a lot of iterations if we skip them > * at once. The check is racy, but we can consider only valid > * values and the only danger is skipping too much. > @@ -1017,11 +1032,18 @@ isolate_migratepages_block(struct compact_control *cc, unsigned long low_pfn, > if (PageCompound(page) && !cc->alloc_contig) { > const unsigned int order = compound_order(page); > > - if (likely(order <= MAX_PAGE_ORDER)) { > - low_pfn += (1UL << order) - 1; > - nr_scanned += (1UL << order) - 1; > + /* > + * Skip based on page order and compaction target order > + * and skip hugetlbfs pages. > + */ > + if (skip_isolation_on_order(order, cc->order) || > + PageHuge(page)) { > + if (order <= MAX_PAGE_ORDER) { > + low_pfn += (1UL << order) - 1; > + nr_scanned += (1UL << order) - 1; > + } > + goto isolate_fail; > } > - goto isolate_fail; > } > > /* > @@ -1146,10 +1168,11 @@ isolate_migratepages_block(struct compact_control *cc, unsigned long low_pfn, > } > > /* > - * folio become large since the non-locked check, > - * and it's on LRU. > + * Check LRU folio order under the lock > */ > - if (unlikely(folio_test_large(folio) && !cc->alloc_contig)) { > + if (unlikely(skip_isolation_on_order(folio_order(folio), > + cc->order) && > + !cc->alloc_contig)) { > low_pfn += folio_nr_pages(folio) - 1; > nr_scanned += folio_nr_pages(folio) - 1; > folio_set_lru(folio); > @@ -1767,6 +1790,10 @@ static struct folio *compaction_alloc(struct folio *src, unsigned long data) > struct compact_control *cc = (struct compact_control *)data; > struct folio *dst; > > + /* this makes migrate_pages() split the source page and retry */ > + if (folio_test_large(src) > 0) > + return NULL; > + > if (list_empty(&cc->freepages)) { > isolate_freepages(cc); >