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 DE44AC25B7D for ; Fri, 24 May 2024 08:57:50 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6B8A76B009A; Fri, 24 May 2024 04:57:50 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6416B6B009B; Fri, 24 May 2024 04:57:50 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 41EFB6B009C; Fri, 24 May 2024 04:57:50 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 213136B009A for ; Fri, 24 May 2024 04:57:50 -0400 (EDT) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id BE2088082C for ; Fri, 24 May 2024 08:57:49 +0000 (UTC) X-FDA: 82152686658.03.4CD9E5A Received: from out-180.mta1.migadu.com (out-180.mta1.migadu.com [95.215.58.180]) by imf26.hostedemail.com (Postfix) with ESMTP id 77D2014000A for ; Fri, 24 May 2024 08:57:47 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=hYgIUtR+; spf=pass (imf26.hostedemail.com: domain of chengming.zhou@linux.dev designates 95.215.58.180 as permitted sender) smtp.mailfrom=chengming.zhou@linux.dev; dmarc=pass (policy=none) header.from=linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1716541067; 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=dYG4t/EaNB7EWepqtfFni8zXj5gK0Ak5wPBBilgzMF4=; b=rPEPX/FjHfxcduAG81cJnuXCFRNTbvSACrZ8Hcc/2DGtzoYNKkOwC+f6nYgQolwf7m5+Qk 2yDMLHGvl9ojmZRWfEOc7GLTt+c7hz1Ys1RByL8h4IC6lGxGaFpXoBJpI+0a+8+DfIF48g vPz5nVRrQaL6j4CUmqjWk0WzDoBwnLk= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1716541067; a=rsa-sha256; cv=none; b=WPAEZ4mHQ5i13Ks3Op4/nPjIARxPhRMI2DKbR9h48pYSFDjI3kQNJJi3nyic1n72DQBOMn W7DMIvxiM+Ueu2BpYnAhEiSebZ7X+jQiflwoD+SloHKxxVbTZN9lVJzDrJz0DEz5S0weOl SXkeFDsHZ9Q7w/q4dEnvq56n5VHJ2iA= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=hYgIUtR+; spf=pass (imf26.hostedemail.com: domain of chengming.zhou@linux.dev designates 95.215.58.180 as permitted sender) smtp.mailfrom=chengming.zhou@linux.dev; dmarc=pass (policy=none) header.from=linux.dev X-Envelope-To: linux-mm@kvack.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1716541066; h=from:from: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=dYG4t/EaNB7EWepqtfFni8zXj5gK0Ak5wPBBilgzMF4=; b=hYgIUtR+IGQiW5SYzAi6hn187p+6dLSPfSc5qCAwXfrCx9zJofdC5SRZC9uNmtLVNrr//S K35K1A3BY7lW01HjC1Jo6/eGc5/+mcoy71lAOeeLqpOAoODxFEmBtTCscyOa9YL6GanUCE SRBiSiD3MN3ajReabx4U2DoEUf+9QpQ= X-Envelope-To: hughd@google.com X-Envelope-To: chengming.zhou@linux.dev X-Envelope-To: zhouchengming@bytedance.com X-Envelope-To: shr@devkernel.io X-Envelope-To: david@redhat.com X-Envelope-To: akpm@linux-foundation.org X-Envelope-To: aarcange@redhat.com X-Envelope-To: linux-kernel@vger.kernel.org X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Chengming Zhou Date: Fri, 24 May 2024 16:56:53 +0800 Subject: [PATCH 4/4] mm/ksm: use ksm page itself if no another ksm page is found on stable tree MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20240524-b4-ksm-scan-optimize-v1-4-053b31bd7ab4@linux.dev> References: <20240524-b4-ksm-scan-optimize-v1-0-053b31bd7ab4@linux.dev> In-Reply-To: <20240524-b4-ksm-scan-optimize-v1-0-053b31bd7ab4@linux.dev> To: Andrew Morton , david@redhat.com, aarcange@redhat.com, hughd@google.com, shr@devkernel.io Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, zhouchengming@bytedance.com, Chengming Zhou X-Developer-Signature: v=1; a=ed25519-sha256; t=1716541051; l=2490; i=chengming.zhou@linux.dev; s=20240508; h=from:subject:message-id; bh=smYx6vKdhJOj0qp5JFWbHhMVKDAu8/fdVq+SRWlUWTA=; b=Uk5bDGiklVu1N1UJwFk4FaByr6X04WBgoDgj5019z6tb87qoXKOdmsjtjRjcvjab0iuVGGhhe RoMjv/9K6JPCH5inyUAKr53usGvYwINzGTYbvuRTf/CObYXOBS7Atoe X-Developer-Key: i=chengming.zhou@linux.dev; a=ed25519; pk=kx40VUetZeR6MuiqrM7kPCcGakk1md0Az5qHwb6gBdU= X-Migadu-Flow: FLOW_OUT X-Rspam-User: X-Stat-Signature: mka5b7xtif1eonwwz4mowdh4q9nrs8wm X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 77D2014000A X-HE-Tag: 1716541067-46545 X-HE-Meta: U2FsdGVkX1948ETX6uoqnwEo8WNetq62fp1/uD8zmV/GHaIJ4gomnXhOxcUsVQq1O2nV91qzPXSxmyWgcrNhpu9otZvGs+nmwG4wgkw2pYR4hbjuuwfsVNHiUWitk/XRxTr3NMF55wnrqZW56UFu80pr5YG2S8MS39UOZYFoDVFTEVo/Ol9nxGK9rlEGe8cUf+Lm46A09nJFoWzmlguiWYufW9WeF7disb/fI/c5flDDiMC/T8CVJ3eLwiH67y2nGnxyWrE7c9x8X64Mjdbdj+UwpgueX30mOT8jqLnW8u4ZXe2rQy1uBMZN6wE5/cUDST5DPLlp7hYrWNZb7o083NsRV6yzi2nvfXtwhfqljb6enu4vifOxrYZ3+it1tNEXRmy1Ku83lsWr/ZloU2nRE/UYyOwA3WD3OsrGzCegwiObQ0aTLCsOab+Hxv3W9kNX+Puc+c2grrnCEbDml83QVoOmzz93YyEpUv2xDtA9tdB9ECiw8k5EPdHzKllyZ4+6PADd4EYne8/J4tHsJt6NQ5LOwRVcmW7p4rOufINkxhrW8Uel4EeqMOB4dSKUb3yUBv/P6sp7d6TzSeqGMOtK+UgY/qzFQj80sIffg+/fuvTCyZst4tB1HNw3bF26kTx/WzSRy7X6PdSoGyNTkLdkqSaSEpvepPPBpCAK2txB3Nv8QP13SdqbZAICsXFMiX/t1ZArTaThtSVSHmpVUijy3kDLKsJy3occSdeEP4qdKGUZD8d0leZXE5HY0yFM5S6fNeYjZNt9JY6MyjBS3qaj7GE5ItMjViJNGxk4U3tIGH0E2X75fDKEr4EWeoR3np6lYBY4F9j9LQ66lGhiA1jTXzmzfrC3gjTSvaRCSfUH2710pQ8LntKzSzN7FPyYM6w4wHUWbUWy11szT87Rs6QeHr5HIvvJICbA+9Fzx0+SH/MGkBq9HPfCNzP+gFoGLMYNVwXA7nz0ZPZiBZ1EWNd ARcwcjra 4YpsNrWOVhlYIeWWGOEdZIF1pByat+s0tKa01f/EBFQhzmRo36H8aTOoTt0hm/Eu4DohtGYV6UTt5LPX3BDNX4+Anaw== 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: It's interesting that a mapped ksm page also need to stable_tree_search(), instead of using stable_tree_insert() directly. The reason is that we have a minor optimization for migrated ksm page that has only one mapcount, in which case we can find another ksm page that already on the stable tree to replace it. But what if we can't find another shareable candidate on the stable tree? Obviously, we should just return the ksm page itself if it has been inserted on the tree. And we shouldn't return NULL if no another ksm page is found on the tree, since we will still map on this ksm page but the rmap_item will be removed out to insert on the unstable tree if we return NULL in this case. We can ignore the is_page_sharing_candidate() check in this case, since max_page_sharing_bypass is set to true in cmp_and_merge_page(). Signed-off-by: Chengming Zhou --- mm/ksm.c | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/mm/ksm.c b/mm/ksm.c index f923699452ed..6dea83998258 100644 --- a/mm/ksm.c +++ b/mm/ksm.c @@ -1940,11 +1940,8 @@ static struct page *stable_tree_search(struct page *page) rb_link_node(&page_node->node, parent, new); rb_insert_color(&page_node->node, root); out: - if (is_page_sharing_candidate(page_node)) { - folio_get(folio); - return &folio->page; - } else - return NULL; + folio_get(folio); + return &folio->page; replace: /* @@ -1966,10 +1963,7 @@ static struct page *stable_tree_search(struct page *page) rb_replace_node(&stable_node_dup->node, &page_node->node, root); - if (is_page_sharing_candidate(page_node)) - folio_get(folio); - else - folio = NULL; + folio_get(folio); } else { rb_erase(&stable_node_dup->node, root); folio = NULL; @@ -1982,10 +1976,7 @@ static struct page *stable_tree_search(struct page *page) list_del(&page_node->list); DO_NUMA(page_node->nid = nid); stable_node_chain_add_dup(page_node, stable_node); - if (is_page_sharing_candidate(page_node)) - folio_get(folio); - else - folio = NULL; + folio_get(folio); } else { folio = NULL; } @@ -2009,7 +2000,7 @@ static struct page *stable_tree_search(struct page *page) stable_node = alloc_stable_node_chain(stable_node_dup, root); if (!stable_node) - return NULL; + goto out; } /* * Add this stable_node dup that was -- 2.45.1