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 B1110C4707C for ; Fri, 12 Jan 2024 07:35:35 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 285E16B0093; Fri, 12 Jan 2024 02:35:35 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 236436B00A4; Fri, 12 Jan 2024 02:35:35 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 125386B00A7; Fri, 12 Jan 2024 02:35:35 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 011E96B0093 for ; Fri, 12 Jan 2024 02:35:34 -0500 (EST) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id C9116A04A1 for ; Fri, 12 Jan 2024 07:35:34 +0000 (UTC) X-FDA: 81669848988.19.3B279E2 Received: from out0-195.mail.aliyun.com (out0-195.mail.aliyun.com [140.205.0.195]) by imf05.hostedemail.com (Postfix) with ESMTP id 0803710001B for ; Fri, 12 Jan 2024 07:35:31 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=none; spf=pass (imf05.hostedemail.com: domain of libang.li@antgroup.com designates 140.205.0.195 as permitted sender) smtp.mailfrom=libang.li@antgroup.com; dmarc=pass (policy=quarantine) header.from=antgroup.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1705044933; 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-transfer-encoding:content-transfer-encoding: in-reply-to:references; bh=4pxyfVGgHGGNiDTFAqiT+II4/CcdoraqUWu9a+sb0WM=; b=euQp+A3j7bOUgM8Um0TkCDzPv4aqiCUVL7CFTbr/H2KE1q33CK0w3X8vWN6392OlvQlBtb h9gaRrzwlky+Qk8LncMocxXJs0uVN9dgH7o/4fgWdJxEMppj7ZfnumIK+UKHhtOQ3UNi1C UCjTMyCMN7Y5BXEmE8Lp+eTWEEtPFDE= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=none; spf=pass (imf05.hostedemail.com: domain of libang.li@antgroup.com designates 140.205.0.195 as permitted sender) smtp.mailfrom=libang.li@antgroup.com; dmarc=pass (policy=quarantine) header.from=antgroup.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1705044933; a=rsa-sha256; cv=none; b=qJHvu6WgONRJcBaxnL3Jdf8Q9IlqbJatDrUMhrmJbKYgKVxRJVEsmd88kQWGFxwR+kNneG 5tbqBs/F7R7LHq035dl540ZbPGZu8MqvtAhty6CiSDIyzoy7AaF1vgAJwxLxtXIAQPwuLz LA1wxPe7CAGZHvBMp9j/7Gb2Q9Fh/i8= X-Alimail-AntiSpam:AC=PASS;BC=-1|-1;BR=01201311R731e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018047207;MF=libang.li@antgroup.com;NM=1;PH=DS;RN=6;SR=0;TI=SMTPD_---.W4PYTwM_1705044926; Received: from localhost(mailfrom:libang.li@antgroup.com fp:SMTPD_---.W4PYTwM_1705044926) by smtp.aliyun-inc.com; Fri, 12 Jan 2024 15:35:27 +0800 From: "Bang Li" To: akpm@linux-foundation.org Cc: , , "=?UTF-8?B?5pyx6L6JKOiMtuawtCk=?=" , "=?UTF-8?B?WWFuIFlhbihjYWlsaW5nKQ==?=" , "Bang Li" Subject: [PATCH] mm/compaction: Reduce unnecessary loops Date: Fri, 12 Jan 2024 15:35:24 +0800 Message-Id: <20240112073524.80724-1-libang.li@antgroup.com> X-Mailer: git-send-email 2.19.1.6.gb485710b MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 0803710001B X-Rspam-User: X-Stat-Signature: t66uz6nnkky84odceoy9i7ta8ubp6zbp X-Rspamd-Server: rspam01 X-HE-Tag: 1705044931-172054 X-HE-Meta: U2FsdGVkX18eRe+ZK9Mua/9XotFdYrOC5VMA79dKp3LHNWJjIOWae40/wf0k1hm1z9wr1UBrZ2vE2duiIJiZJ7iO3j5hdicskm9fydQR2RjVa94+nu8ZtElDTRsMKjrYZKPX+dKdqb/8GHE43tU3r1EBb0ixb3fdtN/wEigdqfDMxtmmfYKZbdXCy7bKAyKEGdb/R4uaTYPK8UpxB6Fm3IOE0+FWRoS9IbIAqiBaE/rbAg046uaUD9slzddXZW6/hxUE27CuQgaOeo+mGe4p2TWMDwVHbuhWnEtCf8DjN1LLX+c/YzuMbOIiUc8r0uNGOSZ6xhab6ncKTQ+zewwD6Pad/kX11FvsByTCRtPPPk7dU9OOkA4Ll01RtuWpQoBq/UnwYLG03MV24bQcvmx9KD3BIOFlkGK4+KRXHq65rWxvqNFSMxH8HFkxoGJH0E+BUmSbBJc5HuIkxJvh1jQGWewVy/DOU6q9ep6VFR8SxYdkV0UeaowOR1TgkqodhNhMxDXLKU2x9U5v2LK4OaIPWGyLUW0aytx5dEHIZ1Gjwy32yIN3qLku+mr5ZHE9yc0av5DGU0p4Gk5wHUUp3n6UPgHbXVDhqNSR6KsET4CPAn4tk7o5zmu8AjfZbv5Di66d9G7IqPxfo1bukFSVvoeZg7fSc2VL6EglWwNobWRq55LURvAOWkIkz4aCd5CWHVwDK70P/o5eLaLblCdCXOF9yFQ3QD9ETIK3jbqdZgjq2HDQjqZzJHtCozJ591k89Cna1wmcw4ruDQ3yTl9/2CwlQYHIOkNk4Vfozp5+53sck+SkDKPaiyJBQa1zDWqcSkpxJEpvyHf3P4yjXl2pPOVitaJswZ92daVqWDivDDiSvrqGrem9wprk5jzoK468LWZKJKm05+CoDi0wQj7f2/aSBDr0wt7kQ+u5AuvWp1+itoVAmRecNTSGRWac6nvaU7GWDy8r6wHcy0WfBw0QHuz priwb8QK LVlHHH9TkKo98YgUQHxaDyteDGIzdZ4wKA4vNXlOtNX+Cv4cdx+m0c3Lrm4CEpha8FSccdfkB7fQCNNbaIh0WmpAsGW6kK1NOvvVLzv2S6aQCMG6CO2q9b+Eitrr4TULNlYGHP3lA7zHFiPOiIqK/DhS9c5vSu3VsUo25 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: Compaction will be triggered when we write 1 to '/proc/sys/vm/ compact_memory'. During the execution of the process, when we send SIGKILL to terminate the compaction, the process does not exit immediately. Instead, it will continue to loop through the remaining zones and nodes before exiting. in my environment: [root]# cat /proc/buddyinfo Node 0, zone DMA 1 1 1 0 2 1 1 0 1 1 3 Node 0, zone DMA32 1666 1123 804 625 488 356 321 278 209 178 250 Node 0, zone Normal 58852 83160 49983 9812 2287 1229 19604 24471 10346 5219 12205 [root]# echo 1 > /sys/kernel/debug/tracing/events/compaction/mm_compaction_end/enable before the patch: [root]# timeout --signal=SIGKILL 0.002 bash -c 'echo 1 > /proc/sys/vm/compact_memory' [root]# cat /sys/kernel/debug/tracing/trace_pipe <...>-26494 [014] ..... 226.468993: mm_compaction_end: zone_start=0x1 migrate_pfn=0xe00 free_pfn=0xe00 zone_end=0x1000, mode=sync status=complete <...>-26494 [014] ..... 226.469718: mm_compaction_end: zone_start=0x1000 migrate_pfn=0x20a80 free_pfn=0xffe00 zone_end=0x100000, mode=sync status=contended <...>-26494 [014] ..... 226.469720: mm_compaction_end: zone_start=0x100000 migrate_pfn=0x100000 free_pfn=0x307fe00 zone_end=0x3080000, mode=sync status=contended after the patch: [root]# timeout --signal=SIGKILL 0.002 bash -c 'echo 1 > /proc/sys/vm/compact_memory' [root]# cat /sys/kernel/debug/tracing/trace_pipe <...>-17491 [053] ..... 109.005387: mm_compaction_end: zone_start=0x1 migrate_pfn=0xe00 free_pfn=0xe00 zone_end=0x1000, mode=sync status=complete <...>-17491 [053] ..... 109.006139: mm_compaction_end: zone_start=0x1000 migrate_pfn=0x22220 free_pfn=0xffe00 zone_end=0x100000, mode=sync status=contended Although it exits quickly after receiving the SIGKILL signal, a better solution is to terminate the loop early after receiving the SIGKILL signal. Signed-off-by: Bang Li --- mm/compaction.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/mm/compaction.c b/mm/compaction.c index 27ada42924d5..16f2bde5205d 100644 --- a/mm/compaction.c +++ b/mm/compaction.c @@ -2807,7 +2807,7 @@ static void proactive_compact_node(pg_data_t *pgdat) } /* Compact all zones within a node */ -static void compact_node(int nid) +static int compact_node(int nid) { pg_data_t *pgdat = NODE_DATA(nid); int zoneid; @@ -2830,7 +2830,12 @@ static void compact_node(int nid) cc.zone = zone; compact_zone(&cc, NULL); + + if (fatal_signal_pending(current)) + return -EINTR; } + + return 0; } /* Compact all nodes in the system */ @@ -2841,8 +2846,10 @@ static void compact_nodes(void) /* Flush pending updates to the LRU lists */ lru_add_drain_all(); - for_each_online_node(nid) - compact_node(nid); + for_each_online_node(nid) { + if (compact_node(nid)) + break; + } } static int compaction_proactiveness_sysctl_handler(struct ctl_table *table, int write, -- 2.19.1.6.gb485710b