* [PATCH 0/2] Simplify the damon regions access check @ 2022-08-26 8:31 xiakaixu1987 2022-08-26 8:31 ` [PATCH 1/2] mm/damon: simplify the parameter passing for 'check_accesses' xiakaixu1987 2022-08-26 8:31 ` [PATCH 2/2] mm/damon/vaddr: remove comparison between mm and last_mm when checking region accesses xiakaixu1987 0 siblings, 2 replies; 7+ messages in thread From: xiakaixu1987 @ 2022-08-26 8:31 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. 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 | 11 ++++------- 2 files changed, 6 insertions(+), 10 deletions(-) -- 2.27.0 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/2] mm/damon: simplify the parameter passing for 'check_accesses' 2022-08-26 8:31 [PATCH 0/2] Simplify the damon regions access check xiakaixu1987 @ 2022-08-26 8:31 ` xiakaixu1987 2022-08-26 17:08 ` SeongJae Park 2022-08-26 8:31 ` [PATCH 2/2] mm/damon/vaddr: remove comparison between mm and last_mm when checking region accesses xiakaixu1987 1 sibling, 1 reply; 7+ messages in thread From: xiakaixu1987 @ 2022-08-26 8:31 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' is unnecessary in damon 'check_accesses' callback operation, so we can remove it. Signed-off-by: Kaixu Xia <kaixuxia@tencent.com> --- mm/damon/paddr.c | 5 ++--- mm/damon/vaddr.c | 5 ++--- 2 files changed, 4 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..c8c2f306bb6d 100644 --- a/mm/damon/vaddr.c +++ b/mm/damon/vaddr.c @@ -532,8 +532,7 @@ 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 +567,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 related [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] mm/damon: simplify the parameter passing for 'check_accesses' 2022-08-26 8:31 ` [PATCH 1/2] mm/damon: simplify the parameter passing for 'check_accesses' xiakaixu1987 @ 2022-08-26 17:08 ` SeongJae Park 2022-08-26 20:32 ` Kaixu Xia 0 siblings, 1 reply; 7+ messages in thread From: SeongJae Park @ 2022-08-26 17:08 UTC (permalink / raw) To: xiakaixu1987; +Cc: sj, akpm, damon, linux-mm, linux-kernel, Kaixu Xia Hi Kaixu, On Fri, 26 Aug 2022 16:31:17 +0800 xiakaixu1987@gmail.com wrote: > From: Kaixu Xia <kaixuxia@tencent.com> > > The parameter 'struct damon_ctx *ctx' is unnecessary in damon > 'check_accesses' callback operation, so we can remove it. Thank you for the finding, but this wording is not 100% perfect, strictly speaking. The callback operations indeed use the parameter, but the internal functions called by the callbacks (__damon_{p,v}a_check_access()) aren't. Could you please update the message? > > Signed-off-by: Kaixu Xia <kaixuxia@tencent.com> > --- > mm/damon/paddr.c | 5 ++--- > mm/damon/vaddr.c | 5 ++--- > 2 files changed, 4 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..c8c2f306bb6d 100644 > --- a/mm/damon/vaddr.c > +++ b/mm/damon/vaddr.c > @@ -532,8 +532,7 @@ 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) I still prefer 80 columns rule[1]. Could you please break this line? [1] https://docs.kernel.org/process/coding-style.html#breaking-long-lines-and-strings > { > static struct mm_struct *last_mm; > static unsigned long last_addr; > @@ -568,7 +567,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 Thanks, SJ ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] mm/damon: simplify the parameter passing for 'check_accesses' 2022-08-26 17:08 ` SeongJae Park @ 2022-08-26 20:32 ` Kaixu Xia 0 siblings, 0 replies; 7+ messages in thread From: Kaixu Xia @ 2022-08-26 20:32 UTC (permalink / raw) To: SeongJae Park; +Cc: akpm, damon, linux-mm, LKML, Kaixu Xia On Sat, Aug 27, 2022 at 1:08 AM SeongJae Park <sj@kernel.org> wrote: > > Hi Kaixu, > > On Fri, 26 Aug 2022 16:31:17 +0800 xiakaixu1987@gmail.com wrote: > > > From: Kaixu Xia <kaixuxia@tencent.com> > > > > The parameter 'struct damon_ctx *ctx' is unnecessary in damon > > 'check_accesses' callback operation, so we can remove it. > > Thank you for the finding, but this wording is not 100% perfect, strictly > speaking. The callback operations indeed use the parameter, but the internal > functions called by the callbacks (__damon_{p,v}a_check_access()) aren't. > > Could you please update the message? Thanks for your comments. I will update it in the next version. > > > > > Signed-off-by: Kaixu Xia <kaixuxia@tencent.com> > > --- > > mm/damon/paddr.c | 5 ++--- > > mm/damon/vaddr.c | 5 ++--- > > 2 files changed, 4 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..c8c2f306bb6d 100644 > > --- a/mm/damon/vaddr.c > > +++ b/mm/damon/vaddr.c > > @@ -532,8 +532,7 @@ 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) > > I still prefer 80 columns rule[1]. Could you please break this line? > > > [1] https://docs.kernel.org/process/coding-style.html#breaking-long-lines-and-strings Sorry, I missed the warning in the new 100 characters rules :) Will fix it. > > > { > > static struct mm_struct *last_mm; > > static unsigned long last_addr; > > @@ -568,7 +567,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 > > > Thanks, > SJ ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2/2] mm/damon/vaddr: remove comparison between mm and last_mm when checking region accesses 2022-08-26 8:31 [PATCH 0/2] Simplify the damon regions access check xiakaixu1987 2022-08-26 8:31 ` [PATCH 1/2] mm/damon: simplify the parameter passing for 'check_accesses' xiakaixu1987 @ 2022-08-26 8:31 ` xiakaixu1987 2022-08-26 17:16 ` SeongJae Park 1 sibling, 1 reply; 7+ messages in thread From: xiakaixu1987 @ 2022-08-26 8:31 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. Signed-off-by: Kaixu Xia <kaixuxia@tencent.com> --- 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 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] mm/damon/vaddr: remove comparison between mm and last_mm when checking region accesses 2022-08-26 8:31 ` [PATCH 2/2] mm/damon/vaddr: remove comparison between mm and last_mm when checking region accesses xiakaixu1987 @ 2022-08-26 17:16 ` SeongJae Park 2022-08-26 21:06 ` Kaixu Xia 0 siblings, 1 reply; 7+ messages in thread From: SeongJae Park @ 2022-08-26 17:16 UTC (permalink / raw) To: xiakaixu1987; +Cc: sj, akpm, damon, linux-mm, linux-kernel, Kaixu Xia Hi Kaixu, On Fri, 26 Aug 2022 16:31:18 +0800 xiakaixu1987@gmail.com wrote: > 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. 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 [...] ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] mm/damon/vaddr: remove comparison between mm and last_mm when checking region accesses 2022-08-26 17:16 ` SeongJae Park @ 2022-08-26 21:06 ` Kaixu Xia 0 siblings, 0 replies; 7+ messages in thread From: Kaixu Xia @ 2022-08-26 21:06 UTC (permalink / raw) To: SeongJae Park; +Cc: akpm, damon, linux-mm, LKML, Kaixu Xia On Sat, Aug 27, 2022 at 1:16 AM SeongJae Park <sj@kernel.org> wrote: > > Hi Kaixu, > > On Fri, 26 Aug 2022 16:31:18 +0800 xiakaixu1987@gmail.com wrote: > > > 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. > > 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 > > [...] ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2022-08-26 21:06 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2022-08-26 8:31 [PATCH 0/2] Simplify the damon regions access check xiakaixu1987 2022-08-26 8:31 ` [PATCH 1/2] mm/damon: simplify the parameter passing for 'check_accesses' xiakaixu1987 2022-08-26 17:08 ` SeongJae Park 2022-08-26 20:32 ` Kaixu Xia 2022-08-26 8:31 ` [PATCH 2/2] mm/damon/vaddr: remove comparison between mm and last_mm when checking region accesses xiakaixu1987 2022-08-26 17:16 ` SeongJae Park 2022-08-26 21:06 ` Kaixu Xia
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).