2022-08-26 08:49:37

by Kaixu Xia

[permalink] [raw]
Subject: [PATCH 2/2] mm/damon/vaddr: remove comparison between mm and last_mm when checking region accesses

From: Kaixu Xia <[email protected]>

The damon regions that belong to the same damon target have the same
'struct mm_struct *mm', so it's unnecessary to compare the mm and last_mm
objects among the damon regions in one damon target when checking accesses.

Signed-off-by: Kaixu Xia <[email protected]>
---
mm/damon/vaddr.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/mm/damon/vaddr.c b/mm/damon/vaddr.c
index c8c2f306bb6d..db9d0ab37a52 100644
--- a/mm/damon/vaddr.c
+++ b/mm/damon/vaddr.c
@@ -534,14 +534,13 @@ static bool damon_va_young(struct mm_struct *mm, unsigned long addr,
*/
static void __damon_va_check_access(struct mm_struct *mm, struct damon_region *r)
{
- static struct mm_struct *last_mm;
static unsigned long last_addr;
static unsigned long last_page_sz = PAGE_SIZE;
static bool last_accessed;

/* If the region is in the last checked page, reuse the result */
- if (mm == last_mm && (ALIGN_DOWN(last_addr, last_page_sz) ==
- ALIGN_DOWN(r->sampling_addr, last_page_sz))) {
+ if (ALIGN_DOWN(last_addr, last_page_sz) ==
+ ALIGN_DOWN(r->sampling_addr, last_page_sz)) {
if (last_accessed)
r->nr_accesses++;
return;
@@ -551,7 +550,6 @@ static void __damon_va_check_access(struct mm_struct *mm, struct damon_region *r
if (last_accessed)
r->nr_accesses++;

- last_mm = mm;
last_addr = r->sampling_addr;
}

--
2.27.0


2022-08-26 17:31:55

by SeongJae Park

[permalink] [raw]
Subject: Re: [PATCH 2/2] mm/damon/vaddr: remove comparison between mm and last_mm when checking region accesses

Hi Kaixu,

On Fri, 26 Aug 2022 16:31:18 +0800 [email protected] wrote:

> From: Kaixu Xia <[email protected]>
>
> The damon regions that belong to the same damon target have the same
> 'struct mm_struct *mm', so it's unnecessary to compare the mm and last_mm
> objects among the damon regions in one damon target when checking accesses.

There could be multiple targets, and 'damon_va_check_accesses()' calls
'__damon_va_check_accesses()' for all the targets. However,
'damon_va_check_accesses()' doesn't note if '__damon_va_check_accesses()' is
called with a target that same to the target it was called with for the last
time. Hence the check is necessary.

If I'm missing something, please let me know.


Thanks,
SJ

[...]

2022-08-26 21:14:38

by Kaixu Xia

[permalink] [raw]
Subject: Re: [PATCH 2/2] mm/damon/vaddr: remove comparison between mm and last_mm when checking region accesses

On Sat, Aug 27, 2022 at 1:16 AM SeongJae Park <[email protected]> wrote:
>
> Hi Kaixu,
>
> On Fri, 26 Aug 2022 16:31:18 +0800 [email protected] wrote:
>
> > From: Kaixu Xia <[email protected]>
> >
> > The damon regions that belong to the same damon target have the same
> > 'struct mm_struct *mm', so it's unnecessary to compare the mm and last_mm
> > objects among the damon regions in one damon target when checking accesses.
>
> There could be multiple targets, and 'damon_va_check_accesses()' calls
> '__damon_va_check_accesses()' for all the targets. However,
> 'damon_va_check_accesses()' doesn't note if '__damon_va_check_accesses()' is
> called with a target that same to the target it was called with for the last
> time. Hence the check is necessary.

There could be many regions(1000 max limit) in one target and the mm
is same within
the target, maybe we don't need to maintain the 'last_mm' and do the
check every time
when the target is same.
But yes, the check is necessary when the target changed in
'__damon_va_check_accesses()',
this RFC patch missed this case :) will fix it.

>
> If I'm missing something, please let me know.
>
>
> Thanks,
> SJ
>
> [...]