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 B3F9BC48260 for ; Mon, 19 Feb 2024 06:41:00 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 344AF6B007B; Mon, 19 Feb 2024 01:41:00 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 2F3D26B007D; Mon, 19 Feb 2024 01:41:00 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1BD796B0082; Mon, 19 Feb 2024 01:41:00 -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 083616B007B for ; Mon, 19 Feb 2024 01:41:00 -0500 (EST) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id BB6B1120257 for ; Mon, 19 Feb 2024 06:40:59 +0000 (UTC) X-FDA: 81807605838.05.A0CDB13 Received: from out30-101.freemail.mail.aliyun.com (out30-101.freemail.mail.aliyun.com [115.124.30.101]) by imf17.hostedemail.com (Postfix) with ESMTP id 051C540010 for ; Mon, 19 Feb 2024 06:40:54 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=pass header.d=linux.alibaba.com header.s=default header.b=sGDmzE2v; dmarc=pass (policy=none) header.from=linux.alibaba.com; spf=pass (imf17.hostedemail.com: domain of baolin.wang@linux.alibaba.com designates 115.124.30.101 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=1708324858; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to: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=9fEJQ8Unza4CZbH2UPdoMlBBIdG/WRDEb9TgFjASXbQ=; b=XA7oMSH1Ns1dZWcZBXHoQYl89CcdtDCvd3Lh/xFTtd+kHFoHSfd7yLJ2AMSdI0nrPAc99z eCEyW1WcF5oL0Xe3ndhGDkIywwZDb9rwbBsGIxQ6XmSIVUBzVH/DJ+I5Cqwscc+eeaqoOj QsWyBY6DuNlQ66Q4/m1DtoIh1LkO8Fk= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=pass header.d=linux.alibaba.com header.s=default header.b=sGDmzE2v; dmarc=pass (policy=none) header.from=linux.alibaba.com; spf=pass (imf17.hostedemail.com: domain of baolin.wang@linux.alibaba.com designates 115.124.30.101 as permitted sender) smtp.mailfrom=baolin.wang@linux.alibaba.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1708324858; a=rsa-sha256; cv=none; b=L9IodIj6+HnSKtnlGIFhTXYCiHILIJ2N+1rVgFtE8LiJJq8whBQ79/keaCxRfQ0ra4q+eH ApASuEaDK64BF9w6ywsEx2UT486zsKxZCe3oP1KWe3OOpT83KdfWWxLScb1pNdRvoyiOl7 u2n53NuwBjYNCWX0Wmk36VZn1FFcncY= DKIM-Signature:v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.alibaba.com; s=default; t=1708324851; h=Message-ID:Date:MIME-Version:Subject:To:From:Content-Type; bh=9fEJQ8Unza4CZbH2UPdoMlBBIdG/WRDEb9TgFjASXbQ=; b=sGDmzE2vexwK7PPO/h7Hv+UHYxMivToTdsW8wZ2waN49r5BDioD89QVQOS5aVM0istMFkSrwsE51yB+hCcK27nWSDHpamQNHP9GkeXg1uR5E1a/nTw4GZJoCAr2CudGrzVqXGM+voMbEyvF7Tj17nJmlJJUWyViuP44I3SQsKho= 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=ay29a033018046060;MF=baolin.wang@linux.alibaba.com;NM=1;PH=DS;RN=3;SR=0;TI=SMTPD_---0W0oTOBx_1708324850; Received: from 30.97.56.48(mailfrom:baolin.wang@linux.alibaba.com fp:SMTPD_---0W0oTOBx_1708324850) by smtp.aliyun-inc.com; Mon, 19 Feb 2024 14:40:50 +0800 Message-ID: Date: Mon, 19 Feb 2024 14:40:49 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2] mm: compaction: refactor compact_node() To: Kefeng Wang , Andrew Morton , linux-mm@kvack.org References: <20240208013607.1731817-1-wangkefeng.wang@huawei.com> From: Baolin Wang In-Reply-To: <20240208013607.1731817-1-wangkefeng.wang@huawei.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Rspam-User: X-Stat-Signature: hm1d84uyt8zdf8bxggozw3mwpmdmmopu X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 051C540010 X-HE-Tag: 1708324854-980399 X-HE-Meta: U2FsdGVkX18rT5lIvxjTfNCvnw+kBN/h6ZHeZJ/nOSqR12h8NWTxzxpxCh3IgOsJ9tm4QNmpBvAfc3JartHf7HzdTgmn7QUdRZq5sFcPQMTyiQ2Ct+5EJtCmKgj6osOqFnjzL3fxW5A1hoTURp7M5P7tiEwc3hSeYs8ll56r6cUt+TQcImo+engQcveWVRtCTye7LrRxuZ1VImnNhitBFIDpDF5jU8MC00Tv0mPJi14YnQqZ3TzhYmZVpqtzB75QdlNy4IKZelvPvHnAoQ9ZGg1yId8cWYhNm7C4Dg1SHcWnUxTFNzS3njN0Uu0koQj3OJX4fjX2ir0j4zwGYorlmLfoUkQhfM3/YWdlVXPtzqYWtLxJFMMnOkOp6gJO3sUlJQLhPyLJm+ya3Mp4Z+Zonme0hoK2vymR25pwibcOw/yzOjegrlhj2BRKz8e6YFNoU9Bjrsdn5HK0nu+8IYhV7qPpvpDnk0H0dxlutrpfp2yFuZhgEzHZZXwCiImpWi9D+V962mFZGPGkBS5BCETb2CCJ3kYBYju9rQjBBm2vX0+hUrPo1BS4Jb6hCZwpwTcSbIZyrOImrexeWt3l2QwgqKvSHk+pU6voIYt+D4a70j5Qu7OErDOuYNjXOPgvA3O/FiSZGCXm2SITHAl8CIZeVNgXpMDldKA0BJCLfiq+/qaKpdNIdf9hcDCx7VoPVwvfNjtJQSpgXLZ2+vc4P3xLzYTktEkfyDNvFrxMf+my6PVjIOGEBJBSqUt//eppmYMLJ51UZQUCd3hJSCgaVDLC7L5Ab1guCcyH/XvMc/yMvvVDmGyNN2bpzJXi6Qb50diAiqsmv6KXCUrS6ju9ruQj78VlJZrF1G+g5E/nMRQ1OosOJBmy4X1nCTbSam19yQkxKLTF4NjyRPpecSawpIrhBtJqwMwjzIx1+Hvz/C58V8gzmuQqyXrW43bSWEg8Z+QOw11jkxqlhLI= 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 2024/2/8 09:36, Kefeng Wang wrote: > Refactor compact_node() to handle both proactive and synchronous compact > memory, which cleanups code a bit. > > Signed-off-by: Kefeng Wang LGTM. Reviewed-by: Baolin Wang > --- > v2: > - drop proactive_compact_node() and add comments for compact_node() > suggested by Andrew > > mm/compaction.c | 65 ++++++++++++++++--------------------------------- > 1 file changed, 21 insertions(+), 44 deletions(-) > > diff --git a/mm/compaction.c b/mm/compaction.c > index e63a4ee7e029..de882ecb61c5 100644 > --- a/mm/compaction.c > +++ b/mm/compaction.c > @@ -2885,25 +2885,27 @@ enum compact_result try_to_compact_pages(gfp_t gfp_mask, unsigned int order, > } > > /* > - * Compact all zones within a node till each zone's fragmentation score > - * reaches within proactive compaction thresholds (as determined by the > - * proactiveness tunable). > + * compact_node() - compact all zones within a node > + * @pgdat: The node page data > + * @proactive: Whether the compaction is proactive > * > - * It is possible that the function returns before reaching score targets > - * due to various back-off conditions, such as, contention on per-node or > - * per-zone locks. > + * For proactive compaction, compact till each zone's fragmentation score > + * reaches within proactive compaction thresholds (as determined by the > + * proactiveness tunable), it is possible that the function returns before > + * reaching score targets due to various back-off conditions, such as, > + * contention on per-node or per-zone locks. > */ > -static void proactive_compact_node(pg_data_t *pgdat) > +static void compact_node(pg_data_t *pgdat, bool proactive) > { > int zoneid; > struct zone *zone; > struct compact_control cc = { > .order = -1, > - .mode = MIGRATE_SYNC_LIGHT, > + .mode = proactive ? MIGRATE_SYNC_LIGHT : MIGRATE_SYNC, > .ignore_skip_hint = true, > .whole_zone = true, > .gfp_mask = GFP_KERNEL, > - .proactive_compaction = true, > + .proactive_compaction = proactive, > }; > > for (zoneid = 0; zoneid < MAX_NR_ZONES; zoneid++) { > @@ -2915,41 +2917,16 @@ static void proactive_compact_node(pg_data_t *pgdat) > > compact_zone(&cc, NULL); > > - count_compact_events(KCOMPACTD_MIGRATE_SCANNED, > - cc.total_migrate_scanned); > - count_compact_events(KCOMPACTD_FREE_SCANNED, > - cc.total_free_scanned); > - } > -} > - > -/* Compact all zones within a node */ > -static void compact_node(int nid) > -{ > - pg_data_t *pgdat = NODE_DATA(nid); > - int zoneid; > - struct zone *zone; > - struct compact_control cc = { > - .order = -1, > - .mode = MIGRATE_SYNC, > - .ignore_skip_hint = true, > - .whole_zone = true, > - .gfp_mask = GFP_KERNEL, > - }; > - > - > - for (zoneid = 0; zoneid < MAX_NR_ZONES; zoneid++) { > - > - zone = &pgdat->node_zones[zoneid]; > - if (!populated_zone(zone)) > - continue; > - > - cc.zone = zone; > - > - compact_zone(&cc, NULL); > + if (proactive) { > + count_compact_events(KCOMPACTD_MIGRATE_SCANNED, > + cc.total_migrate_scanned); > + count_compact_events(KCOMPACTD_FREE_SCANNED, > + cc.total_free_scanned); > + } > } > } > > -/* Compact all nodes in the system */ > +/* Compact all zones of all nodes in the system */ > static void compact_nodes(void) > { > int nid; > @@ -2958,7 +2935,7 @@ static void compact_nodes(void) > lru_add_drain_all(); > > for_each_online_node(nid) > - compact_node(nid); > + compact_node(NODE_DATA(nid), false); > } > > static int compaction_proactiveness_sysctl_handler(struct ctl_table *table, int write, > @@ -3020,7 +2997,7 @@ static ssize_t compact_store(struct device *dev, > /* Flush pending updates to the LRU lists */ > lru_add_drain_all(); > > - compact_node(nid); > + compact_node(NODE_DATA(nid), false); > } > > return count; > @@ -3229,7 +3206,7 @@ static int kcompactd(void *p) > unsigned int prev_score, score; > > prev_score = fragmentation_score_node(pgdat); > - proactive_compact_node(pgdat); > + compact_node(pgdat, true); > score = fragmentation_score_node(pgdat); > /* > * Defer proactive compaction if the fragmentation