* [PATCH v2 0/2] mm/damon: Simplify the damon regions access check
@ 2022-08-27 9:02 xiakaixu1987
2022-08-27 9:02 ` [PATCH v2 1/2] mm/damon: simplify the parameter passing for 'check_accesses' xiakaixu1987
2022-08-27 9:02 ` [PATCH v2 2/2] mm/damon/vaddr: remove comparison between mm and last_mm when checking region accesses xiakaixu1987
0 siblings, 2 replies; 5+ messages in thread
From: xiakaixu1987 @ 2022-08-27 9:02 UTC (permalink / raw)
To: sj, akpm; +Cc: damon, linux-mm, linux-kernel, Kaixu Xia
From: Kaixu Xia <kaixuxia@tencent.com>
This patchset simplify the operations when checking the damon
regions accesses.
v2:
-Update commit messages and fix the 80 characters warning.
-Add the check when damon target changed.
Kaixu Xia (2):
mm/damon: simplify the parameter passing for 'check_accesses'
mm/damon/vaddr: remove comparison between mm and last_mm when checking
region accesses
mm/damon/paddr.c | 5 ++---
mm/damon/vaddr.c | 13 +++++++------
2 files changed, 9 insertions(+), 9 deletions(-)
--
2.27.0
^ permalink raw reply [flat|nested] 5+ messages in thread* [PATCH v2 1/2] mm/damon: simplify the parameter passing for 'check_accesses' 2022-08-27 9:02 [PATCH v2 0/2] mm/damon: Simplify the damon regions access check xiakaixu1987 @ 2022-08-27 9:02 ` xiakaixu1987 2022-08-27 21:24 ` SeongJae Park 2022-08-27 9:02 ` [PATCH v2 2/2] mm/damon/vaddr: remove comparison between mm and last_mm when checking region accesses xiakaixu1987 1 sibling, 1 reply; 5+ messages in thread From: xiakaixu1987 @ 2022-08-27 9:02 UTC (permalink / raw) To: sj, akpm; +Cc: damon, linux-mm, linux-kernel, Kaixu Xia From: Kaixu Xia <kaixuxia@tencent.com> The parameter 'struct damon_ctx *ctx' isn't used in the functions __damon_{p,v}a_check_access(), so we can remove it and simplify the parameter passing. Signed-off-by: Kaixu Xia <kaixuxia@tencent.com> --- mm/damon/paddr.c | 5 ++--- mm/damon/vaddr.c | 6 +++--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/mm/damon/paddr.c b/mm/damon/paddr.c index dc131c6a5403..6b0d9e6aa677 100644 --- a/mm/damon/paddr.c +++ b/mm/damon/paddr.c @@ -166,8 +166,7 @@ static bool damon_pa_young(unsigned long paddr, unsigned long *page_sz) return result.accessed; } -static void __damon_pa_check_access(struct damon_ctx *ctx, - struct damon_region *r) +static void __damon_pa_check_access(struct damon_region *r) { static unsigned long last_addr; static unsigned long last_page_sz = PAGE_SIZE; @@ -196,7 +195,7 @@ static unsigned int damon_pa_check_accesses(struct damon_ctx *ctx) damon_for_each_target(t, ctx) { damon_for_each_region(r, t) { - __damon_pa_check_access(ctx, r); + __damon_pa_check_access(r); max_nr_accesses = max(r->nr_accesses, max_nr_accesses); } } diff --git a/mm/damon/vaddr.c b/mm/damon/vaddr.c index 3c7b9d6dca95..e481f81c3efb 100644 --- a/mm/damon/vaddr.c +++ b/mm/damon/vaddr.c @@ -532,8 +532,8 @@ static bool damon_va_young(struct mm_struct *mm, unsigned long addr, * mm 'mm_struct' for the given virtual address space * r the region to be checked */ -static void __damon_va_check_access(struct damon_ctx *ctx, - struct mm_struct *mm, struct damon_region *r) +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; @@ -568,7 +568,7 @@ static unsigned int damon_va_check_accesses(struct damon_ctx *ctx) if (!mm) continue; damon_for_each_region(r, t) { - __damon_va_check_access(ctx, mm, r); + __damon_va_check_access(mm, r); max_nr_accesses = max(r->nr_accesses, max_nr_accesses); } mmput(mm); -- 2.27.0 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2 1/2] mm/damon: simplify the parameter passing for 'check_accesses' 2022-08-27 9:02 ` [PATCH v2 1/2] mm/damon: simplify the parameter passing for 'check_accesses' xiakaixu1987 @ 2022-08-27 21:24 ` SeongJae Park 0 siblings, 0 replies; 5+ messages in thread From: SeongJae Park @ 2022-08-27 21:24 UTC (permalink / raw) To: xiakaixu1987; +Cc: sj, akpm, damon, linux-mm, linux-kernel, Kaixu Xia Hi Kaixu, On Sat, 27 Aug 2022 17:02:50 +0800 xiakaixu1987@gmail.com wrote: > From: Kaixu Xia <kaixuxia@tencent.com> > > The parameter 'struct damon_ctx *ctx' isn't used in the functions > __damon_{p,v}a_check_access(), so we can remove it and simplify the > parameter passing. > > Signed-off-by: Kaixu Xia <kaixuxia@tencent.com> Reviewed-by: SeongJae Park <sj@kernel.org> Thanks, SJ > --- > mm/damon/paddr.c | 5 ++--- > mm/damon/vaddr.c | 6 +++--- > 2 files changed, 5 insertions(+), 6 deletions(-) > > diff --git a/mm/damon/paddr.c b/mm/damon/paddr.c > index dc131c6a5403..6b0d9e6aa677 100644 > --- a/mm/damon/paddr.c > +++ b/mm/damon/paddr.c > @@ -166,8 +166,7 @@ static bool damon_pa_young(unsigned long paddr, unsigned long *page_sz) > return result.accessed; > } > > -static void __damon_pa_check_access(struct damon_ctx *ctx, > - struct damon_region *r) > +static void __damon_pa_check_access(struct damon_region *r) > { > static unsigned long last_addr; > static unsigned long last_page_sz = PAGE_SIZE; > @@ -196,7 +195,7 @@ static unsigned int damon_pa_check_accesses(struct damon_ctx *ctx) > > damon_for_each_target(t, ctx) { > damon_for_each_region(r, t) { > - __damon_pa_check_access(ctx, r); > + __damon_pa_check_access(r); > max_nr_accesses = max(r->nr_accesses, max_nr_accesses); > } > } > diff --git a/mm/damon/vaddr.c b/mm/damon/vaddr.c > index 3c7b9d6dca95..e481f81c3efb 100644 > --- a/mm/damon/vaddr.c > +++ b/mm/damon/vaddr.c > @@ -532,8 +532,8 @@ static bool damon_va_young(struct mm_struct *mm, unsigned long addr, > * mm 'mm_struct' for the given virtual address space > * r the region to be checked > */ > -static void __damon_va_check_access(struct damon_ctx *ctx, > - struct mm_struct *mm, struct damon_region *r) > +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; > @@ -568,7 +568,7 @@ static unsigned int damon_va_check_accesses(struct damon_ctx *ctx) > if (!mm) > continue; > damon_for_each_region(r, t) { > - __damon_va_check_access(ctx, mm, r); > + __damon_va_check_access(mm, r); > max_nr_accesses = max(r->nr_accesses, max_nr_accesses); > } > mmput(mm); > -- > 2.27.0 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2 2/2] mm/damon/vaddr: remove comparison between mm and last_mm when checking region accesses 2022-08-27 9:02 [PATCH v2 0/2] mm/damon: Simplify the damon regions access check xiakaixu1987 2022-08-27 9:02 ` [PATCH v2 1/2] mm/damon: simplify the parameter passing for 'check_accesses' xiakaixu1987 @ 2022-08-27 9:02 ` xiakaixu1987 2022-08-27 21:25 ` SeongJae Park 1 sibling, 1 reply; 5+ messages in thread From: xiakaixu1987 @ 2022-08-27 9:02 UTC (permalink / raw) To: sj, akpm; +Cc: damon, linux-mm, linux-kernel, Kaixu Xia From: Kaixu Xia <kaixuxia@tencent.com> 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. But the check is necessary when the target changed in '__damon_va_check_accesses()', so we can simplify the whole operation by using the bool 'same_target' to indicate whether the target changed. Signed-off-by: Kaixu Xia <kaixuxia@tencent.com> --- mm/damon/vaddr.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/mm/damon/vaddr.c b/mm/damon/vaddr.c index e481f81c3efb..5f66c826ee3a 100644 --- a/mm/damon/vaddr.c +++ b/mm/damon/vaddr.c @@ -533,15 +533,14 @@ static bool damon_va_young(struct mm_struct *mm, unsigned long addr, * r the region to be checked */ static void __damon_va_check_access(struct mm_struct *mm, - struct damon_region *r) + struct damon_region *r, bool same_target) { - 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) == + if (same_target && (ALIGN_DOWN(last_addr, last_page_sz) == ALIGN_DOWN(r->sampling_addr, last_page_sz))) { if (last_accessed) r->nr_accesses++; @@ -552,7 +551,6 @@ static void __damon_va_check_access(struct mm_struct *mm, if (last_accessed) r->nr_accesses++; - last_mm = mm; last_addr = r->sampling_addr; } @@ -562,14 +560,17 @@ static unsigned int damon_va_check_accesses(struct damon_ctx *ctx) struct mm_struct *mm; struct damon_region *r; unsigned int max_nr_accesses = 0; + bool same_target; damon_for_each_target(t, ctx) { mm = damon_get_mm(t); if (!mm) continue; + same_target = false; damon_for_each_region(r, t) { - __damon_va_check_access(mm, r); + __damon_va_check_access(mm, r, same_target); max_nr_accesses = max(r->nr_accesses, max_nr_accesses); + same_target = true; } mmput(mm); } -- 2.27.0 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2 2/2] mm/damon/vaddr: remove comparison between mm and last_mm when checking region accesses 2022-08-27 9:02 ` [PATCH v2 2/2] mm/damon/vaddr: remove comparison between mm and last_mm when checking region accesses xiakaixu1987 @ 2022-08-27 21:25 ` SeongJae Park 0 siblings, 0 replies; 5+ messages in thread From: SeongJae Park @ 2022-08-27 21:25 UTC (permalink / raw) Cc: sj, akpm, damon, linux-mm, linux-kernel, Kaixu Xia Hi Kaixu, > From: Kaixu Xia <kaixuxia@tencent.com> > > 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. > But the check is necessary when the target changed in > '__damon_va_check_accesses()', so we can simplify the whole operation by > using the bool 'same_target' to indicate whether the target changed. > > Signed-off-by: Kaixu Xia <kaixuxia@tencent.com> Reviewed-by: SeongJae Park <sj@kernel.org> Thanks, SJ > --- > mm/damon/vaddr.c | 11 ++++++----- > 1 file changed, 6 insertions(+), 5 deletions(-) > > diff --git a/mm/damon/vaddr.c b/mm/damon/vaddr.c > index e481f81c3efb..5f66c826ee3a 100644 > --- a/mm/damon/vaddr.c > +++ b/mm/damon/vaddr.c > @@ -533,15 +533,14 @@ static bool damon_va_young(struct mm_struct *mm, unsigned long addr, > * r the region to be checked > */ > static void __damon_va_check_access(struct mm_struct *mm, > - struct damon_region *r) > + struct damon_region *r, bool same_target) > { > - 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) == > + if (same_target && (ALIGN_DOWN(last_addr, last_page_sz) == > ALIGN_DOWN(r->sampling_addr, last_page_sz))) { > if (last_accessed) > r->nr_accesses++; > @@ -552,7 +551,6 @@ static void __damon_va_check_access(struct mm_struct *mm, > if (last_accessed) > r->nr_accesses++; > > - last_mm = mm; > last_addr = r->sampling_addr; > } > > @@ -562,14 +560,17 @@ static unsigned int damon_va_check_accesses(struct damon_ctx *ctx) > struct mm_struct *mm; > struct damon_region *r; > unsigned int max_nr_accesses = 0; > + bool same_target; > > damon_for_each_target(t, ctx) { > mm = damon_get_mm(t); > if (!mm) > continue; > + same_target = false; > damon_for_each_region(r, t) { > - __damon_va_check_access(mm, r); > + __damon_va_check_access(mm, r, same_target); > max_nr_accesses = max(r->nr_accesses, max_nr_accesses); > + same_target = true; > } > mmput(mm); > } > -- > 2.27.0 ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2022-08-27 21:25 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2022-08-27 9:02 [PATCH v2 0/2] mm/damon: Simplify the damon regions access check xiakaixu1987 2022-08-27 9:02 ` [PATCH v2 1/2] mm/damon: simplify the parameter passing for 'check_accesses' xiakaixu1987 2022-08-27 21:24 ` SeongJae Park 2022-08-27 9:02 ` [PATCH v2 2/2] mm/damon/vaddr: remove comparison between mm and last_mm when checking region accesses xiakaixu1987 2022-08-27 21:25 ` SeongJae Park
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox