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 E7BDCC10F04 for ; Wed, 6 Dec 2023 09:54:14 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 847886B0080; Wed, 6 Dec 2023 04:54:14 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 7F75D6B0088; Wed, 6 Dec 2023 04:54:14 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6E6696B008A; Wed, 6 Dec 2023 04:54:14 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 5DF306B0080 for ; Wed, 6 Dec 2023 04:54:14 -0500 (EST) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 28F27120160 for ; Wed, 6 Dec 2023 09:54:14 +0000 (UTC) X-FDA: 81535932828.18.4BA5C1C Received: from out30-111.freemail.mail.aliyun.com (out30-111.freemail.mail.aliyun.com [115.124.30.111]) by imf01.hostedemail.com (Postfix) with ESMTP id 7A0A540015 for ; Wed, 6 Dec 2023 09:54:10 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=alibaba.com; spf=pass (imf01.hostedemail.com: domain of baolin.wang@linux.alibaba.com designates 115.124.30.111 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=1701856452; 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; bh=aaLDDywCvtmMLolkfKg8lkpGaNfIIwvfWvs877rjKOI=; b=fLdtMioovMqf74Kj5nfkiE2LosWztgEUu/Sud8ppd62c0qo5UNf8oH5UkxxlxzN7Z7r6Wh 5H8BwXUVeZXZZkM0quPBlXRC3Mev0MZQdPMkb7TK3DkDCvJCp7WQ0gXSUZet/XTbxpZGM8 FJ6p9RtvX4WmL+gVjO7p3hiFoHrWAJ4= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=alibaba.com; spf=pass (imf01.hostedemail.com: domain of baolin.wang@linux.alibaba.com designates 115.124.30.111 as permitted sender) smtp.mailfrom=baolin.wang@linux.alibaba.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1701856452; a=rsa-sha256; cv=none; b=AyF5YyA4Q1fzUdWeIxfH6fllQqcofXFcQQ6TJHwnjtUhuXIJ/kZD7VS9uy2TOco7vXZ6f1 xpHGRgPUMBDangiwy74rgLyK5JL1W22kl11xMzHOQEtHqdV+D4NXaBVwsgYeXBnK4vUIF4 3LAKDsiM44GepLA3DV2yDrmpBk1xEOw= X-Alimail-AntiSpam:AC=PASS;BC=-1|-1;BR=01201311R201e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018045192;MF=baolin.wang@linux.alibaba.com;NM=1;PH=DS;RN=11;SR=0;TI=SMTPD_---0Vxxc1mm_1701856445; Received: from 30.97.48.44(mailfrom:baolin.wang@linux.alibaba.com fp:SMTPD_---0Vxxc1mm_1701856445) by smtp.aliyun-inc.com; Wed, 06 Dec 2023 17:54:06 +0800 Message-ID: <079610c2-04ed-4495-8eb7-518b04f911f7@linux.alibaba.com> Date: Wed, 6 Dec 2023 17:54:24 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [RFC PATCH] mm: compaction: avoid fast_isolate_freepages blindly choose improper pageblock To: Barry Song <21cnbao@gmail.com>, akpm@linux-foundation.org, linux-mm@kvack.org Cc: david@redhat.com, shikemeng@huaweicloud.com, willy@infradead.org, mgorman@techsingularity.net, hannes@cmpxchg.org, linux-kernel@vger.kernel.org, Barry Song , Zhanyuan Hu References: <20231129104530.63787-1-v-songbaohua@oppo.com> From: Baolin Wang In-Reply-To: <20231129104530.63787-1-v-songbaohua@oppo.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: 7A0A540015 X-Stat-Signature: isitpup4ocymhmwa744oa6qj8dface7o X-HE-Tag: 1701856450-994489 X-HE-Meta: U2FsdGVkX1++kzGf/rRsRfqsDQ3Gc2KVUuOFQg8ExvkJ9riUWrp2oE0yuD8OUPuDF8g5YQKnZD52b8JQ1MgE1oLIsYjT2LdzuEGYJs/nERFrgWMHMuUVc/3Yeh0W7OfALNlaevBJvk3k+Zvq02Qn3Cm6G0bzRDNlQGtZXodgxuX+65uuSe0ibJQBQUYvYB4/6UgWCrLOgH6WUO+Uo/IiQW7bVgfUGTZd3aieX+6WiWV3dK5P3yvhfNMQeZ+ajpYCL1o0Fiwhm9S9aDKG0Mr+Hx/Ec2r+443ELdhlzc/iYCo+0Ct/Q7GOwE2px5+nOczNemqkJldEKf/MXwrRQp9bIe/B+WtuMjBywEq1Tmdx0uza103S337MmpWxjKlORdWXcxscFA/v1u/dRp1ivJHksMjzBodql2AFlU3Ijv4Ryux3WJ76kS59oV77x+Uvt7+B7PZtUSEqUTIpskjnGnUtWULU/6IxhX2AGLoKr0Gf13VCL71emUMADtkQ/yyZc31k+Kcx/FE0SZh6AW3G+exB3EXeWqxtxjGkVxCBYHIQiOD2PDftR3lcC2A3eDW0wSbVdTCyegR+lsZ2vtBIpFdgbSFcz9/kvsDwry4dm/r8U0KshamlmYugae8u6loA/ACnWnUailqKTxTHNNCOOCTOR4at3FMp79zvtKUDG2TvXTzmNyOasSqcU1DSQwK/2EN612Q+w1RTFhVmYqYQhkYl+xGMTdRR5lrty8rsld4g6CXlMCUR70G2mF5l37jwU3oGAesoyE3apqzymLxeir5AXE+CNxU2f5kfmYJ96PFo8CmxdbLnHtI92FZwlsamxJdtlNDOqHvxSUNpWPmfD2ZP+gR3Y/bpfREadVL2PngMUzv92Vrw5e2RmMKHcSQD5hRDdOp56/4MpwKSjGoq6vJ5xuRaIEDD15vZyz6ULA8ZfWKj3y5fqOodGuWy8z5UI37rMAv8fdGF29CIz227uvx 0ZHw/Aqk Mk9QfkSrtA1Ony77fYX6AngtXXiOnrp4M8zeQoeK77TFIDN8TrFMIlm74SA57jZCGDnvPtH797lRfWCJOeqCi5qVKiBDxJI4FZrnFrSDgS3f5MjpTL5KCH0+JV6984/r/dClHBJWW93Wlae7lrZLfc/8npFqoHkRqozomfBWu6RFK9BE4ximFlVkOWy0BJ/u0RrYaLoNKk8R5qKqXR4/bbj4ztw== 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 11/29/2023 6:45 PM, Barry Song wrote: > Testing shows fast_isolate_freepages can blindly choose an unsuitable > pageblock from time to time particularly while the min mark is used > from XXX path: > if (!page) { > cc->fast_search_fail++; > if (scan_start) { > /* > * Use the highest PFN found above min. If one was > * not found, be pessimistic for direct compaction > * and use the min mark. > */ > if (highest >= min_pfn) { > page = pfn_to_page(highest); > cc->free_pfn = highest; > } else { > if (cc->direct_compaction && pfn_valid(min_pfn)) { /* XXX */ > page = pageblock_pfn_to_page(min_pfn, > min(pageblock_end_pfn(min_pfn), > zone_end_pfn(cc->zone)), > cc->zone); > cc->free_pfn = min_pfn; > } > } > } > } Yes, the min_pfn can be an unsuitable migration target. But I think we can just add the suitable_migration_target() validation into 'min_pfn' case? Since other cases must be suitable target which found from MIGRATE_MOVABLE free list. Something like below: diff --git a/mm/compaction.c b/mm/compaction.c index 01ba298739dd..4e8eb4571909 100644 --- a/mm/compaction.c +++ b/mm/compaction.c @@ -1611,6 +1611,8 @@ static void fast_isolate_freepages(struct compact_control *cc) min(pageblock_end_pfn(min_pfn), zone_end_pfn(cc->zone)), cc->zone); + if (!suitable_migration_target(cc, page)) + page = NULL; cc->free_pfn = min_pfn; } } By the way, I wonder if this patch can improve the efficiency of compaction in your test case? > In contrast, slow path is skipping unsuitable pageblocks in a decent way. > > I don't know if it is an intended design or just an oversight. But > it seems more sensible to skip unsuitable pageblock. > > Reported-by: Zhanyuan Hu > Signed-off-by: Barry Song > --- > mm/compaction.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/mm/compaction.c b/mm/compaction.c > index 01ba298739dd..98c485a25614 100644 > --- a/mm/compaction.c > +++ b/mm/compaction.c > @@ -1625,6 +1625,12 @@ static void fast_isolate_freepages(struct compact_control *cc) > cc->total_free_scanned += nr_scanned; > if (!page) > return; > + /* > + * Otherwise, we can blindly choose an improper pageblock especially > + * while using the min mark > + */ > + if (!suitable_migration_target(cc, page)) > + return; > > low_pfn = page_to_pfn(page); > fast_isolate_around(cc, low_pfn);