* [PATCH 1/2] mm/ksm: Initialize the addr only once in collect_procs_ksm
[not found] <20260708112943731Lz7DsMxSAWtV6I69GjZmU@zte.com.cn>
@ 2026-07-08 3:33 ` xu.xin16
0 siblings, 0 replies; 9+ messages in thread
From: xu.xin16 @ 2026-07-08 3:33 UTC (permalink / raw)
To: akpm, david, xialonglong1; +Cc: chengming.zhou, linux-mm, linux-kernel
From: xu xin <xu.xin16@zte.com.cn>
Similar with 318d87b8fa7 ("ksm: initialize the addr only once in rmap_walk_ksm"),
Only initialize the addr only once in rmap_walk_ksm because the addr variable
doesn't change across iterations.
Signed-off-by: Xu Xin <xu.xin16@zte.com>
---
mm/ksm.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/mm/ksm.c b/mm/ksm.c
index c1dcc3cb4831..337eb04a9340 100644
--- a/mm/ksm.c
+++ b/mm/ksm.c
@@ -3289,7 +3289,7 @@ void collect_procs_ksm(const struct folio *folio, const struct page *page,
rcu_read_lock();
for_each_process(tsk) {
struct anon_vma_chain *vmac;
- unsigned long addr;
+ const unsigned long addr = rmap_item->address & PAGE_MASK;
struct task_struct *t =
task_early_kill(tsk, force_early);
if (!t)
@@ -3299,7 +3299,6 @@ void collect_procs_ksm(const struct folio *folio, const struct page *page,
{
vma = vmac->vma;
if (vma->vm_mm == t->mm) {
- addr = rmap_item->address & PAGE_MASK;
add_to_kill_ksm(t, page, vma, to_kill,
addr);
}
--
2.25.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH RESEND 0/2] KSM: use linear_page_index in collect_procs_ksm()
@ 2026-07-08 3:38 xu.xin16
2026-07-08 4:19 ` [PATCH 1/2] mm/ksm: Initialize the addr only once in collect_procs_ksm xu.xin16
2026-07-08 4:22 ` [PATCH RESEND 2/2] mm/ksm: Use precise linear_page_index instead of the whole address space xu.xin16
0 siblings, 2 replies; 9+ messages in thread
From: xu.xin16 @ 2026-07-08 3:38 UTC (permalink / raw)
To: akpm, david; +Cc: chengming.zhou, linux-mm, linux-kernel
From 65241f800da589be1981181d1bc3efd69a7d0385 Mon Sep 17 00:00:00 2001
From: xu xin <xu.xin16@zte.com.cn>
Date: Wed, 8 Jul 2026 11:13:47 +0800
Subject: [PATCH 0/2] KSM: use linear_page_index in collect_procs_ksm()
In collect_procs_ksm() which is used to collect processes when the error
hit an ksm page, there is the same issue with rmap_walk_ksm (see the
previous discussion at [1]). So we apply the similar logic changes to
the collect_procs_ksm().
The patch [1/2] move the initializaion of addr from the position inside
loop to the position before the loop, since the variable will not change
in the loop.
The patch [2/2] optimize collect_procs_ksm by passing a suitable page offset
range to the anon_vma_interval_tree_foreach loop to reduce ineffective
checks.
[1] https://lore.kernel.org/all/20260703162253688u8Str9eFLR8TGCmo7nIOF@zte.com.cn/
xu xin (2):
mm/ksm: Initialize the addr only once in collect_procs_ksm
mm/ksm: Use precise linear_page_index instead of the whole address
space
mm/ksm.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
--
2.25.1
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1/2] mm/ksm: Initialize the addr only once in collect_procs_ksm
2026-07-08 3:38 [PATCH RESEND 0/2] KSM: use linear_page_index in collect_procs_ksm() xu.xin16
@ 2026-07-08 4:19 ` xu.xin16
2026-07-08 7:50 ` David Hildenbrand (Arm)
2026-07-08 7:53 ` David Hildenbrand (Arm)
2026-07-08 4:22 ` [PATCH RESEND 2/2] mm/ksm: Use precise linear_page_index instead of the whole address space xu.xin16
1 sibling, 2 replies; 9+ messages in thread
From: xu.xin16 @ 2026-07-08 4:19 UTC (permalink / raw)
To: akpm, david, chengming.zhou
Cc: akpm, david, chengming.zhou, linux-mm, linux-kernel
From: xu xin <xu.xin16@zte.com.cn>
Similar with 318d87b8fa7 ("ksm: initialize the addr only once in rmap_walk_ksm"),
Only initialize the addr only once in rmap_walk_ksm because the addr variable
doesn't change across iterations.
Signed-off-by: Xu Xin <xu.xin16@zte.com>
---
mm/ksm.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/mm/ksm.c b/mm/ksm.c
index c1dcc3cb4831..337eb04a9340 100644
--- a/mm/ksm.c
+++ b/mm/ksm.c
@@ -3289,7 +3289,7 @@ void collect_procs_ksm(const struct folio *folio, const struct page *page,
rcu_read_lock();
for_each_process(tsk) {
struct anon_vma_chain *vmac;
- unsigned long addr;
+ const unsigned long addr = rmap_item->address & PAGE_MASK;
struct task_struct *t =
task_early_kill(tsk, force_early);
if (!t)
@@ -3299,7 +3299,6 @@ void collect_procs_ksm(const struct folio *folio, const struct page *page,
{
vma = vmac->vma;
if (vma->vm_mm == t->mm) {
- addr = rmap_item->address & PAGE_MASK;
add_to_kill_ksm(t, page, vma, to_kill,
addr);
}
--
2.25.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH RESEND 2/2] mm/ksm: Use precise linear_page_index instead of the whole address space
2026-07-08 3:38 [PATCH RESEND 0/2] KSM: use linear_page_index in collect_procs_ksm() xu.xin16
2026-07-08 4:19 ` [PATCH 1/2] mm/ksm: Initialize the addr only once in collect_procs_ksm xu.xin16
@ 2026-07-08 4:22 ` xu.xin16
2026-07-08 7:52 ` David Hildenbrand (Arm)
1 sibling, 1 reply; 9+ messages in thread
From: xu.xin16 @ 2026-07-08 4:22 UTC (permalink / raw)
To: akpm, david, chengming.zhou
Cc: akpm, david, chengming.zhou, linux-mm, linux-kernel, xu.xin16
From: xu xin <xu.xin16@zte.com.cn>
Since an earlier commit introduced the linear_page_index to struct
ksm_rmap_item[1], allowing for optimizing the RMAP walk, we can use it
to locate more precisely all processes that hit the KSM page, which will
decrease a lot of unvalid iterations.
Link: https://lore.kernel.org/all/20260703162357853iIa-RP7if9hRlAIuTh5La@zte.com.cn/ [1]
Signed-off-by: Xu Xin <xu.xin16@zte.com.cn>
---
mm/ksm.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/mm/ksm.c b/mm/ksm.c
index 337eb04a9340..2791ce5bd44b 100644
--- a/mm/ksm.c
+++ b/mm/ksm.c
@@ -3290,12 +3290,13 @@ void collect_procs_ksm(const struct folio *folio, const struct page *page,
for_each_process(tsk) {
struct anon_vma_chain *vmac;
const unsigned long addr = rmap_item->address & PAGE_MASK;
+ const unsigned long index = rmap_item->linear_page_index;
struct task_struct *t =
task_early_kill(tsk, force_early);
if (!t)
continue;
- anon_vma_interval_tree_foreach(vmac, &av->rb_root, 0,
- ULONG_MAX)
+ anon_vma_interval_tree_foreach(vmac, &av->rb_root, index,
+ index)
{
vma = vmac->vma;
if (vma->vm_mm == t->mm) {
--
2.25.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] mm/ksm: Initialize the addr only once in collect_procs_ksm
2026-07-08 4:19 ` [PATCH 1/2] mm/ksm: Initialize the addr only once in collect_procs_ksm xu.xin16
@ 2026-07-08 7:50 ` David Hildenbrand (Arm)
2026-07-08 7:53 ` David Hildenbrand (Arm)
1 sibling, 0 replies; 9+ messages in thread
From: David Hildenbrand (Arm) @ 2026-07-08 7:50 UTC (permalink / raw)
To: xu.xin16, akpm, chengming.zhou; +Cc: linux-mm, linux-kernel
On 7/8/26 06:19, xu.xin16@zte.com.cn wrote:
> From: xu xin <xu.xin16@zte.com.cn>
>
> Similar with 318d87b8fa7 ("ksm: initialize the addr only once in rmap_walk_ksm"),
> Only initialize the addr only once in rmap_walk_ksm because the addr variable
> doesn't change across iterations.
>
> Signed-off-by: Xu Xin <xu.xin16@zte.com>
> ---
Acked-by: David Hildenbrand (Arm) <david@kernel.org>
--
Cheers,
David
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH RESEND 2/2] mm/ksm: Use precise linear_page_index instead of the whole address space
2026-07-08 4:22 ` [PATCH RESEND 2/2] mm/ksm: Use precise linear_page_index instead of the whole address space xu.xin16
@ 2026-07-08 7:52 ` David Hildenbrand (Arm)
2026-07-09 3:10 ` xu.xin16
0 siblings, 1 reply; 9+ messages in thread
From: David Hildenbrand (Arm) @ 2026-07-08 7:52 UTC (permalink / raw)
To: xu.xin16, akpm, chengming.zhou; +Cc: linux-mm, linux-kernel
On 7/8/26 06:22, xu.xin16@zte.com.cn wrote:
> From: xu xin <xu.xin16@zte.com.cn>
>
> Since an earlier commit introduced the linear_page_index to struct
> ksm_rmap_item[1], allowing for optimizing the RMAP walk, we can use it
> to locate more precisely all processes that hit the KSM page, which will
> decrease a lot of unvalid iterations.
It's awkward to reference a commit by a mailing list link. The other patch is
not upstream yet. Best to wait for that to go in first, so you can properly
reference the commit.
--
Cheers,
David
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] mm/ksm: Initialize the addr only once in collect_procs_ksm
2026-07-08 4:19 ` [PATCH 1/2] mm/ksm: Initialize the addr only once in collect_procs_ksm xu.xin16
2026-07-08 7:50 ` David Hildenbrand (Arm)
@ 2026-07-08 7:53 ` David Hildenbrand (Arm)
1 sibling, 0 replies; 9+ messages in thread
From: David Hildenbrand (Arm) @ 2026-07-08 7:53 UTC (permalink / raw)
To: xu.xin16, akpm, chengming.zhou; +Cc: linux-mm, linux-kernel
On 7/8/26 06:19, xu.xin16@zte.com.cn wrote:
> From: xu xin <xu.xin16@zte.com.cn>
>
> Similar with 318d87b8fa7 ("ksm: initialize the addr only once in rmap_walk_ksm"),
checkpatch.pl should complain here
"Similar as commit 318d87b8fa7 ("ksm: initialize the addr only once in
rmap_walk_ksm")," ...
> Only initialize the addr only once in rmap_walk_ksm because the addr variable
s/Only/only/, but you une one "only" too much here.
> doesn't change across iterations.
>
> Signed-off-by: Xu Xin <xu.xin16@zte.com>
> ---
> mm/ksm.c | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/mm/ksm.c b/mm/ksm.c
> index c1dcc3cb4831..337eb04a9340 100644
> --- a/mm/ksm.c
> +++ b/mm/ksm.c
> @@ -3289,7 +3289,7 @@ void collect_procs_ksm(const struct folio *folio, const struct page *page,
> rcu_read_lock();
> for_each_process(tsk) {
> struct anon_vma_chain *vmac;
> - unsigned long addr;
> + const unsigned long addr = rmap_item->address & PAGE_MASK;
> struct task_struct *t =
> task_early_kill(tsk, force_early);
> if (!t)
> @@ -3299,7 +3299,6 @@ void collect_procs_ksm(const struct folio *folio, const struct page *page,
> {
> vma = vmac->vma;
> if (vma->vm_mm == t->mm) {
> - addr = rmap_item->address & PAGE_MASK;
> add_to_kill_ksm(t, page, vma, to_kill,
> addr);
> }
--
Cheers,
David
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH RESEND 2/2] mm/ksm: Use precise linear_page_index instead of the whole address space
2026-07-08 7:52 ` David Hildenbrand (Arm)
@ 2026-07-09 3:10 ` xu.xin16
2026-07-09 8:53 ` David Hildenbrand (Arm)
0 siblings, 1 reply; 9+ messages in thread
From: xu.xin16 @ 2026-07-09 3:10 UTC (permalink / raw)
To: david, akpm; +Cc: akpm, chengming.zhou, linux-mm, linux-kernel
> > From: xu xin <xu.xin16@zte.com.cn>
> >
> > Since an earlier commit introduced the linear_page_index to struct
> > ksm_rmap_item[1], allowing for optimizing the RMAP walk, we can use it
> > to locate more precisely all processes that hit the KSM page, which will
> > decrease a lot of unvalid iterations.
>
> It's awkward to reference a commit by a mailing list link. The other patch is
> not upstream yet. Best to wait for that to go in first, so you can properly
> reference the commit.
Ok, I'm going to resend this after that referenced patch is upstream.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH RESEND 2/2] mm/ksm: Use precise linear_page_index instead of the whole address space
2026-07-09 3:10 ` xu.xin16
@ 2026-07-09 8:53 ` David Hildenbrand (Arm)
0 siblings, 0 replies; 9+ messages in thread
From: David Hildenbrand (Arm) @ 2026-07-09 8:53 UTC (permalink / raw)
To: xu.xin16, akpm; +Cc: chengming.zhou, linux-mm, linux-kernel
On 7/9/26 05:10, xu.xin16@zte.com.cn wrote:
>>> From: xu xin <xu.xin16@zte.com.cn>
>>>
>>> Since an earlier commit introduced the linear_page_index to struct
>>> ksm_rmap_item[1], allowing for optimizing the RMAP walk, we can use it
>>> to locate more precisely all processes that hit the KSM page, which will
>>> decrease a lot of unvalid iterations.
>>
>> It's awkward to reference a commit by a mailing list link. The other patch is
>> not upstream yet. Best to wait for that to go in first, so you can properly
>> reference the commit.
>
> Ok, I'm going to resend this after that referenced patch is upstream.
Alternatively, just mention that we now have linear_page_index available that we
can use here, without referring to the other patch/commit.
That would probably be cleanest.
--
Cheers,
David
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2026-07-09 8:53 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-08 3:38 [PATCH RESEND 0/2] KSM: use linear_page_index in collect_procs_ksm() xu.xin16
2026-07-08 4:19 ` [PATCH 1/2] mm/ksm: Initialize the addr only once in collect_procs_ksm xu.xin16
2026-07-08 7:50 ` David Hildenbrand (Arm)
2026-07-08 7:53 ` David Hildenbrand (Arm)
2026-07-08 4:22 ` [PATCH RESEND 2/2] mm/ksm: Use precise linear_page_index instead of the whole address space xu.xin16
2026-07-08 7:52 ` David Hildenbrand (Arm)
2026-07-09 3:10 ` xu.xin16
2026-07-09 8:53 ` David Hildenbrand (Arm)
[not found] <20260708112943731Lz7DsMxSAWtV6I69GjZmU@zte.com.cn>
2026-07-08 3:33 ` [PATCH 1/2] mm/ksm: Initialize the addr only once in collect_procs_ksm xu.xin16
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox