linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Alex Shi <seakeel@gmail.com>
To: David Hildenbrand <david@redhat.com>,
	alexs@kernel.org, Andrew Morton <akpm@linux-foundation.org>,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org
Cc: Izik Eidus <izik.eidus@ravellosystems.com>,
	Matthew Wilcox <willy@infradead.org>,
	Andrea Arcangeli <aarcange@redhat.com>,
	Hugh Dickins <hughd@google.com>,
	Chris Wright <chrisw@sous-sol.org>
Subject: Re: [PATCH v4 8/9] mm/ksm: Convert chain series funcs and replace get_ksm_page
Date: Wed, 10 Apr 2024 11:47:12 +0800	[thread overview]
Message-ID: <c35fcdca-bec9-4a68-99dd-dbc9b3ad97a5@gmail.com> (raw)
In-Reply-To: <7a8d8005-3cec-4647-82b0-2d55d0ef34fc@redhat.com>



On 4/9/24 7:02 PM, David Hildenbrand wrote:
> On 09.04.24 11:28, alexs@kernel.org wrote:
>> From: "Alex Shi (tencent)" <alexs@kernel.org>
>>
>> In ksm stable tree all page are single, let's convert them to use and
>> folios as well as stable_tree_insert/stable_tree_search funcs.
>> And replace get_ksm_page() by ksm_get_folio() since there is no more
>> needs.
>>
>> It could save a few compound_head calls.
>>
>> Signed-off-by: Alex Shi (tencent) <alexs@kernel.org>
>> Cc: Izik Eidus <izik.eidus@ravellosystems.com>
>> Cc: Matthew Wilcox <willy@infradead.org>
>> Cc: Andrea Arcangeli <aarcange@redhat.com>
>> Cc: Hugh Dickins <hughd@google.com>
>> Cc: Chris Wright <chrisw@sous-sol.org>
>> Reviewed-by: David Hildenbrand <david@redhat.com>
> 
> I don't recall giving that yet :)

Ops... 
Sorry for misunderstand!

> 
> You could have kept some get_ksm_page()->ksm_get_folio() into a separate patch.
> 
> i.e., "[PATCH v3 11/14] mm/ksm: remove get_ksm_page and related info" from your old series could have mostly stayed separately.
> 

Yes, but the 12th and 11th patches are kind of depends each other, like after merge 8,9,10,12th with get_ksm_page replaced,

../mm/ksm.c:993:21: error: ‘get_ksm_page’ defined but not used [-Werror=unused-function]
  993 | static struct page *get_ksm_page(struct ksm_stable_node *stable_node,
      |                     ^~~~~~~~~~~~

so we have to squash the 11th and 12th if we want to merge 12th with 8,9,10...
or we can do just merge the 8,9,10 and keep 11th, 12th as your first suggestion?

> [...]
> 
>>   /*
>> @@ -1829,7 +1821,7 @@ static __always_inline struct page *chain(struct ksm_stable_node **s_n_d,
>>    * This function returns the stable tree node of identical content if found,
>>    * NULL otherwise.
>>    */
>> -static struct page *stable_tree_search(struct page *page)
>> +static void *stable_tree_search(struct page *page)
> 
> There is one caller of stable_tree_search() in cmp_and_merge_page().
> 
> Why the change from page* to void* ?

Uh, a bit more changes needs if we want to remove void*. 

diff --git a/mm/ksm.c b/mm/ksm.c
index 0d703c3da9d8..cd414a9c33ad 100644
--- a/mm/ksm.c
+++ b/mm/ksm.c
@@ -1815,7 +1815,7 @@ static __always_inline struct folio *chain(struct ksm_stable_node **s_n_d,
  * This function returns the stable tree node of identical content if found,
  * NULL otherwise.
  */
-static void *stable_tree_search(struct page *page)
+static struct folio *stable_tree_search(struct page *page)
 {
        int nid;
        struct rb_root *root;
@@ -2308,6 +2308,7 @@ static void cmp_and_merge_page(struct page *page, struct ksm_rmap_item *rmap_ite
        struct page *tree_page = NULL;
        struct ksm_stable_node *stable_node;
        struct page *kpage;
+       struct folio *folio;
        unsigned int checksum;
        int err;
        bool max_page_sharing_bypass = false;
@@ -2333,7 +2334,8 @@ static void cmp_and_merge_page(struct page *page, struct ksm_rmap_item *rmap_ite
        }
 
        /* We first start with searching the page inside the stable tree */
-       kpage = stable_tree_search(page);
+       folio = stable_tree_search(page);
+       kpage = &folio->page;
        if (kpage == page && rmap_item->head == stable_node) {
                put_page(kpage);
                return;

> I suspect cmp_and_merge_page() could similarly be converted to some degree to let kpage be a folio (separate patch).
>

Yes, there are couple of changes needed for cmp_and_merge_page() and series try_to_merge_xx_pages(), I am going to change them on the next series patches. Guess 2 phases patches are better for a big/huge one, is this right?

Thanks
Alex 


  reply	other threads:[~2024-04-10  3:47 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-09  9:28 [PATCH v4 0/9] transfer page to folio in KSM alexs
2024-04-09  9:28 ` [PATCH v4 1/9] mm/ksm: add ksm_get_folio alexs
2024-04-09 10:50   ` David Hildenbrand
2024-04-10  2:12     ` Alex Shi
2024-04-10  8:34   ` David Hildenbrand
2024-04-11  6:08     ` Alex Shi
2024-04-09  9:28 ` [PATCH v4 2/9] mm/ksm: use folio in remove_rmap_item_from_tree alexs
2024-04-09  9:28 ` [PATCH v4 3/9] mm/ksm: add folio_set_stable_node alexs
2024-04-09  9:28 ` [PATCH v4 4/9] mm/ksm: use folio in remove_stable_node alexs
2024-04-09  9:28 ` [PATCH v4 5/9] mm/ksm: use folio in stable_node_dup alexs
2024-04-09  9:28 ` [PATCH v4 6/9] mm/ksm: use ksm_get_folio in scan_get_next_rmap_item alexs
2024-04-09  9:28 ` [PATCH v4 7/9] mm/ksm: use folio in write_protect_page alexs
2024-04-09  9:28 ` [PATCH v4 8/9] mm/ksm: Convert chain series funcs and replace get_ksm_page alexs
2024-04-09 11:02   ` David Hildenbrand
2024-04-10  3:47     ` Alex Shi [this message]
2024-04-10  8:47       ` David Hildenbrand
2024-04-09  9:28 ` [PATCH v4 9/9] mm/ksm: replace set_page_stable_node by folio_set_stable_node alexs

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=c35fcdca-bec9-4a68-99dd-dbc9b3ad97a5@gmail.com \
    --to=seakeel@gmail.com \
    --cc=aarcange@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=alexs@kernel.org \
    --cc=chrisw@sous-sol.org \
    --cc=david@redhat.com \
    --cc=hughd@google.com \
    --cc=izik.eidus@ravellosystems.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=willy@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox