mm/damon/core: copy nr_accesses when splitting region
Subsystems (3)
SeongJae Park
maintainerPATCH 1/2 mm/damon/core: copy nr_accesses when splitting region
Regions split function ('damon_split_region_at()') is called at the beginning of an aggregation interval, and when DAMOS applying the actions and charging quota. Because 'nr_accesses' fields of all regions are reset at the beginning of each aggregation interval, and DAMOS was applying the action at the end of each aggregation interval, there was no need to copy the 'nr_accesses' field to the split-out region.
However, commit 42f994b71404 ("mm/damon/core: implement scheme-specific apply interval") made DAMOS applies action on its own timing interval. Hence, 'nr_accesses' should also copied to split-out regions, but the commit didn't. Fix it by copying it.
---
Cc-ing stable@ is not needed, since the commit that introduced the issue has merged in v6.7 merge window.
mm/damon/core.c | 1 + 1 file changed, 1 insertion(+)
mm/damon/core.c +1 -0
@@ -1225,6 +1225,7 @@ static void damon_split_region_at(struct damon_target *t, new->age = r->age; new->last_nr_accesses = r->last_nr_accesses; new->nr_accesses_bp = r->nr_accesses_bp; + new->nr_accesses = r->nr_accesses;damon_insert_region (new, r,damon_next_region (r), t); }
Signature · 1 line
2.34.1
SeongJae Park
maintainerPATCH 2/2 mm/damon/core-test: test damon_split_region_at()'s access rate copying
damon_split_region_at() should set access rate related fields of the resulting regions same. It may forgotten, and actually there was the mistake before. Test it with the unit test case for the function.
--- mm/damon/core-test.h | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-)
mm/damon/core-test.h +11 -4
@@ -122,18 +122,25 @@ static void damon_test_split_at(struct kunit *test) {struct damon_ctx *c =damon_new_ctx ();struct damon_target *t; -struct damon_region *r; +struct damon_region *r, *r_new; t =damon_new_target (); r =damon_new_region (0 ,100 ); + r->nr_accesses_bp =420000 ; + r->nr_accesses =42 ; + r->last_nr_accesses =15 ;damon_add_region (r, t);damon_split_region_at (t, r,25 );KUNIT_EXPECT_EQ (test, r->ar.start,0ul );KUNIT_EXPECT_EQ (test, r->ar.end,25ul ); - r =damon_next_region (r); -KUNIT_EXPECT_EQ (test, r->ar.start,25ul ); -KUNIT_EXPECT_EQ (test, r->ar.end,100ul ); + r_new =damon_next_region (r); +KUNIT_EXPECT_EQ (test, r_new->ar.start,25ul ); +KUNIT_EXPECT_EQ (test, r_new->ar.end,100ul ); + +KUNIT_EXPECT_EQ (test, r->nr_accesses_bp, r_new->nr_accesses_bp); +KUNIT_EXPECT_EQ (test, r->nr_accesses, r_new->nr_accesses); +KUNIT_EXPECT_EQ (test, r->last_nr_accesses, r_new->last_nr_accesses);damon_free_target (t);damon_destroy_ctx (c);
Signature · 1 line
2.34.1